From 65e2e880f141db9d819b562182505757ea8ebd8d Mon Sep 17 00:00:00 2001 From: Neucrack Date: Thu, 2 Jan 2025 15:35:23 +0800 Subject: [PATCH] add hand landmarks support, nn support hwc input, cdk support image <-> CV obj convert --- .../maixcam_lib/include/maix_nn_maixcam.hpp | 2 +- components/maixcam_lib/lib/libmaixcam_lib.so | Bin 922216 -> 922216 bytes components/nn/include/maix_nn.hpp | 5 +- .../nn/include/maix_nn_hand_landmarks.hpp | 778 ++++++++++++++++++ components/nn/include/maix_nn_object.hpp | 15 + components/nn/src/maix_nn.cpp | 4 +- components/vision/include/maix_image_cv.hpp | 31 + components/vision/src/maix_image.cpp | 598 +++++++++----- examples/nn_hand_keypoints/.gitignore | 9 + examples/nn_hand_keypoints/README.md | 13 + .../nn_hand_keypoints/main/CMakeLists.txt | 74 ++ examples/nn_hand_keypoints/main/Kconfig | 0 .../nn_hand_keypoints/main/include/main.h | 3 + examples/nn_hand_keypoints/main/src/main.cpp | 123 +++ 14 files changed, 1454 insertions(+), 201 deletions(-) create mode 100644 components/nn/include/maix_nn_hand_landmarks.hpp create mode 100644 components/vision/include/maix_image_cv.hpp create mode 100644 examples/nn_hand_keypoints/.gitignore create mode 100644 examples/nn_hand_keypoints/README.md create mode 100644 examples/nn_hand_keypoints/main/CMakeLists.txt create mode 100644 examples/nn_hand_keypoints/main/Kconfig create mode 100644 examples/nn_hand_keypoints/main/include/main.h create mode 100644 examples/nn_hand_keypoints/main/src/main.cpp diff --git a/components/maixcam_lib/include/maix_nn_maixcam.hpp b/components/maixcam_lib/include/maix_nn_maixcam.hpp index 1b1d55f2..1486935f 100644 --- a/components/maixcam_lib/include/maix_nn_maixcam.hpp +++ b/components/maixcam_lib/include/maix_nn_maixcam.hpp @@ -71,7 +71,7 @@ namespace maix::nn * @param[in] img input image * @return output tensor */ - virtual tensor::Tensors *forward_image(image::Image &img, std::vector mean = std::vector(), std::vector scale = std::vector(), image::Fit fit = image::Fit::FIT_CONTAIN, bool copy_result = true, bool clear_buff = false) final; + virtual tensor::Tensors *forward_image(image::Image &img, std::vector mean = std::vector(), std::vector scale = std::vector(), image::Fit fit = image::Fit::FIT_CONTAIN, bool copy_result = true, bool clear_buff = false, bool chw = true) final; private: bool _loaded; diff --git a/components/maixcam_lib/lib/libmaixcam_lib.so b/components/maixcam_lib/lib/libmaixcam_lib.so index 878103fa853ff24f0ae0084c0938d1c01ce159be..100042428e5e84f3ade08ab1a479b5553bbcadff 100755 GIT binary patch delta 183763 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 SpDF0t`16^f9H<+ZYWzRyAGwJD delta 183419 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�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 WXga5(zrj5V{6&8w?{Dm%VfcTPOQ&xD diff --git a/components/nn/include/maix_nn.hpp b/components/nn/include/maix_nn.hpp index f3c5187e..f71e7bb8 100644 --- a/components/nn/include/maix_nn.hpp +++ b/components/nn/include/maix_nn.hpp @@ -245,7 +245,7 @@ namespace maix::nn * default is image.Fit.FIT_FILL for easy coordinate calculation, but for more accurate result, use image.Fit.FIT_CONTAIN is better. * @return output tensor */ - virtual tensor::Tensors *forward_image(image::Image &img, std::vector mean = {}, std::vector scale = {}, image::Fit fit = image::Fit::FIT_CONTAIN, bool copy_result = true, bool dual_buff_wait = false) = 0; + virtual tensor::Tensors *forward_image(image::Image &img, std::vector mean = {}, std::vector scale = {}, image::Fit fit = image::Fit::FIT_CONTAIN, bool copy_result = true, bool dual_buff_wait = false, bool chw = true) = 0; }; /** @@ -375,12 +375,13 @@ namespace maix::nn * @param copy_result If set true, will copy result to a new variable; else will use a internal memory, you can only use it until to the next forward. * Default true to avoid problems, you can set it to false manually to make speed faster. * @param dual_buff_wait bool type, only for dual_buff mode, if true, will inference this image and wait for result, default false. + * @param chw chw channel format, forward model with hwc format image input if set to false, default true(chw). * @return output tensor. In C++, you should manually delete tensors in return value and return value. * If dual_buff mode, it can be NULL(None in MaixPy) means not ready. * @throw If error occurs, like arg error or alloc memory failed, will raise err.Exception. * @maixpy maix.nn.NN.forward_image */ - tensor::Tensors *forward_image(image::Image &img, std::vector mean = std::vector(), std::vector scale = std::vector(), image::Fit fit = image::Fit::FIT_FILL, bool copy_result = true, bool dual_buff_wait = false); + tensor::Tensors *forward_image(image::Image &img, std::vector mean = std::vector(), std::vector scale = std::vector(), image::Fit fit = image::Fit::FIT_FILL, bool copy_result = true, bool dual_buff_wait = false, bool chw = true); private: MUD _mud; diff --git a/components/nn/include/maix_nn_hand_landmarks.hpp b/components/nn/include/maix_nn_hand_landmarks.hpp new file mode 100644 index 00000000..8ef6d8fa --- /dev/null +++ b/components/nn/include/maix_nn_hand_landmarks.hpp @@ -0,0 +1,778 @@ +/** + * @author neucrack@sipeed + * @copyright Sipeed Ltd 2024- + * @license Apache 2.0 + * @update 2024.12.27: Add hand keypoints support. + */ + +#pragma once +#include "maix_basic.hpp" +#include "maix_nn.hpp" +#include "maix_image.hpp" +#include "maix_image_cv.hpp" +#include "maix_nn_F.hpp" +#include "maix_nn_object.hpp" +#include + +#define DRAW_STD_IMG 0 + +namespace maix::nn +{ + /** + * HandLandmarks class + * @maixpy maix.nn.HandLandmarks + */ + class HandLandmarks + { + public: + /** + * Constructor of HandLandmarks class + * @param model model path, default empty, you can load model later by load function. + * @throw If model arg is not empty and load failed, will throw err::Exception. + * @maixpy maix.nn.HandLandmarks.__init__ + * @maixcdk maix.nn.HandLandmarks.HandLandmarks + */ + HandLandmarks(const string &model = "") + { + _model = nullptr; + _model_detect = nullptr; + if (!model.empty()) + { + err::Err e = load(model); + if (e != err::ERR_NONE) + { + throw err::Exception(e, "load model failed"); + } + } + } + + ~HandLandmarks() + { + if (_model_detect) + { + delete _model_detect; + _model_detect = nullptr; + } + if (_model) + { + delete _model; + _model = nullptr; + } + } + + std::string type() + { + return _extra_info["type"]; + } + + /** + * Load model from file + * @param model Model path want to load + * @return err::Err + * @maixpy maix.nn.HandLandmarks.load + */ + err::Err load(const string &model) + { + if (_model) + { + delete _model; + _model = nullptr; + } + _model = new nn::NN(model, false); + if (!_model) + { + return err::ERR_NO_MEM; + } + _extra_info = _model->extra_info(); + if (_extra_info.find("model_type") != _extra_info.end()) + { + if (_extra_info["model_type"] != this->type_str) + { + log::error("model_type not match, expect '%s', but got '%s'", this->type_str.c_str(), _extra_info["model_type"].c_str()); + return err::ERR_ARGS; + } + } + else + { + log::error("model_type key not found"); + return err::ERR_ARGS; + } + log::info("model info:\n\ttype: %s", this->type_str.c_str()); + if (_extra_info.find("input_type") != _extra_info.end()) + { + std::string input_type = _extra_info["input_type"]; + if (input_type == "rgb") + { + _input_img_fmt = maix::image::FMT_RGB888; + log::print("\tinput type: rgb\n"); + } + else if (input_type == "bgr") + { + _input_img_fmt = maix::image::FMT_BGR888; + log::print("\tinput type: bgr\n"); + } + else + { + log::error("unknown input type: %s", input_type.c_str()); + return err::ERR_ARGS; + } + } + else + { + log::error("input_type key not found"); + return err::ERR_ARGS; + } + if (_extra_info.find("mean") != _extra_info.end()) + { + std::string mean_str = _extra_info["mean"]; + std::vector mean_strs = split(mean_str, ","); + log::print("\tmean:"); + for (auto &it : mean_strs) + { + try + { + this->mean.push_back(std::stof(it)); + } + catch (std::exception &e) + { + log::error("mean value error, should float"); + return err::ERR_ARGS; + } + log::print("%f ", this->mean.back()); + } + log::print("\n"); + } + else + { + log::error("mean key not found"); + return err::ERR_ARGS; + } + if (_extra_info.find("scale") != _extra_info.end()) + { + std::string scale_str = _extra_info["scale"]; + std::vector scale_strs = split(scale_str, ","); + log::print("\tscale:"); + for (auto &it : scale_strs) + { + try + { + this->scale.push_back(std::stof(it)); + } + catch (std::exception &e) + { + log::error("scale value error, should float"); + return err::ERR_ARGS; + } + log::print("%f ", this->scale.back()); + } + log::print("\n"); + } + else + { + log::error("scale key not found"); + return err::ERR_ARGS; + } + err::Err e = _model->extra_info_labels(labels); + if (e == err::Err::ERR_NONE) + { + log::print("\tlabels num: %ld\n", labels.size()); + } + else + { + log::error("labels key not found: %s", err::to_str(e).c_str()); + return err::ERR_ARGS; + } + if (_extra_info.find("detect_model") != _extra_info.end()) + { + std::string model_file = fs::dirname(model) + "/" + _extra_info["detect_model"]; + _model_detect = new nn::NN(model_file, false); + if (!_model_detect) + { + log::error("load detect model failed"); + return err::ERR_NO_MEM; + } + } + else + { + log::error("detect_model key not found"); + return err::ERR_ARGS; + } + std::vector inputs = _model->inputs_info(); + std::vector inputs_detect = _model_detect->inputs_info(); + _input_size = image::Size(inputs[0].shape[2], inputs[0].shape[1]); + _input_size_detect = image::Size(inputs_detect[0].shape[2], inputs_detect[0].shape[1]); + log::print("\tinput size: %dx%d\n\n", _input_size_detect.width(), _input_size_detect.height()); + + // anchors + if (_extra_info.find("anchors") != _extra_info.end()) + { + std::string anchors_file = fs::dirname(model) + "/" + _extra_info["anchors"]; + fs::File *f = fs::open(anchors_file, "r"); + if(!f) + { + log::error("open anchor file %s failed", anchors_file.c_str()); + return err::ERR_ARGS; + } + + while(1) + { + std::string *line = f->readline(); + if(!line) + break; + if(!_parse_anchor_line(*line, _anchors)) + { + log::error("parse_anchor_line %s failed", line->c_str()); + delete line; + delete f; + return err::ERR_ARGS; + } + delete line; + } + delete f; + } + else + { + log::error("detect_model key not found"); + return err::ERR_ARGS; + } + + return err::ERR_NONE; + } + + /** + * Detect objects from image + * @param img Image want to detect, if image's size not match model input's, will auto resize with fit method. + * @param conf_th Hand detect confidence threshold, default 0.7. + * @param iou_th IoU threshold, default 0.45. + * @param conf_th2 Hand detect confidence second time check threshold, default 0.8. + * @param landmarks_rel outputs the relative coordinates of 21 points with respect to the top-left vertex of the hand. + * In obj.points, the last 21x2 values are arranged as x0y0x1y1...x20y20. + * Value from 0 to obj.w. + * @throw If image format not match model input format, will throw err::Exception. + * @return Object list. In C++, you should delete it after use. + * Object's points value format: box_topleft_x, box_topleft_y, box_topright_x, box_topright_y, box_bottomright_x, box_bottomright_y, box_bottomleft_x, box_bottomleft_y, + * x0, y0, z1, x1, y1, z2, ..., x20, y20, z20. + * If landmarks_rel is True, will be box_topleft_x, box_topleft_y...,x20,y20,z20,x0_rel,y0_rel,...,x20_rel,y20_rel. + * Z is depth, the larger the value, the farther away from the palm, and the positive value means closer to the camera. + * @maixpy maix.nn.HandLandmarks.detect + */ + nn::Objects *detect(image::Image &img, float conf_th = 0.7, float iou_th = 0.45, float conf_th2 = 0.8, bool landmarks_rel = false) + { + maix::image::Fit fit = maix::image::FIT_CONTAIN; + this->_conf_th = conf_th; + this->_iou_th = iou_th; + this->_conf_th2 = conf_th2; + if (img.format() != _input_img_fmt) + { + throw err::Exception("image format not match, input_type: " + image::fmt_names[_input_img_fmt] + ", image format: " + image::fmt_names[img.format()]); + } + image::Image *detect_img_input = &img; + bool resized = false; + if (img.width() != _input_size_detect.width() || img.height() != _input_size_detect.height()) + { + detect_img_input = img.resize(_input_size_detect.width(), _input_size_detect.height(), fit); + resized = true; + } + nn::Objects *objs = new nn::Objects(); + tensor::Tensors *outputs; + outputs = _model_detect->forward_image(*detect_img_input, this->mean, this->scale, fit, false, true, false); + if (resized) + delete detect_img_input; + if (!outputs) // not ready, return empty result. + { + return objs; + } + _decode_objs(*objs, outputs, conf_th, _input_size_detect.width(), _input_size_detect.height(), resized, img.width(), img.height()); + delete outputs; + if (objs->size() > 0) + { + nn::Objects *objects_total = objs; + objs = _nms(*objs); + delete objects_total; + } + std::vector M_inverse; + std::vector landmarks_input = _crop_reize_hand(*objs, img, _input_size.width(), _input_size.height(), M_inverse, landmarks_rel); + #if DRAW_STD_IMG + int y=0; + #endif + bool have_invalid = false; + for(size_t i=0; iheight(); + #endif + outputs = _model->forward_image(*landmarks_input[i], this->mean, this->scale, fit, false, true, false); + delete landmarks_input[i]; + if (!outputs) // not ready, return empty result. + { + return objs; + } + have_invalid |= _decode_landmarks(*objs, i, outputs, conf_th2, M_inverse, _input_size.width(), _input_size.height(), img.width(), img.height(), landmarks_rel); + delete outputs; + } + if(have_invalid) + { + nn::Objects *res = new nn::Objects(); + for(size_t i = 0; i < objs->size(); ++i) + { + nn::Object &obj = objs->at(i); + if(obj.score > 0) + res->add(obj); + } + delete objs; + return res; + } + return objs; + } + + /** + * Get model input size + * @param detect detect or landmarks model, default true. + * @return model input size + * @maixpy maix.nn.HandLandmarks.input_size + */ + image::Size input_size(bool detect = true) + { + if (detect) + return _input_size_detect; + return _input_size; + } + + /** + * Get model input width + * @param detect detect or landmarks model, default true. + * @return model input size of width + * @maixpy maix.nn.HandLandmarks.input_width + */ + int input_width(bool detect = true) + { + if (detect) + return _input_size_detect.width(); + return _input_size.width(); + } + + /** + * Get model input height + * @param detect detect or landmarks model, default true. + * @return model input size of height + * @maixpy maix.nn.HandLandmarks.input_height + */ + int input_height(bool detect = true) + { + if (detect) + return _input_size_detect.height(); + return _input_size.height(); + } + + /** + * Get input image format + * @return input image format, image::Format type. + * @maixpy maix.nn.HandLandmarks.input_format + */ + image::Format input_format() + { + return _input_img_fmt; + } + + /** + * Draw hand and landmarks on image + * @param img image object, maix.image.Image type. + * @param leftright, 0 means left, 1 means right + * @param points points result from detect method: box_topleft_x, box_topleft_y, box_topright_x, box_topright_y, box_bottomright_x, box_bottomright_y, box_bottomleft_x, box_bottomleft_y, + * x0, y0, z1, x1, y1, z2, ..., x20, y20, z20 + * @param r_min min radius of points. + * @param r_max min radius of points. + * @param box draw box or not, default true. + * @param box_color color of box. + * @maixpy maix.nn.HandLandmarks.draw_hand + */ + void draw_hand(image::Image &img, int leftright, const std::vector &points, int r_min = 4, int r_max = 10, bool box = true, int box_thickness = 1, image::Color box_color_l = image::COLOR_RED, image::Color box_color_r = image::COLOR_GREEN) + { + if (points.size() < 71) + { + throw std::runtime_error("keypoints size must 72"); + } + if (box) + { + img.draw_line(points[0], points[1], points[2], points[3], leftright == 0 ? box_color_l : box_color_r, box_thickness); + img.draw_line(points[2], points[3], points[4], points[5], leftright == 0 ? box_color_l : box_color_r, box_thickness); + img.draw_line(points[4], points[5], points[6], points[7], leftright == 0 ? box_color_l : box_color_r, box_thickness); + img.draw_line(points[6], points[7], points[0], points[1], leftright == 0 ? box_color_l : box_color_r, box_thickness); + } + int max_z = INT_MIN, min_z = INT_MAX; + for (int i = 0; i < 21; ++i) + { + if (points[10 + i * 3] > max_z) + max_z = points[10 + i * 3]; + else if (points[10 + i * 3] < min_z) + min_z = points[10 + i * 3]; + } + float range = 1.0 / (max_z - min_z); + for (int i = 0; i < 5; ++i) + { + float radius = (points[10 + i * 3] - min_z) * range; + uint8_t c = (uint8_t)(radius * 255); + auto color = image::Color::from_rgb(c, c, c); + int r = (int)(radius * r_max); + if (r < r_min) + r = r_min; + img.draw_circle(points[8 + i * 3], points[9 + i * 3], r, color, -1); + } + for (int i = 5; i < 9; ++i) + { + float radius = (points[10 + i * 3] - min_z) * range; + auto color = image::Color::from_rgb(radius * 255, 0, 0); + int r = (int)(radius * r_max); + if (r < r_min) + r = r_min; + img.draw_circle(points[8 + i * 3], points[9 + i * 3], r, color, -1); + } + for (int i = 9; i < 13; ++i) + { + float radius = (points[10 + i * 3] - min_z) * range; + auto color = image::Color::from_rgb(0, radius * 255, 0); + int r = (int)(radius * r_max); + if (r < r_min) + r = r_min; + img.draw_circle(points[8 + i * 3], points[9 + i * 3], r, color, -1); + } + for (int i = 13; i < 17; ++i) + { + float radius = (points[10 + i * 3] - min_z) * range; + auto color = image::Color::from_rgb(0, 0, radius * 255); + int r = (int)(radius * r_max); + if (r < r_min) + r = r_min; + img.draw_circle(points[8 + i * 3], points[9 + i * 3], r, color, -1); + } + for (int i = 17; i < 21; ++i) + { + float radius = (points[10 + i * 3] - min_z) * range; + uint8_t c = (uint8_t)(radius * 255); + auto color = image::Color::from_rgb(0, c, c); + int r = (int)(radius * r_max); + if (r < r_min) + r = r_min; + img.draw_circle(points[8 + i * 3], points[9 + i * 3], r, color, -1); + } + } + + public: + /** + * Labels list + * @maixpy maix.nn.HandLandmarks.labels + */ + std::vector labels; + + /** + * Label file path + * @maixpy maix.nn.HandLandmarks.label_path + */ + std::string label_path; + + /** + * Get mean value, list type + * @maixpy maix.nn.HandLandmarks.mean + */ + std::vector mean; + + /** + * Get scale value, list type + * @maixpy maix.nn.HandLandmarks.scale + */ + std::vector scale; + + protected: + std::string type_str = "hand_landmarks"; + + private: + image::Size _input_size; + image::Size _input_size_detect; + image::Format _input_img_fmt; + nn::NN *_model; + nn::NN *_model_detect; + std::map _extra_info; + float _conf_th = 0.7; + float _iou_th = 0.45; + float _conf_th2 = 0.8; + std::vector> _anchors; + + private: + bool _parse_anchor_line(std::string &line, std::vector> &anchors) + { + std::vector tokens; + split0(tokens, line, ","); + if(tokens.size() != 4) + return false; + std::vector anchor = {std::stof(tokens[0]) * _input_size_detect.width(), std::stof(tokens[1]) * _input_size_detect.height(), std::stof(tokens[2]), std::stof(tokens[3])}; + anchors.push_back(anchor); + return true; + } + + void _decode_objs(nn::Objects &objects, tensor::Tensors *outputs, const float &conf_th, int input_w, int input_h, bool resized, int img_w, int img_h) + { + tensor::Tensor *score_out = NULL; // shape 1, 2016, 18, 1 + tensor::Tensor *box_out = NULL; // shape 1, 2016, 1, 1 + int bbox_size = 2016; + for (auto i : *outputs) + { + if (i.second->shape()[2] == 18) + { + box_out = i.second; + bbox_size = i.second->shape()[1]; + } + else + { + score_out = i.second; + } + } + if (!box_out) + { + throw err::Exception(err::ERR_ARGS, "wrong model"); + } + float *scores = (float*)score_out->data(); + float *bboxes = (float*)box_out->data(); + for (int i = 0; i < bbox_size; ++i) + { + scores[i] = _sigmoid(scores[i]); + if(scores[i] >= conf_th) + { + float *p = bboxes + i*18; + int w = p[2] * _anchors[i][2]; + int h = p[3] * _anchors[i][3]; + int x = p[0] + _anchors[i][0] - w * 0.5; + int y = p[1] + _anchors[i][1] - h * 0.5; + int p0_x = _anchors[i][0] + p[4]; + int p0_y = _anchors[i][1] + p[5]; + int p2_x = _anchors[i][0] + p[8]; + int p2_y = _anchors[i][1] + p[9]; + float angle = atan2(p2_y - p0_y, p2_x - p0_x) + M_PI; + if(resized) + { + auto bbox = image::resize_map_pos_reverse(img_w, img_h, input_w, input_h, image::FIT_CONTAIN, x, y, w, h); + auto p2 = image::resize_map_pos_reverse(img_w, img_h, input_w, input_h, image::FIT_CONTAIN, p2_x, p2_y); + objects.add(bbox[0], bbox[1], bbox[2], bbox[3], 0, scores[i], std::vector({p2[0], p2[1]}), angle); + } + else + objects.add(x, y, w, h, 0, scores[i], std::vector({p2_x, p2_y}), angle); + } + } + } + + std::vector _crop_reize_hand(nn::Objects &objs, image::Image &img, int input_w, int input_h, std::vector &M_inverse, bool landmarks_rel) + { + std::vector res; + float dscale = 2.6; + for (size_t i = 0; i < objs.size(); ++i) + { + nn::Object &obj = objs.at(i); + float dy = -0.5 * sin(obj.angle); + int cx = (int)((obj.x + obj.w * 0.5 + obj.points[0]) * 0.5); + int cy = (int)((obj.y + obj.h * 0.5 + obj.w * dy + obj.points[1]) * 0.5); + // img.draw_circle(cx, cy, 5, image::COLOR_RED, -1); + // img.draw_circle(obj.points[0], obj.points[1], 5, image::COLOR_YELLOW, -1); + obj.points.resize(71 + (landmarks_rel ? 21 * 2 : 0), 0); + int hand_size = (int)(obj.w * dscale); + float theta = obj.angle - M_PI * 0.5; + cv::Mat A = (cv::Mat_(4, 2) << -1, -1, -1, 1, 1, 1, 1, -1); + cv::Mat R = (cv::Mat_(2, 2) << cos(theta), sin(theta), -sin(theta), cos(theta)); + cv::Mat C; + float half_w = hand_size * 0.5; + cv::gemm(A, R, half_w, cv::Mat(), 0.0, C); + for (int i = 0; i < C.rows; ++i) { + C.at(i, 0) += cx; + C.at(i, 1) += cy; + obj.points[i*2] = C.at(i, 0); + obj.points[1 + i*2] = C.at(i, 1); + } + obj.x = cx - half_w; + obj.y = cy - half_w; + obj.w = hand_size; + obj.h = hand_size; + cv::Mat element = C(cv::Range(0, 3), cv::Range(0, 2)); + cv::Mat dst = (cv::Mat_(3, 2) << 0, 0, 0, input_h, input_w, input_h); + auto M = cv::getAffineTransform(element, dst); + image::Image *img_dst = new image::Image(input_w, input_h, image::FMT_RGB888); + if(!img_dst) + { + log::error("no memory"); + break; + } + cv::Mat img_dst2(input_h, input_w, CV_8UC3, img_dst->data()); + cv::Mat img_src; + image::image2cv(img, img_src, false, false); + cv::warpAffine(img_src, img_dst2, M, cv::Size(input_w, input_h), cv::INTER_NEAREST); + assert(img_dst2.data() == img_dst->data()); + res.push_back(img_dst); + cv::Mat iM; + cv::invertAffineTransform(M, iM); + M_inverse.push_back(iM); + } + return res; + } + + bool _decode_landmarks(nn::Objects &objs, int idx, tensor::Tensors *outputs, float conf_th2, std::vector &M_inverse, int input_w, int input_h, int img_w, int img_h, bool landmarks_rel) + { + tensor::Tensor *leftright_out = NULL; // shape 1, 1, 1, 1 + tensor::Tensor *score_out = NULL; // shape 1, 1, 1, 1 + tensor::Tensor *points_out = NULL; // shape 1, 63, 1, 1 + for (auto i : *outputs) + { + if (i.second->shape()[1] == 63) + { + points_out = i.second; + } + else if(i.first.find("score") != std::string::npos) + { + score_out = i.second; + } + else + { + leftright_out = i.second; + } + } + if (!leftright_out || !score_out || !points_out) + { + throw err::Exception(err::ERR_ARGS, "wrong model"); + } + auto &obj = objs.at(idx); + float score = _sigmoid(*(float*)score_out->data()); + float leftright = _sigmoid(*(float*)leftright_out->data()); + float *points = (float*)points_out->data(); + if(score < conf_th2) + { + obj.score = 0; + return true; // invalid + } + obj.score = score; + obj.class_id = leftright > 0.5 ? 1 : 0; + cv::Mat iM; + cv::transpose(M_inverse[idx], iM); + cv::Mat A = cv::Mat_(21, 3); + for (int i = 0; i < A.rows; ++i) { + A.at(i, 0) = points[i*3]; + A.at(i, 1) = points[i*3 + 1]; + A.at(i, 2) = 1; + obj.points[8 + i*3 + 2] = (int)(-points[i*3 + 2] * obj.w); + } + cv::Mat C; + cv::gemm(A, iM, 1.0, cv::Mat(), 0.0, C); + for (int i = 0; i < C.rows; ++i) { + obj.points[8 + 3*i] = C.at(i, 0); + obj.points[9 + 3*i] = C.at(i, 1); + } + if(landmarks_rel) + { + for (int i = 0; i < 21; ++i) + { + obj.points[71 + i * 2] = points[i*3]; + obj.points[72 + i * 2] = points[i*3 + 1]; + } + } + // update angle + obj.angle = atan2(obj.points[36] - obj.points[9], obj.points[35] - obj.points[8]) + M_PI; + return false; // valid + } + + nn::Objects *_nms(nn::Objects &objs) + { + nn::Objects *result = new nn::Objects(); + std::sort(objs.begin(), objs.end(), [](const nn::Object *a, const nn::Object *b) + { return a->score > b->score; }); + for (size_t i = 0; i < objs.size(); ++i) + { + nn::Object &a = objs.at(i); + if (a.score == 0) + continue; + for (size_t j = i + 1; j < objs.size(); ++j) + { + nn::Object &b = objs.at(j); + { + if (b.score != 0 && a.class_id == b.class_id && _calc_iou(a, b) > this->_iou_th) + { + b.score = 0; + } + } + } + } + for (nn::Object *a : objs) + { + if (a->score != 0) + { + result->add(a->x, a->y, a->w, a->h, a->class_id, a->score, a->points, a->angle); + } + } + return result; + } + + inline static float _sigmoid(float x) { return 1.0 / (1 + expf(-x)); } + + inline static float _calc_iou(Object &a, Object &b) + { + float area1 = a.w * a.h; + float area2 = b.w * b.h; + float wi = std::min((a.x + a.w), (b.x + b.w)) - + std::max(a.x, b.x); + float hi = std::min((a.y + a.h), (b.y + b.h)) - + std::max(a.y, b.y); + float area_i = std::max(wi, 0.0f) * std::max(hi, 0.0f); + return area_i / (area1 + area2 - area_i); + } + + template + static int _argmax(const T *data, size_t len, size_t stride = 1) + { + int maxIndex = 0; + for (size_t i = 1; i < len; i++) + { + int idx = i * stride; + if (data[maxIndex * stride] < data[idx]) + { + maxIndex = i; + } + } + return maxIndex; + } + + template + static int _argmax2(const T *data, size_t end, size_t stride = 1) + { + int maxIndex = 0; + for (size_t i = stride; i < end; i += stride) + { + if (data[maxIndex] < data[i]) + { + maxIndex = i; + } + } + return maxIndex; + } + + static void split0(std::vector &items, const std::string &s, const std::string &delimiter) + { + items.clear(); + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + std::string token; + + while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) + { + token = s.substr(pos_start, pos_end - pos_start); + pos_start = pos_end + delim_len; + token.erase(0, token.find_first_not_of(" \t\r\n")); + token.erase(token.find_last_not_of(" \t\r\n") + 1); + items.push_back(token); + } + + items.push_back(s.substr(pos_start)); + } + + static std::vector split(const std::string &s, const std::string &delimiter) + { + std::vector tokens; + split0(tokens, s, delimiter); + return tokens; + } + }; + +} // namespace maix::nn diff --git a/components/nn/include/maix_nn_object.hpp b/components/nn/include/maix_nn_object.hpp index 0303c37f..26451e41 100644 --- a/components/nn/include/maix_nn_object.hpp +++ b/components/nn/include/maix_nn_object.hpp @@ -300,6 +300,21 @@ namespace maix::nn return *obj; } + /** + * Add object to objects + * @throw Throw exception if no memory + * @maixcdk maix.nn.Objects.add + */ + nn::Object &add(const nn::Object &obj) + { + Object *obj_new = new Object(obj.x, obj.y, obj.w, obj.h, obj.class_id, obj.score, obj.points, obj.angle); + if(!obj_new) + throw err::Exception(err::ERR_NO_MEM); + obj_new->seg_mask = NULL; + objs.push_back(obj_new); + return *obj_new; + } + /** * Remove object form objects * @maixpy maix.nn.Objects.remove diff --git a/components/nn/src/maix_nn.cpp b/components/nn/src/maix_nn.cpp index de572d09..e5650f63 100644 --- a/components/nn/src/maix_nn.cpp +++ b/components/nn/src/maix_nn.cpp @@ -304,9 +304,9 @@ namespace maix::nn return _impl->forward(inputs, copy_result, dual_buff_wait); } - tensor::Tensors *NN::forward_image(image::Image &img, std::vector mean, std::vector scale, image::Fit fit, bool copy_result, bool dual_buff_wait) + tensor::Tensors *NN::forward_image(image::Image &img, std::vector mean, std::vector scale, image::Fit fit, bool copy_result, bool dual_buff_wait, bool chw) { - return _impl->forward_image(img, mean, scale, fit, copy_result, dual_buff_wait); + return _impl->forward_image(img, mean, scale, fit, copy_result, dual_buff_wait, chw); } int SelfLearnClassifier::learn() diff --git a/components/vision/include/maix_image_cv.hpp b/components/vision/include/maix_image_cv.hpp new file mode 100644 index 00000000..64d8e254 --- /dev/null +++ b/components/vision/include/maix_image_cv.hpp @@ -0,0 +1,31 @@ +#include "maix_image.hpp" +#include "opencv2/opencv.hpp" + +namespace maix::image +{ + + /** + * Convert image::Image object to opencv Mat object + * @param[in] img image::Image object + * @param[out] mat cv::Mat object, output image, will be allocated by this function. + * @param[in] ensure_bgr auto convert to BGR888 or BGRA8888 if img format is not BGR or BGRA, if set to false, will not auto convert and directly use img's data, default false. + * If copy is false, ensure_bgr always be false. + * @param[in] copy Whether alloc new image and copy data or not, if ensure_bgr and img is not bgr or bgra format, always copy, + * if not copy, array object will directly use img's data buffer, will faster but change array will affect img's data, default true. + * @maixcdk maix.image.image2cv + */ + err::Err image2cv(image::Image &img, cv::Mat &mat, bool ensure_bgr = false, bool copy = true); + + + /** + * OpenCV Mat object to Image object + * @param mat cv::Mat image object. + * @param bgr if set bgr, the return image will be marked as BGR888 or BGRA8888 format, grayscale will ignore this arg. + * @param copy if true, will alloc new buffer and copy data, else will directly use array's data buffer, default true. + * Use this arg carefully, when set to false, ther array MUST keep alive until we don't use the return img of this func, or will cause program crash. + * @return Image object + * @maixcdk maix.image.cv2image + */ + image::Image *cv2image(cv::Mat &mat, bool bgr = true, bool copy = true); + +} diff --git a/components/vision/src/maix_image.cpp b/components/vision/src/maix_image.cpp index bef0fc23..1b28e271 100644 --- a/components/vision/src/maix_image.cpp +++ b/components/vision/src/maix_image.cpp @@ -25,10 +25,12 @@ namespace maix::image static bool path_is_format(const std::string &str, const std::string ext) { std::string lower_path(str); - std::transform(lower_path.begin(), lower_path.end(), lower_path.begin(), - [](unsigned char c){ return std::tolower(c); }); + std::transform(lower_path.begin(), lower_path.end(), lower_path.begin(), + [](unsigned char c) + { return std::tolower(c); }); - if (lower_path.size() >= ext.size() && lower_path.compare(lower_path.size() - ext.size(), ext.size(), ext) == 0) { + if (lower_path.size() >= ext.size() && lower_path.compare(lower_path.size() - ext.size(), ext.size(), ext) == 0) + { return true; } return false; @@ -36,19 +38,28 @@ namespace maix::image static uint8_t _get_char_size(const uint8_t c) { - if ((c & 0x80) == 0x00) { + if ((c & 0x80) == 0x00) + { // 0xxxxxxx: 1 byte character return 1; - } else if ((c & 0xE0) == 0xC0) { + } + else if ((c & 0xE0) == 0xC0) + { // 110xxxxx: 2 byte character return 2; - } else if ((c & 0xF0) == 0xE0) { + } + else if ((c & 0xF0) == 0xE0) + { // 1110xxxx: 3 byte character return 3; - } else if ((c & 0xF8) == 0xF0) { + } + else if ((c & 0xF8) == 0xF0) + { // 11110xxx: 4 byte character return 4; - } else { + } + else + { // Invalid UTF-8 start byte, default to 1 return 1; } @@ -57,14 +68,14 @@ namespace maix::image static image::Image *_mat_to_image(const cv::Mat &mat, image::Format format, void *buff, int buff_size, bool copy_data = true) { image::Image *img = nullptr; - if(buff) + if (buff) { - if(buff_size < image::fmt_size[format]) + if (buff_size < image::fmt_size[format]) { log::error("convert format failed, buffer size not enough, need %d, but %d\n", image::fmt_size[format], buff_size); throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); } - img = new image::Image(mat.cols, mat.rows, format, (uint8_t*)buff, mat.cols * mat.rows * image::fmt_size[format], false); + img = new image::Image(mat.cols, mat.rows, format, (uint8_t *)buff, mat.cols * mat.rows * image::fmt_size[format], false); } else img = new image::Image(mat.cols, mat.rows, format); @@ -76,14 +87,14 @@ namespace maix::image static image::Image *_new_image(int w, int h, image::Format format, void *buff, int buff_size) { image::Image *img = nullptr; - if(buff) + if (buff) { - if(buff_size < image::fmt_size[format]) + if (buff_size < image::fmt_size[format]) { log::error("convert format failed, buffer size not enough, need %d, but %d\n", image::fmt_size[format], buff_size); throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); } - img = new image::Image(w, h, format, (uint8_t*)buff, w * h * image::fmt_size[format], false); + img = new image::Image(w, h, format, (uint8_t *)buff, w * h * image::fmt_size[format], false); } else img = new image::Image(w, h, format); @@ -100,9 +111,10 @@ namespace maix::image uint8_t *uv_temp = (uint8_t *)malloc(nv_len); err::check_null_raise(uv_temp, "malloc uv_temp failed"); memcpy(uv_temp, nv21_data + offset, nv_len); - for (int i = 0; i < half_len; i ++) { - nv21_data[offset + i * 2] = uv_temp[i]; // V - nv21_data[offset + i * 2 + 1] = uv_temp[half_len + i]; // U + for (int i = 0; i < half_len; i++) + { + nv21_data[offset + i * 2] = uv_temp[i]; // V + nv21_data[offset + i * 2 + 1] = uv_temp[half_len + i]; // U } if (uv_temp) free(uv_temp); @@ -347,14 +359,17 @@ namespace maix::image if (width <= 0 || height <= 0) throw err::Exception(err::ERR_ARGS, "image width and height should > 0"); - if (_format > Format::FMT_COMPRESSED_MIN) { + if (_format > Format::FMT_COMPRESSED_MIN) + { if (!data || data_size < 0) - throw err::Exception(err::ERR_ARGS,"image data and data_size are incorrect"); + throw err::Exception(err::ERR_ARGS, "image data and data_size are incorrect"); _data_size = data_size; - } else { + } + else + { // not use data_size, uncompressed image only use fiexed size. int size_calc = width * height * image::fmt_size[format]; - if(data_size > 0 && data_size != size_calc) + if (data_size > 0 && data_size != size_calc) { log::error("data_size not match image content size, data_size: %d, image content size: %d\n", data_size, size_calc); throw err::Exception(err::ERR_ARGS, "data_size not match image content size"); @@ -373,7 +388,7 @@ namespace maix::image } else { - if(!copy) + if (!copy) { _data = data; _actual_data = _data; @@ -402,8 +417,8 @@ namespace maix::image { // if(!data) // { - _create_image(width, height, format, nullptr, 0, false); - // return; + _create_image(width, height, format, nullptr, 0, false); + // return; // } // _create_image(width, height, format, data->data, data->size(), copy); } @@ -434,9 +449,9 @@ namespace maix::image void Image::operator=(const image::Image &img) { - if(_data) + if (_data) { - if(_is_malloc) + if (_is_malloc) { log::info("free _actual_data"); free(_actual_data); @@ -468,7 +483,7 @@ namespace maix::image Bytes *Image::to_bytes(bool copy) { - if(copy) + if (copy) return new Bytes((uint8_t *)_data, _data_size, true, true); return new Bytes((uint8_t *)_data, _data_size, false, false); } @@ -507,91 +522,100 @@ namespace maix::image log::error("convert format failed, already the format %d\n", format); throw err::Exception(err::ERR_ARGS, "convert format failed, already the format"); } - cv::Mat src(_format > FMT_COMPRESSED_MIN ? 1 : _height, _format > FMT_COMPRESSED_MIN ? _data_size : _width, CV_8UC((int)image::fmt_size[_format]), _data); + cv::Mat src(_format > FMT_COMPRESSED_MIN ? 1 : _height, _format > FMT_COMPRESSED_MIN ? _data_size : _width, CV_8UC((int)image::fmt_size[_format]), _data); cv::ColorConversionCodes cvt_code; // special for convert to jpeg and png - if(format == image::FMT_JPEG) // compress + if (format == image::FMT_JPEG) // compress { - switch (_format) { + switch (_format) + { #ifdef PLATFORM_MAIXCAM case image::FMT_GRAYSCALE: - { + { image::Image *img = nullptr; - if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)_data, _width, _height, mmf_invert_format_to_mmf(image::FMT_GRAYSCALE), 95)) { + if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)_data, _width, _height, mmf_invert_format_to_mmf(image::FMT_GRAYSCALE), 95)) + { uint8_t *data; int data_size; - if (!mmf_enc_jpg_pop(0, &data, &data_size)) { - if(buff) + if (!mmf_enc_jpg_pop(0, &data, &data_size)) + { + if (buff) { - if(buff_size < (size_t)data_size) + if (buff_size < (size_t)data_size) throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); memcpy(buff, data, data_size); - img = new image::Image(_width, _height, format, (uint8_t*)buff, data_size, false); + img = new image::Image(_width, _height, format, (uint8_t *)buff, data_size, false); } else img = new image::Image(_width, _height, format, data, data_size, true); mmf_enc_jpg_free(0); } } - if(!img) + if (!img) throw err::Exception(err::ERR_RUNTIME, "convert format failed, see log"); return img; break; - } + } case image::FMT_YVU420SP: - { + { image::Image *img = nullptr; - if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)_data, _width, _height, mmf_invert_format_to_mmf(image::FMT_YVU420SP), 95)) { + if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)_data, _width, _height, mmf_invert_format_to_mmf(image::FMT_YVU420SP), 95)) + { uint8_t *data; int data_size; - if (!mmf_enc_jpg_pop(0, &data, &data_size)) { - if(buff) + if (!mmf_enc_jpg_pop(0, &data, &data_size)) + { + if (buff) { - if(buff_size < (size_t)data_size) + if (buff_size < (size_t)data_size) throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); memcpy(buff, data, data_size); - img = new image::Image(_width, _height, format, (uint8_t*)buff, data_size, false); + img = new image::Image(_width, _height, format, (uint8_t *)buff, data_size, false); } else img = new image::Image(_width, _height, format, data, data_size, true); mmf_enc_jpg_free(0); } } - if(!img) + if (!img) throw err::Exception(err::ERR_RUNTIME, "convert format failed, see log"); return img; break; - } + } #endif default: - { + { #ifdef PLATFORM_MAIXCAM image::Image *p_img = nullptr; image::Image *img = nullptr; bool src_alloc = false; - if(_format != Format::FMT_RGB888) + if (_format != Format::FMT_RGB888) { p_img = to_format(image::FMT_RGB888); src_alloc = true; - } else { + } + else + { p_img = this; } - if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)p_img->data(), _width, _height, mmf_invert_format_to_mmf(image::FMT_RGB888), 80)) { + if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)p_img->data(), _width, _height, mmf_invert_format_to_mmf(image::FMT_RGB888), 80)) + { uint8_t *data; int data_size; - if (!mmf_enc_jpg_pop(0, &data, &data_size)) { - if(buff) + if (!mmf_enc_jpg_pop(0, &data, &data_size)) + { + if (buff) { - if(buff_size < (size_t)data_size) + if (buff_size < (size_t)data_size) { if (src_alloc) delete p_img; throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); } memcpy(buff, data, data_size); - img = new image::Image(_width, _height, format, (uint8_t*)buff, data_size, false); + img = new image::Image(_width, _height, format, (uint8_t *)buff, data_size, false); } else img = new image::Image(_width, _height, format, data, data_size, true); @@ -601,7 +625,7 @@ namespace maix::image if (src_alloc) delete p_img; - if(!img) + if (!img) throw err::Exception(err::ERR_RUNTIME, "convert format failed, see log"); return img; #else @@ -609,7 +633,7 @@ namespace maix::image image::Image *p_img = nullptr; cv::Mat *p_src = &src; bool src_alloc = false; - if(_format != Format::FMT_BGR888 && _format != Format::FMT_BGRA8888) + if (_format != Format::FMT_BGR888 && _format != Format::FMT_BGRA8888) { p_img = to_format(image::FMT_BGR888); p_src = new cv::Mat(p_img->_height, p_img->_width, CV_8UC((int)image::fmt_size[image::FMT_BGR888]), p_img->_data); @@ -622,11 +646,11 @@ namespace maix::image params.push_back(95); cv::imencode(".jpg", input, jpeg_buff, params); image::Image *img; - if(buff) + if (buff) { - if(buff_size < jpeg_buff.size()) + if (buff_size < jpeg_buff.size()) { - if(src_alloc) + if (src_alloc) { delete p_img; delete p_src; @@ -634,11 +658,11 @@ namespace maix::image throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); } memcpy(buff, jpeg_buff.data(), jpeg_buff.size()); - img = new image::Image(src.cols, src.rows, format, (uint8_t*)buff, jpeg_buff.size(), false); + img = new image::Image(src.cols, src.rows, format, (uint8_t *)buff, jpeg_buff.size(), false); } else - img = new image::Image(src.cols, src.rows, format, (uint8_t*)jpeg_buff.data(), jpeg_buff.size(), true); - if(src_alloc) + img = new image::Image(src.cols, src.rows, format, (uint8_t *)jpeg_buff.data(), jpeg_buff.size(), true); + if (src_alloc) { delete p_img; delete p_src; @@ -646,16 +670,15 @@ namespace maix::image return img; #endif break; - } } - + } } - else if(format == image::FMT_PNG) + else if (format == image::FMT_PNG) { image::Image *p_img = nullptr; cv::Mat *p_src = &src; bool src_alloc = false; - if(_format != Format::FMT_BGR888 && _format != Format::FMT_BGRA8888) + if (_format != Format::FMT_BGR888 && _format != Format::FMT_BGRA8888) { p_img = to_format(image::FMT_BGRA8888); p_src = new cv::Mat(p_img->_height, p_img->_width, CV_8UC((int)image::fmt_size[image::FMT_BGRA8888]), p_img->_data); @@ -668,11 +691,11 @@ namespace maix::image params.push_back(3); cv::imencode(".png", input, png_buff, params); image::Image *img; - if(buff) + if (buff) { - if(buff_size < png_buff.size()) + if (buff_size < png_buff.size()) { - if(src_alloc) + if (src_alloc) { delete p_img; delete p_src; @@ -680,11 +703,11 @@ namespace maix::image throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); } memcpy(buff, png_buff.data(), png_buff.size()); - img = new image::Image(src.cols, src.rows, format, (uint8_t*)buff, png_buff.size(), false); + img = new image::Image(src.cols, src.rows, format, (uint8_t *)buff, png_buff.size(), false); } else img = new image::Image(src.cols, src.rows, format, png_buff.data(), png_buff.size(), true); - if(src_alloc) + if (src_alloc) { delete p_img; delete p_src; @@ -693,40 +716,45 @@ namespace maix::image } // jpeg/png to other format - if(_format == image::FMT_JPEG || _format == image::FMT_PNG) + if (_format == image::FMT_JPEG || _format == image::FMT_PNG) { switch (format) { case image::FMT_GRAYSCALE: { cv::Mat dst = cv::imdecode(src, cv::IMREAD_GRAYSCALE); - if(dst.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (dst.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); return _mat_to_image(dst, format, buff, buff_size); } case image::FMT_BGR888: { cv::Mat dst = cv::imdecode(src, cv::IMREAD_COLOR); - if(dst.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (dst.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); return _mat_to_image(dst, format, buff, buff_size); } case image::FMT_RGB888: { cv::Mat dst = cv::imdecode(src, cv::IMREAD_COLOR); - if(dst.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (dst.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); cv::cvtColor(dst, dst, cv::COLOR_BGR2RGB); return _mat_to_image(dst, format, buff, buff_size); } case image::FMT_RGBA8888: { - if(_format == FMT_PNG) + if (_format == FMT_PNG) { cv::Mat dst = cv::imdecode(src, cv::IMREAD_UNCHANGED); - if(dst.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (dst.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); cv::cvtColor(dst, dst, cv::COLOR_BGRA2RGBA); return _mat_to_image(dst, format, buff, buff_size); } cv::Mat bgr = cv::imdecode(src, cv::IMREAD_COLOR); - if(bgr.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (bgr.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); image::Image *img = _new_image(bgr.cols, bgr.rows, format, buff, buff_size); cv::Mat dst(bgr.rows, bgr.cols, CV_8UC4, img->data()); cv::cvtColor(bgr, dst, cv::COLOR_BGR2RGBA); @@ -734,14 +762,16 @@ namespace maix::image } case image::FMT_BGRA8888: { - if(_format == FMT_PNG) + if (_format == FMT_PNG) { cv::Mat dst = cv::imdecode(src, cv::IMREAD_UNCHANGED); - if(dst.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (dst.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); return _mat_to_image(dst, format, buff, buff_size); } cv::Mat bgr = cv::imdecode(src, cv::IMREAD_COLOR); - if(bgr.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (bgr.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); image::Image *img = _new_image(bgr.cols, bgr.rows, format, buff, buff_size); cv::Mat dst(bgr.rows, bgr.cols, CV_8UC4, img->data()); cv::cvtColor(bgr, dst, cv::COLOR_BGR2BGRA); @@ -750,7 +780,8 @@ namespace maix::image case image::FMT_YVU420SP: { cv::Mat dst = cv::imdecode(src, cv::IMREAD_COLOR); - if(dst.empty()) throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); + if (dst.empty()) + throw err::Exception(err::ERR_ARGS, "decode jpeg failed"); image::Image *img = _mat_to_image(dst, format, buff, buff_size, false); cv::Mat dst_nv21(img->height() + img->height() / 2, img->width(), CV_8UC1, img->data()); _cv_rgb_nv21(dst, dst_nv21, img->width(), img->height(), true); @@ -894,25 +925,28 @@ namespace maix::image throw err::Exception(err::ERR_NOT_IMPL, "not support format"); } image::Image *img; - if(buff) + if (buff) { - if(buff_size < image::fmt_size[format]) + if (buff_size < image::fmt_size[format]) { log::error("convert format failed, buffer size not enough, need %d, but %d\n", image::fmt_size[format], buff_size); throw err::Exception(err::ERR_ARGS, "convert format failed, buffer size not enough"); } - img = new image::Image(src.cols, src.rows, format, (uint8_t*)buff, src.cols * src.rows * image::fmt_size[format], false); + img = new image::Image(src.cols, src.rows, format, (uint8_t *)buff, src.cols * src.rows * image::fmt_size[format], false); } else img = new image::Image(src.cols, src.rows, format); - if (_format == image::FMT_GRAYSCALE && format == image::FMT_YVU420SP) { + if (_format == image::FMT_GRAYSCALE && format == image::FMT_YVU420SP) + { cv::Mat dst(src.rows * 3 / 2, src.cols, CV_8UC((int)image::fmt_size[format]), img->data()); int nv_len = src.cols * src.rows / 2; int offset = src.cols * src.rows; memcpy(dst.data, src.data, src.cols * src.rows); memset(dst.data + offset, 128, nv_len); - } else if (format == image::FMT_YVU420SP) { + } + else if (format == image::FMT_YVU420SP) + { cv::Mat dst(src.rows * 3 / 2, src.cols, CV_8UC((int)image::fmt_size[format]), img->data()); cv::cvtColor(src, dst, cvt_code); int nv_len = src.cols * src.rows / 2; @@ -922,23 +956,30 @@ namespace maix::image uint8_t *uv_temp = (uint8_t *)malloc(nv_len); err::check_null_raise(uv_temp, "malloc uv_temp failed"); memcpy(uv_temp, nv21 + offset, nv_len); - for (int i = 0; i < half_len; i ++) { - nv21[offset + i * 2] = uv_temp[i]; // V - nv21[offset + i * 2 + 1] = uv_temp[half_len + i]; // U + for (int i = 0; i < half_len; i++) + { + nv21[offset + i * 2] = uv_temp[i]; // V + nv21[offset + i * 2 + 1] = uv_temp[half_len + i]; // U } if (uv_temp) free(uv_temp); - } else if (_format == image::FMT_RGB888 && format == image::FMT_GRAYSCALE) { + } + else if (_format == image::FMT_RGB888 && format == image::FMT_GRAYSCALE) + { int height = _width; int width = _height; uint8_t *src = (uint8_t *)_data; uint8_t *dst = (uint8_t *)img->data(); - for (int i = 0; i < height; i ++) { - for (int j = 0; j < width; j ++) { + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { dst[i * width + j] = (src[(i * width + j) * 3 + 0] * 38 + src[(i * width + j) * 3 + 1] * 75 + src[(i * width + j) * 3 + 2] * 15) >> 7; } } - } else { + } + else + { cv::Mat dst(src.rows, src.cols, CV_8UC((int)image::fmt_size[format]), img->data()); cv::cvtColor(src, dst, cvt_code); } @@ -946,7 +987,6 @@ namespace maix::image return img; } - image::Image *Image::to_format(const image::Format &format) { return to_format(format, nullptr, 0); @@ -955,20 +995,23 @@ namespace maix::image image::Image *Image::to_jpeg(int quality) { image::Format format = image::Format::FMT_JPEG; - if(quality <= 50) + if (quality <= 50) { quality = 51; } cv::Mat src(_height, _width, CV_8UC((int)image::fmt_size[_format]), _data); - switch (_format) { + switch (_format) + { case image::FMT_YVU420SP: - { + { #ifdef PLATFORM_MAIXCAM image::Image *img = nullptr; - if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)_data, _width, _height, mmf_invert_format_to_mmf(image::FMT_YVU420SP), quality)) { + if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)_data, _width, _height, mmf_invert_format_to_mmf(image::FMT_YVU420SP), quality)) + { uint8_t *data; int data_size; - if (!mmf_enc_jpg_pop(0, &data, &data_size)) { + if (!mmf_enc_jpg_pop(0, &data, &data_size)) + { img = new image::Image(_width, _height, format, data, data_size, true); mmf_enc_jpg_free(0); } @@ -976,25 +1019,29 @@ namespace maix::image return img; #endif break; - } + } default: - { + { #ifdef PLATFORM_MAIXCAM image::Image *p_img = nullptr; image::Image *img = nullptr; bool src_alloc = false; - if(_format != Format::FMT_RGB888) + if (_format != Format::FMT_RGB888) { p_img = to_format(image::FMT_RGB888); src_alloc = true; - } else { + } + else + { p_img = this; } - if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)p_img->data(), _width, _height, mmf_invert_format_to_mmf(image::FMT_RGB888), quality)) { + if (!mmf_enc_jpg_push_with_quality(0, (uint8_t *)p_img->data(), _width, _height, mmf_invert_format_to_mmf(image::FMT_RGB888), quality)) + { uint8_t *data; int data_size; - if (!mmf_enc_jpg_pop(0, &data, &data_size)) { + if (!mmf_enc_jpg_pop(0, &data, &data_size)) + { img = new image::Image(_width, _height, format, data, data_size, true); mmf_enc_jpg_free(0); } @@ -1009,7 +1056,7 @@ namespace maix::image image::Image *p_img = nullptr; cv::Mat *p_src = &src; bool src_alloc = false; - if(_format != Format::FMT_BGR888 && _format != Format::FMT_BGRA8888) + if (_format != Format::FMT_BGR888 && _format != Format::FMT_BGRA8888) { p_img = to_format(image::FMT_BGR888); p_src = new cv::Mat(p_img->_height, p_img->_width, CV_8UC((int)image::fmt_size[image::FMT_BGR888]), p_img->_data); @@ -1022,8 +1069,8 @@ namespace maix::image params.push_back(95); cv::imencode(".jpg", input, jpeg_buff, params); image::Image *img; - img = new image::Image(src.cols, src.rows, format, (uint8_t*)jpeg_buff.data(), jpeg_buff.size(), true); - if(src_alloc) + img = new image::Image(src.cols, src.rows, format, (uint8_t *)jpeg_buff.data(), jpeg_buff.size(), true); + if (src_alloc) { delete p_img; delete p_src; @@ -1031,13 +1078,14 @@ namespace maix::image return img; #endif break; - } + } } return nullptr; } - static cv::Rect _adjustRectToFit(const cv::Rect& rect, const cv::Size& dstSize) { + static cv::Rect _adjustRectToFit(const cv::Rect &rect, const cv::Size &dstSize) + { int newX = std::max(rect.x, 0); int newY = std::max(rect.y, 0); int newWidth = std::min(rect.width - (newX - rect.x), dstSize.width - newX); @@ -1061,7 +1109,8 @@ namespace maix::image int srcX = std::max(0, -x); int srcY = std::max(0, -y); cv::Rect srcRect(srcX, srcY, adjustedRect.width, adjustedRect.height); - if (adjustedRect.width <= 0 || adjustedRect.height <= 0) { + if (adjustedRect.width <= 0 || adjustedRect.height <= 0) + { throw err::Exception(err::ERR_ARGS, "range error"); } if (_format == fmt && image::fmt_size[fmt] < 4) @@ -1091,7 +1140,7 @@ namespace maix::image } else // merge two BGRA images { - uint8_t *data = (uint8_t*)_data; + uint8_t *data = (uint8_t *)_data; for (int y = 0; y < adjustedRect.height; y++) { for (int x = 0; x < adjustedRect.width; x++) @@ -1135,7 +1184,7 @@ namespace maix::image _get_cv_format_color(_format, color, &ch_format, cv_color); cv::Mat img(_height, _width, ch_format, _data); cv::Rect rect(x, y, w, h); - if( color.alpha != 1 && (_format == Format::FMT_RGBA8888 || _format == Format::FMT_BGRA8888)) + if (color.alpha != 1 && (_format == Format::FMT_RGBA8888 || _format == Format::FMT_BGRA8888)) { cv::Mat roi = img(rect); cv::Mat color_mat(roi.size(), roi.type(), cv_color); @@ -1177,7 +1226,7 @@ namespace maix::image } image::Image *image::Image::draw_string(int x, int y, const std::string &text, const image::Color &color, float scale, int thickness, - bool wrap, int wrap_space, const std::string &font) + bool wrap, int wrap_space, const std::string &font) { int ch_format = 0; cv::Scalar cv_color; @@ -1212,7 +1261,7 @@ namespace maix::image int text_height = size.height; int text_max_width = _width - x; bool wrap_now = false; - if(strstr(text.c_str(), "\n") != NULL || strstr(text.c_str(), "\r") != NULL) + if (strstr(text.c_str(), "\n") != NULL || strstr(text.c_str(), "\r") != NULL) wrap_now = true; // auto wrap @@ -1229,14 +1278,14 @@ namespace maix::image { char c = text[idx]; wrap_now = false; - if(c == '\r') + if (c == '\r') { last_is_r = true; wrap_now = true; } - else if(c == '\n') + else if (c == '\n') { - if(last_is_r) + if (last_is_r) { last_is_r = false; ++idx; @@ -1249,7 +1298,7 @@ namespace maix::image { last_is_r = false; } - if(wrap_now) + if (wrap_now) { _put_text(img, text_tmp, point, cv_color, scale, thickness, *final_font, final_font_id); point.x = x; @@ -1331,7 +1380,8 @@ namespace maix::image return nullptr; } - if (fill) { + if (fill) + { thickness = -1; } @@ -1348,32 +1398,36 @@ namespace maix::image _get_cv_format_color(_format, color, &ch_format, cv_color); cv::Mat img(_height, _width, ch_format, _data); - if (keypoints.size() < 2 || keypoints.size() % 2 != 0) { + if (keypoints.size() < 2 || keypoints.size() % 2 != 0) + { throw std::runtime_error("keypoints size must >= 2 and multiple of 2"); return nullptr; } - for(size_t i=0; i 0) { - for (size_t i = 1; i < keypoints.size() / 2; ++i) { + if (line_thickness > 0) + { + for (size_t i = 1; i < keypoints.size() / 2; ++i) + { cv::Point pt1(keypoints[(i - 1) * 2], keypoints[(i - 1) * 2 + 1]); cv::Point pt2(keypoints[i * 2], keypoints[i * 2 + 1]); if (pt1.x < 0 || pt1.y < 0 || pt2.x < 0 || pt2.y < 0) - continue; // Skip invalid lines with negative coordinates + continue; // Skip invalid lines with negative coordinates cv::line(img, pt1, pt2, cv_color, line_thickness); } // Draw a line from the last point to the first point to close the loop cv::Point pt_first(keypoints[0], keypoints[1]); cv::Point pt_last(keypoints[keypoints.size() - 2], keypoints[keypoints.size() - 1]); - if (pt_first.x >= 0 && pt_first.y >= 0 && pt_last.x >= 0 && pt_last.y >= 0) { + if (pt_first.x >= 0 && pt_first.y >= 0 && pt_last.x >= 0 && pt_last.y >= 0) + { cv::line(img, pt_last, pt_first, cv_color, line_thickness); } } @@ -1436,13 +1490,16 @@ namespace maix::image cv::InterpolationFlags inter_method = (cv::InterpolationFlags)method; if (object_fit == image::Fit::FIT_FILL) { - if (_format == image::FMT_YVU420SP) { + if (_format == image::FMT_YVU420SP) + { cv::Mat rgb, resize_rgb; cv::cvtColor(img, rgb, cv::COLOR_YUV2RGB_NV21); cv::resize(rgb, resize_rgb, cv::Size(width, height), 0, 0, inter_method); dst = cv::Mat(cv_dst_h, width, pixel_num, ret->data()); _cv_rgb_nv21(resize_rgb, dst, width, height); - } else { + } + else + { dst = cv::Mat(height, width, pixel_num, ret->data()); cv::resize(img, dst, cv::Size(width, height), 0, 0, inter_method); } @@ -1541,7 +1598,7 @@ namespace maix::image return ret; } - image::Image* Image::perspective(std::vector src_points, std::vector dst_points, int width, int height, image::ResizeMethod method) + image::Image *Image::perspective(std::vector src_points, std::vector dst_points, int width, int height, image::ResizeMethod method) { if (width < 0 && height < 0) { @@ -1565,7 +1622,7 @@ namespace maix::image } // Create output image - image::Image* ret = new image::Image(width, height, _format); + image::Image *ret = new image::Image(width, height, _format); // Convert source and destination points to cv::Point2f std::vector srcPts, dstPts; @@ -1643,26 +1700,27 @@ namespace maix::image return ret; } - - Image* Image::flip(const FlipDir dir) { + Image *Image::flip(const FlipDir dir) + { int pixel_num = _get_cv_pixel_num(_format); - Image* ret = new Image(_width, _height, _format); + Image *ret = new Image(_width, _height, _format); cv::Mat img(_height, _width, pixel_num, _data); cv::Mat dst(_height, _width, pixel_num, ret->data()); int flipCode; - switch (dir) { - case FlipDir::X: - flipCode = 0; // 垂直翻转 - break; - case FlipDir::Y: - flipCode = 1; // 水平翻转 - break; - case FlipDir::XY: - flipCode = -1; // 同时进行垂直和水平翻转 - break; - default: - throw err::Exception(err::ERR_ARGS); + switch (dir) + { + case FlipDir::X: + flipCode = 0; // 垂直翻转 + break; + case FlipDir::Y: + flipCode = 1; // 水平翻转 + break; + case FlipDir::XY: + flipCode = -1; // 同时进行垂直和水平翻转 + break; + default: + throw err::Exception(err::ERR_ARGS); } cv::flip(img, dst, flipCode); return ret; @@ -1713,32 +1771,33 @@ namespace maix::image case FMT_BGR888: case FMT_BGRA8888: ok = cv::imwrite(path, img, params); - if(!ok) + if (!ok) return err::ERR_RUNTIME; break; case FMT_RGB888: cv::cvtColor(img, img, cv::COLOR_RGB2BGR); ok = cv::imwrite(path, img, params); cv::cvtColor(img, img, cv::COLOR_RGB2BGR); - if(!ok) + if (!ok) return err::ERR_RUNTIME; break; case FMT_RGBA8888: cv::cvtColor(img, img, cv::COLOR_RGBA2BGRA); ok = cv::imwrite(path, img, params); cv::cvtColor(img, img, cv::COLOR_RGBA2BGRA); - if(!ok) + if (!ok) return err::ERR_RUNTIME; break; case FMT_JPEG: { std::string lower_path(path); std::transform(lower_path.begin(), lower_path.end(), lower_path.begin(), - [](unsigned char c){ return std::tolower(c); }); - if(path_is_format(path, ".jpeg") || path_is_format(path, ".jpg")) + [](unsigned char c) + { return std::tolower(c); }); + if (path_is_format(path, ".jpeg") || path_is_format(path, ".jpg")) { fs::File *f = fs::open(path, "wb"); - if(!f) + if (!f) return err::ERR_IO; f->write(_data, _data_size); f->close(); @@ -1747,22 +1806,22 @@ namespace maix::image else { Image *tmp = to_format(FMT_BGR888); - if(!tmp) + if (!tmp) return err::ERR_ARGS; cv::Mat img2(_height, _width, CV_8UC3, tmp->data()); ok = cv::imwrite(path, img2, params); delete tmp; - if(!ok) + if (!ok) return err::ERR_RUNTIME; } break; } case FMT_PNG: { - if(path_is_format(path, ".png")) + if (path_is_format(path, ".png")) { fs::File *f = fs::open(path, "wb"); - if(!f) + if (!f) return err::ERR_IO; f->write(_data, _data_size); f->close(); @@ -1771,12 +1830,12 @@ namespace maix::image else { Image *tmp = to_format(FMT_BGR888); - if(!tmp) + if (!tmp) return err::ERR_ARGS; cv::Mat img2(_height, _width, CV_8UC3, tmp->data()); ok = cv::imwrite(path, img2, params); delete tmp; - if(!ok) + if (!ok) return err::ERR_RUNTIME; } break; @@ -1810,108 +1869,244 @@ namespace maix::image return Size(size.width, size.height); } - std::vector resize_map_pos(int w_in, int h_in, int w_out, int h_out, image::Fit fit, int x, int y, int w, int h) { + err::Err image2cv(image::Image &img, cv::Mat &mat, bool ensure_bgr, bool copy) + { + int width = img.width(); + int height = img.height(); + int channels = img.shape()[2]; + uint8_t *img_data = (uint8_t *)img.data(); + + if (width <= 0 || height <= 0 || channels <= 0 || img_data == nullptr) + { + log::error("image2cv arg error"); + return err::Err::ERR_ARGS; + } + + if (channels == 1) + { + if (copy) + { + mat = cv::Mat(height, width, CV_8UC1); + if(ensure_bgr) + { + cv::cvtColor(mat, mat, cv::COLOR_GRAY2BGR); + } + else + { + memcpy(mat.data, img_data, width * height); + } + } + else + { + mat = cv::Mat(height, width, CV_8UC1, (void *)img_data); + } + } + else if (channels == 3) + { + if (copy) + { + mat = cv::Mat(height, width, CV_8UC3); + memcpy(mat.data, img_data, width * height * 3); + if(ensure_bgr && img.format() == image::FMT_RGB888) + { + cv::cvtColor(mat, mat, cv::COLOR_RGB2BGR); + } + } + else + { + mat = cv::Mat(height, width, CV_8UC3, (void *)img_data); + } + } + else if (channels == 4) + { + if (copy) + { + mat = cv::Mat(height, width, CV_8UC4); + memcpy(mat.data, img_data, width * height * 4); + if(ensure_bgr && img.format() == image::FMT_RGBA8888) + { + cv::cvtColor(mat, mat, cv::COLOR_RGBA2BGRA); + } + } + else + { + mat = cv::Mat(height, width, CV_8UC4, (void *)img_data); + } + } + else + { + log::error("not support channel num %d", channels); + return err::Err::ERR_ARGS; + } + return err::ERR_NONE; + } + + image::Image *cv2image(cv::Mat &mat, bool bgr = true, bool copy = true) + { + int width = mat.cols; + int height = mat.rows; + int channels = mat.channels(); + image::Format format = image::FMT_RGB888; + if (channels == 1) + { + format = image::FMT_GRAYSCALE; + } + else if (channels == 3) + { + format = bgr ? image::FMT_BGR888 : image::FMT_RGB888; + } + else if (channels == 4) + { + format = bgr ? image::FMT_BGRA8888 : image::FMT_RGBA8888; + } + else + { + log::error("not support channel num %d", channels); + return nullptr; + } + return new image::Image(width, height, format, mat.data, width * height * channels, copy); + } + + std::vector resize_map_pos(int w_in, int h_in, int w_out, int h_out, image::Fit fit, int x, int y, int w, int h) + { float scale_x = static_cast(w_out) / w_in; float scale_y = static_cast(h_out) / h_in; std::vector result; - if (fit == image::Fit::FIT_FILL) { + if (fit == image::Fit::FIT_FILL) + { x = static_cast(x * scale_x); y = static_cast(y * scale_y); - if (w > 0) { + if (w > 0) + { w = static_cast(w * scale_x); } - if (h > 0) { + if (h > 0) + { h = static_cast(h * scale_y); } - } else if (fit == image::Fit::FIT_CONTAIN) { + } + else if (fit == image::Fit::FIT_CONTAIN) + { float scale = std::min(scale_x, scale_y); - if (w_out > h_out) { + if (w_out > h_out) + { x = static_cast((w_out - w_in * scale) / 2 + x * scale); y = static_cast(y * scale); - } else { + } + else + { x = static_cast(x * scale); y = static_cast((h_out - h_in * scale) / 2 + y * scale); } - if (w > 0) { + if (w > 0) + { w = static_cast(w * scale); h = static_cast(h * scale); } - } else if (fit == image::Fit::FIT_COVER) { + } + else if (fit == image::Fit::FIT_COVER) + { float scale = std::max(scale_x, scale_y); - if (w_out > h_out) { + if (w_out > h_out) + { x = static_cast(x * scale); y = static_cast((h_out - h_in * scale) / 2 + y * scale); - } else { + } + else + { x = static_cast((w_out - w_in * scale) / 2 + x * scale); y = static_cast(y * scale); } - if (w > 0) { + if (w > 0) + { w = static_cast(w * scale); h = static_cast(h * scale); } - } else { + } + else + { throw err::Exception(err::ERR_ARGS, "Unsupported fit mode"); } // Populate the result vector result.push_back(x); result.push_back(y); - if (w > 0 && h > 0) { + if (w > 0 && h > 0) + { result.push_back(w); result.push_back(h); } return result; } - std::vector resize_map_pos_reverse(int w_in, int h_in, int w_out, int h_out, image::Fit fit, int x, int y, int w, int h) { + std::vector resize_map_pos_reverse(int w_in, int h_in, int w_out, int h_out, image::Fit fit, int x, int y, int w, int h) + { float scale_x = static_cast(w_out) / w_in; float scale_y = static_cast(h_out) / h_in; std::vector result; - if (fit == image::Fit::FIT_FILL) { + if (fit == image::Fit::FIT_FILL) + { x = static_cast(x / scale_x); y = static_cast(y / scale_y); - if (w > 0) { + if (w > 0) + { w = static_cast(w / scale_x); } - if (h > 0) { + if (h > 0) + { h = static_cast(h / scale_y); } - } else if (fit == image::Fit::FIT_CONTAIN) { + } + else if (fit == image::Fit::FIT_CONTAIN) + { float scale = std::min(scale_x, scale_y); - if (w_out > h_out) { + if (w_out > h_out) + { x = static_cast((x - (w_out - w_in * scale) / 2) / scale); y = static_cast(y / scale); - } else { + } + else + { x = static_cast(x / scale); y = static_cast((y - (h_out - h_in * scale) / 2) / scale); } - if (w > 0) { + if (w > 0) + { w = static_cast(w / scale); h = static_cast(h / scale); } - } else if (fit == image::Fit::FIT_COVER) { + } + else if (fit == image::Fit::FIT_COVER) + { float scale = std::max(scale_x, scale_y); - if (w_out > h_out) { + if (w_out > h_out) + { x = static_cast(x / scale); y = static_cast((y - (h_out - h_in * scale) / 2) / scale); - } else { + } + else + { x = static_cast((x - (w_out - w_in * scale) / 2) / scale); y = static_cast(y * scale); } - if (w > 0) { + if (w > 0) + { w = static_cast(w / scale); h = static_cast(h / scale); } - } else { + } + else + { throw err::Exception(err::ERR_ARGS, "Unsupported fit mode"); } // Populate the result vector result.push_back(x); result.push_back(y); - if (w > 0 && h > 0) { + if (w > 0 && h > 0) + { result.push_back(w); result.push_back(h); } @@ -1960,7 +2155,7 @@ namespace maix::image int Image::_get_cv_pixel_num(image::Format &format) { int pixel_num = 0; - switch (_format) + switch (format) { case image::FMT_RGB888: case image::FMT_BGR888: @@ -1984,34 +2179,45 @@ namespace maix::image return pixel_num; } - std::vector Image::_get_available_roi(std::vector roi, std::vector other_roi) { + std::vector Image::_get_available_roi(std::vector roi, std::vector other_roi) + { int src_x, src_y, src_w, src_h; - if (other_roi.size() == 0) { + if (other_roi.size() == 0) + { src_x = 0; src_y = 0; src_w = _width; src_h = _height; - } else if (other_roi.size() == 4) { + } + else if (other_roi.size() == 4) + { src_x = other_roi[0]; src_y = other_roi[1]; src_w = other_roi[2]; src_h = other_roi[3]; - } else { + } + else + { throw err::Exception("other_roi size must be 4"); } - if (roi.size() == 0) { + if (roi.size() == 0) + { return std::vector{0, 0, _width, _height}; - } else if (roi.size() != 4) { + } + else if (roi.size() != 4) + { throw err::Exception("roi size must be 4"); } - if (roi[2] <= 0 || roi[3] <= 0) { + if (roi[2] <= 0 || roi[3] <= 0) + { throw err::Exception("roi width and height must > 0"); } - if ((roi[0] >= (src_x + src_w)) || (roi[1] >= (src_y + src_h)) || (roi[0] + roi[2] <= src_x) || (roi[1] + roi[3] <= src_y)) { + if ((roi[0] >= (src_x + src_w)) || (roi[1] >= (src_y + src_h)) || (roi[0] + roi[2] <= src_x) || (roi[1] + roi[3] <= src_y)) + { throw err::Exception("roi does not overlap on the image!"); } diff --git a/examples/nn_hand_keypoints/.gitignore b/examples/nn_hand_keypoints/.gitignore new file mode 100644 index 00000000..7171eaac --- /dev/null +++ b/examples/nn_hand_keypoints/.gitignore @@ -0,0 +1,9 @@ +build +dist +.config.mk +.flash.conf.json +data + +/CMakeLists.txt + +__pycache__ diff --git a/examples/nn_hand_keypoints/README.md b/examples/nn_hand_keypoints/README.md new file mode 100644 index 00000000..7ca28940 --- /dev/null +++ b/examples/nn_hand_keypoints/README.md @@ -0,0 +1,13 @@ +Detect hand 21 keypoints +==== + + +- Use `maixcdk build` to compile binary files. +- Move files and runtime libraries to device. +- Use SSH command with parameters to run programs. + +` "Usage: " + std::string(argv[0]) + " mud_model_path "; ` + +more documentations refer to [MaixPy](https://wiki.sipeed.com/maixpy/doc/zh/vision/hand_landmarks.html) + + diff --git a/examples/nn_hand_keypoints/main/CMakeLists.txt b/examples/nn_hand_keypoints/main/CMakeLists.txt new file mode 100644 index 00000000..452f67bd --- /dev/null +++ b/examples/nn_hand_keypoints/main/CMakeLists.txt @@ -0,0 +1,74 @@ +############### Add include ################### +list(APPEND ADD_INCLUDE "include" + ) +list(APPEND ADD_PRIVATE_INCLUDE "") +############################################### + +############ Add source files ################# +# list(APPEND ADD_SRCS "src/main.c" +# "src/test.c" +# ) +append_srcs_dir(ADD_SRCS "src") # append source file in src dir to var ADD_SRCS +# list(REMOVE_ITEM COMPONENT_SRCS "src/test2.c") +# FILE(GLOB_RECURSE EXTRA_SRC "src/*.c") +# FILE(GLOB EXTRA_SRC "src/*.c") +# list(APPEND ADD_SRCS ${EXTRA_SRC}) +# aux_source_directory(src ADD_SRCS) # collect all source file in src dir, will set var ADD_SRCS +# append_srcs_dir(ADD_SRCS "src") # append source file in src dir to var ADD_SRCS +# list(REMOVE_ITEM COMPONENT_SRCS "src/test.c") +# set(ADD_ASM_SRCS "src/asm.S") +# list(APPEND ADD_SRCS ${ADD_ASM_SRCS}) +# SET_PROPERTY(SOURCE ${ADD_ASM_SRCS} PROPERTY LANGUAGE C) # set .S ASM file as C language +# SET_SOURCE_FILES_PROPERTIES(${ADD_ASM_SRCS} PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp -D BBBBB") +############################################### + +###### Add required/dependent components ###### +list(APPEND ADD_REQUIREMENTS basic nn vision) +############################################### + +###### Add link search path for requirements/libs ###### +# list(APPEND ADD_LINK_SEARCH_PATH "${CONFIG_TOOLCHAIN_PATH}/lib") +# list(APPEND ADD_REQUIREMENTS pthread m) # add system libs, pthread and math lib for example here +# set (OpenCV_DIR opencv/lib/cmake/opencv4) +# find_package(OpenCV REQUIRED) +############################################### + +############ Add static libs ################## +# list(APPEND ADD_STATIC_LIB "lib/libtest.a") +############################################### + +#### Add compile option for this component #### +#### Just for this component, won't affect other +#### modules, including component that depend +#### on this component +# list(APPEND ADD_DEFINITIONS_PRIVATE -DAAAAA=1) + +#### Add compile option for this component +#### and components depend on this component +# list(APPEND ADD_DEFINITIONS -DAAAAA222=1 +# -DAAAAA333=1) +############################################### + +############ Add static libs ################## +#### Update parent's variables like CMAKE_C_LINK_FLAGS +# set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--start-group libmaix/libtest.a -ltest2 -Wl,--end-group" PARENT_SCOPE) +############################################### + +######### Add files need to download ######### +# list(APPEND ADD_FILE_DOWNLOADS "{ +# 'url': 'https://*****/abcde.tar.xz', +# 'urls': [], # backup urls, if url failed, will try urls +# 'sites': [], # download site, user can manually download file and put it into dl_path +# 'sha256sum': '', +# 'filename': 'abcde.tar.xz', +# 'path': 'toolchains/xxxxx', +# 'check_files': [] +# }" +# ) +# +# then extracted file in ${DL_EXTRACTED_PATH}/toolchains/xxxxx, +# you can directly use then, for example use it in add_custom_command +############################################## + +# register component, DYNAMIC or SHARED flags will make component compiled to dynamic(shared) lib +register_component() diff --git a/examples/nn_hand_keypoints/main/Kconfig b/examples/nn_hand_keypoints/main/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/examples/nn_hand_keypoints/main/include/main.h b/examples/nn_hand_keypoints/main/include/main.h new file mode 100644 index 00000000..45dcbb04 --- /dev/null +++ b/examples/nn_hand_keypoints/main/include/main.h @@ -0,0 +1,3 @@ +#pragma once + + diff --git a/examples/nn_hand_keypoints/main/src/main.cpp b/examples/nn_hand_keypoints/main/src/main.cpp new file mode 100644 index 00000000..19791877 --- /dev/null +++ b/examples/nn_hand_keypoints/main/src/main.cpp @@ -0,0 +1,123 @@ + +#include "maix_basic.hpp" +#include "maix_vision.hpp" +#include "maix_nn_hand_landmarks.hpp" +#include "main.h" + +using namespace maix; + +int _main(int argc, char *argv[]) +{ + log::info("Program start"); + std::string model_type = "unknown"; + int ret = 0; + err::Err e; + maix::image::Format img_fmt = maix::image::FMT_RGB888; + std::vector mean = {}; + std::vector scale = {}; + char tmp_chars[64] = {0}; + + std::string help = "Usage: " + std::string(argv[0]) + " mud_model_path "; + + if (argc < 2) + { + log::info(help.c_str()); + return -1; + } + + const char *model_path = argv[1]; + float conf_threshold = 0.7; + float iou_threshold = 0.45; + float conf_threshold2 = 0.8; + bool landmarks_rel = true; // draw relative landmarks on image + + nn::HandLandmarks detector(""); + e = detector.load(model_path); + err::check_raise(e, "load model failed"); + log::info("load yolo11 model %s success", model_path); + + if (argc >= 3) + { + const char *img_path = argv[2]; + log::info("load image now"); + maix::image::Image *img = maix::image::load(img_path, img_fmt); + err::check_null_raise(img, "load image " + std::string(img_path) + " failed"); + log::info("load image %s success: %s", img_path, img->to_str().c_str()); + log::info("detect now"); + nn::Objects *result = detector.detect(*img, conf_threshold, iou_threshold, conf_threshold2, landmarks_rel); + if (result->size() == 0) + { + log::info("no object detected !"); + } + for (auto &r : *result) + { + // points: box_topleft_x, box_topleft_y, box_topright_x, box_topright_y, box_bottomright_x, box_bottomright_y, box_bottomleft_x, box_bottomleft_y, + // x0, y0, z1, x1, y1, z2, ..., x20, y20, z20,[x0_rel, y0_rel,...,x20_rel, y20_rel] + log::info("result: %s", r->to_str().c_str()); + snprintf(tmp_chars, sizeof(tmp_chars), "%s: %.2f", r->points[0] == 0 ? "left" : "right", r->score); + img->draw_string(r->points[0], r->points[1], detector.labels[r->class_id], + r->class_id == 0 ? maix::image::Color::from_rgb(255, 0, 0) : maix::image::Color::from_rgb(0, 255, 0), + 1.2, 2); + detector.draw_hand(*img, r->class_id, r->points, 4, 10, true); + } + img->save("result.jpg"); + delete result; + delete img; + } + else + { + log::info("open camera now"); + camera::Camera cam = camera::Camera(320, 320, detector.input_format()); + log::info("open camera success"); + display::Display disp = display::Display(); + while (!app::need_exit()) + { + uint64_t t = time::ticks_ms(); + maix::image::Image *img = cam.read(); + err::check_null_raise(img, "read camera failed"); + uint64_t t2 = time::ticks_ms(); + nn::Objects *result = detector.detect(*img, conf_threshold, iou_threshold, conf_threshold2, landmarks_rel); + uint64_t t3 = time::ticks_ms(); + for (auto &r : *result) + { + // points: box_topleft_x, box_topleft_y, box_topright_x, box_topright_y, box_bottomright_x, box_bottomright_y, box_bottomleft_x, box_bottomleft_y, + // x0, y0, z1, x1, y1, z2, ..., x20, y20, z20,[x0_rel, y0_rel,...,x20_rel, y20_rel] + log::info("result: %s", r->to_str().c_str()); + snprintf(tmp_chars, sizeof(tmp_chars), "%s: %.2f", r->points[0] == 0 ? "left" : "right", r->score); + img->draw_string(r->points[0], r->points[1], detector.labels[r->class_id], + r->class_id == 0 ? maix::image::Color::from_rgb(255, 0, 0) : maix::image::Color::from_rgb(0, 255, 0), + 1.4, 2); + // img->draw_rect(r->x, r->y, r->w, r->h, image::COLOR_RED, 1); + detector.draw_hand(*img, r->class_id, r->points, 4, 10, true); + if(landmarks_rel) + { + img->draw_rect(0, 0, detector.input_width(false), detector.input_height(false), image::COLOR_YELLOW, 1); + for(int i=0; i<21; i++) + { + img->draw_circle(r->points[8+21*3 + i*2], r->points[9+21*3 + i*2], 2, image::COLOR_YELLOW, -1); + } + } + } + disp.show(*img); + delete result; + delete img; + log::info("time: all %d ms, detect %d ms", time::ticks_ms() - t, t3 - t2); + } + } + + log::info("Program exit"); + + return ret; +} + +int main(int argc, char *argv[]) +{ + // Catch SIGINT signal(e.g. Ctrl + C), and set exit flag to true. + signal(SIGINT, [](int sig) + { app::set_exit_flag(true); }); + + // Use CATCH_EXCEPTION_RUN_RETURN to catch exception, + // if we don't catch exception, when program throw exception, the objects will not be destructed. + // So we catch exception here to let resources be released(call objects' destructor) before exit. + CATCH_EXCEPTION_RUN_RETURN(_main, -1, argc, argv); +}