diff --git a/ext_modules/_maix_image/_maix_vision.cpp b/ext_modules/_maix_image/_maix_vision.cpp index 2843175..338397d 100644 --- a/ext_modules/_maix_image/_maix_vision.cpp +++ b/ext_modules/_maix_image/_maix_vision.cpp @@ -1051,6 +1051,67 @@ py::list maix_vision::_imlib_find_qrcodes(std::vector &roi) return return_val; } +py::list maix_vision::_imlib_find_barcodes(std::vector &roi) +{ + py::list return_val; + if(NULL == this->_img) + { + py::print("no img"); + return return_val; + } + + image_t img = {}; + img.w = this->_img->width; + img.h = this->_img->height; + img.pixels = (uint8_t*)this->_img->data; + img.pixfmt = PIXFORMAT_RGB888; + + rectangle_t _roi; + + _roi.x = roi[0]; + _roi.y = roi[1]; + _roi.w = roi[2]; + _roi.h = roi[3]; + + //默认整个图像 + if(_roi.w == 0) _roi.w = img.w; + if(_roi.h == 0) _roi.h = img.h; + + list_t out; + fb_alloc_mark(); + imlib_find_barcodes(&out, &img, &_roi); + fb_alloc_free_till_mark(); + + for (size_t i = 0; list_size(&out); i++) + { + find_barcodes_list_lnk_data_t lnk_data; + list_pop_front(&out, &lnk_data); + + py::dict val; + val["x"] = lnk_data.rect.x; + val["y"] = lnk_data.rect.y; + val["w"] = lnk_data.rect.w; + val["h"] = lnk_data.rect.h; + val["payload"] = std::string(lnk_data.payload, lnk_data.payload_len); + val["rotation"] = lnk_data.rotation; + val["type"] = lnk_data.type; + val["quality"] = lnk_data.quality; + + py::list corners; + for (int i = 0; i < 4; i++) + { + py::list tmp; + tmp.append(lnk_data.corners[i].x); + tmp.append(lnk_data.corners[i].y); + corners.append(tmp); + } + val["corners"] = corners; + + return_val.append(val); + } + + return return_val; +} // void imlib_get_histogram(histogram_t *out, image_t *ptr, rectangle_t *roi, list_t *thresholds, bool invert, image_t *other); maix_image::maix_histogram maix_image::_imlib_get_histogram(std::vector roi_src, std::vector> &thresholds_src, bool invert, maix_image & other_src, int bins, int l_bins, int a_bins, int b_bins) diff --git a/ext_modules/_maix_image/include/maix_image.h b/ext_modules/_maix_image/include/maix_image.h index 322df8a..96c4a27 100644 --- a/ext_modules/_maix_image/include/maix_image.h +++ b/ext_modules/_maix_image/include/maix_image.h @@ -97,6 +97,7 @@ class maix_vision : virtual public any_image py::list _imlib_find_line_segments(std::vector &roi, unsigned int merge_distance, unsigned int max_theta_diff); py::list _imlib_find_apriltags(std::vector &roi, int families, float fx, float fy, float cx, float cy); py::list _imlib_find_qrcodes(std::vector &roi); + py::list _imlib_find_barcodes(std::vector &roi); }; class maix_image : virtual public any_image, public maix_vision, public maix_custom diff --git a/ext_modules/_maix_image/py_maix_image.cpp b/ext_modules/_maix_image/py_maix_image.cpp index 54077a6..a79a985 100644 --- a/ext_modules/_maix_image/py_maix_image.cpp +++ b/ext_modules/_maix_image/py_maix_image.cpp @@ -139,5 +139,6 @@ PYBIND11_MODULE(_maix_image, mo) .def("find_line_segments",&maix_image::_imlib_find_line_segments,py::arg("roi")=std::vector{0,0,0,0},py::arg("merge_distance") = 0,py::arg("max_theta_diff") = 15) .def("find_apriltags",&maix_image::_imlib_find_apriltags,py::arg("roi")=std::vector{0,0,0,0},py::arg("families") = 16,py::arg("fx") = 0,py::arg("fy") = 0,py::arg("cx") = 0,py::arg("cy") = 0) .def("find_qrcodes",&maix_image::_imlib_find_qrcodes,py::arg("roi")=std::vector{0,0,0,0}) + .def("find_barcodes",&maix_image::_imlib_find_barcodes,py::arg("roi")=std::vector{0,0,0,0}) ; // module end } diff --git a/ext_modules/libmaix b/ext_modules/libmaix index d04600a..73fec07 160000 --- a/ext_modules/libmaix +++ b/ext_modules/libmaix @@ -1 +1 @@ -Subproject commit d04600a3fa4d39b92cce40eb0e8b5313357c1ad2 +Subproject commit 73fec07aa8aa39b6ddc23faeb31fce51987a0587