visualize_pybind.cc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. // Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #include "ultra_infer/pybind/main.h"
  15. namespace ultra_infer {
  16. void BindVisualize(pybind11::module &m) {
  17. m.def("vis_detection",
  18. [](pybind11::array &im_data, vision::DetectionResult &result,
  19. std::vector<std::string> &labels, float score_threshold,
  20. int line_size, float font_size, std::vector<int> font_color,
  21. int font_thickness) {
  22. auto im = PyArrayToCvMat(im_data);
  23. cv::Mat vis_im;
  24. if (labels.empty()) {
  25. vis_im = vision::VisDetection(im, result, score_threshold,
  26. line_size, font_size);
  27. } else {
  28. vis_im = vision::VisDetection(im, result, labels, score_threshold,
  29. line_size, font_size, font_color,
  30. font_thickness);
  31. }
  32. FDTensor out;
  33. vision::Mat(vis_im).ShareWithTensor(&out);
  34. return TensorToPyArray(out);
  35. })
  36. .def("vis_perception",
  37. [](pybind11::array &im_data, vision::PerceptionResult &result,
  38. const std::string &config_file, float score_threshold,
  39. int line_size, float font_size) {
  40. auto im = PyArrayToCvMat(im_data);
  41. auto vis_im =
  42. vision::VisPerception(im, result, config_file, score_threshold,
  43. line_size, font_size);
  44. FDTensor out;
  45. vision::Mat(vis_im).ShareWithTensor(&out);
  46. return TensorToPyArray(out);
  47. })
  48. .def("vis_face_detection",
  49. [](pybind11::array &im_data, vision::FaceDetectionResult &result,
  50. int line_size, float font_size) {
  51. auto im = PyArrayToCvMat(im_data);
  52. auto vis_im =
  53. vision::VisFaceDetection(im, result, line_size, font_size);
  54. FDTensor out;
  55. vision::Mat(vis_im).ShareWithTensor(&out);
  56. return TensorToPyArray(out);
  57. })
  58. .def("vis_face_alignment",
  59. [](pybind11::array &im_data, vision::FaceAlignmentResult &result,
  60. int line_size) {
  61. auto im = PyArrayToCvMat(im_data);
  62. auto vis_im = vision::VisFaceAlignment(im, result, line_size);
  63. FDTensor out;
  64. vision::Mat(vis_im).ShareWithTensor(&out);
  65. return TensorToPyArray(out);
  66. })
  67. .def("vis_segmentation",
  68. [](pybind11::array &im_data, vision::SegmentationResult &result,
  69. float weight) {
  70. cv::Mat im = PyArrayToCvMat(im_data);
  71. auto vis_im = vision::VisSegmentation(im, result, weight);
  72. FDTensor out;
  73. vision::Mat(vis_im).ShareWithTensor(&out);
  74. return TensorToPyArray(out);
  75. })
  76. .def("swap_background",
  77. [](pybind11::array &im_data, pybind11::array &background_data,
  78. vision::MattingResult &result, bool remove_small_connected_area) {
  79. cv::Mat im = PyArrayToCvMat(im_data);
  80. cv::Mat background = PyArrayToCvMat(background_data);
  81. auto vis_im = vision::SwapBackground(im, background, result,
  82. remove_small_connected_area);
  83. FDTensor out;
  84. vision::Mat(vis_im).ShareWithTensor(&out);
  85. return TensorToPyArray(out);
  86. })
  87. .def("swap_background",
  88. [](pybind11::array &im_data, pybind11::array &background_data,
  89. vision::SegmentationResult &result, int background_label) {
  90. cv::Mat im = PyArrayToCvMat(im_data);
  91. cv::Mat background = PyArrayToCvMat(background_data);
  92. auto vis_im = vision::SwapBackground(im, background, result,
  93. background_label);
  94. FDTensor out;
  95. vision::Mat(vis_im).ShareWithTensor(&out);
  96. return TensorToPyArray(out);
  97. })
  98. .def("vis_ppocr",
  99. [](pybind11::array &im_data, vision::OCRResult &result) {
  100. auto im = PyArrayToCvMat(im_data);
  101. auto vis_im = vision::VisOcr(im, result);
  102. FDTensor out;
  103. vision::Mat(vis_im).ShareWithTensor(&out);
  104. return TensorToPyArray(out);
  105. })
  106. .def("vis_ppocr_curve",
  107. [](pybind11::array &im_data, vision::OCRCURVEResult &result) {
  108. auto im = PyArrayToCvMat(im_data);
  109. auto vis_im = vision::VisCURVEOcr(im, result);
  110. FDTensor out;
  111. vision::Mat(vis_im).ShareWithTensor(&out);
  112. return TensorToPyArray(out);
  113. })
  114. .def("vis_mot",
  115. [](pybind11::array &im_data, vision::MOTResult &result,
  116. float score_threshold, vision::tracking::TrailRecorder record) {
  117. auto im = PyArrayToCvMat(im_data);
  118. auto vis_im = vision::VisMOT(im, result, score_threshold, &record);
  119. FDTensor out;
  120. vision::Mat(vis_im).ShareWithTensor(&out);
  121. return TensorToPyArray(out);
  122. })
  123. .def("vis_matting",
  124. [](pybind11::array &im_data, vision::MattingResult &result,
  125. bool transparent_background, float transparent_threshold,
  126. bool remove_small_connected_area) {
  127. cv::Mat im = PyArrayToCvMat(im_data);
  128. auto vis_im = vision::VisMatting(
  129. im, result, transparent_background, transparent_threshold,
  130. remove_small_connected_area);
  131. FDTensor out;
  132. vision::Mat(vis_im).ShareWithTensor(&out);
  133. return TensorToPyArray(out);
  134. })
  135. .def("vis_headpose",
  136. [](pybind11::array &im_data, vision::HeadPoseResult &result,
  137. int size, int line_size) {
  138. auto im = PyArrayToCvMat(im_data);
  139. auto vis_im = vision::VisHeadPose(im, result, size, line_size);
  140. FDTensor out;
  141. vision::Mat(vis_im).ShareWithTensor(&out);
  142. return TensorToPyArray(out);
  143. });
  144. pybind11::class_<vision::Visualize>(m, "Visualize")
  145. .def(pybind11::init<>())
  146. .def_static("vis_detection",
  147. [](pybind11::array &im_data, vision::DetectionResult &result,
  148. float score_threshold, int line_size, float font_size) {
  149. auto im = PyArrayToCvMat(im_data);
  150. auto vis_im = vision::Visualize::VisDetection(
  151. im, result, score_threshold, line_size, font_size);
  152. FDTensor out;
  153. vision::Mat(vis_im).ShareWithTensor(&out);
  154. return TensorToPyArray(out);
  155. })
  156. .def_static(
  157. "vis_keypoint_detection",
  158. [](pybind11::array &im_data, vision::KeyPointDetectionResult &result,
  159. float conf_threshold) {
  160. auto im = PyArrayToCvMat(im_data);
  161. auto vis_im =
  162. vision::VisKeypointDetection(im, result, conf_threshold);
  163. FDTensor out;
  164. vision::Mat(vis_im).ShareWithTensor(&out);
  165. return TensorToPyArray(out);
  166. })
  167. .def_static("vis_face_detection",
  168. [](pybind11::array &im_data,
  169. vision::FaceDetectionResult &result, int line_size,
  170. float font_size) {
  171. auto im = PyArrayToCvMat(im_data);
  172. auto vis_im = vision::Visualize::VisFaceDetection(
  173. im, result, line_size, font_size);
  174. FDTensor out;
  175. vision::Mat(vis_im).ShareWithTensor(&out);
  176. return TensorToPyArray(out);
  177. })
  178. .def_static(
  179. "vis_segmentation",
  180. [](pybind11::array &im_data, vision::SegmentationResult &result) {
  181. cv::Mat im = PyArrayToCvMat(im_data);
  182. auto vis_im = vision::Visualize::VisSegmentation(im, result);
  183. FDTensor out;
  184. vision::Mat(vis_im).ShareWithTensor(&out);
  185. return TensorToPyArray(out);
  186. })
  187. .def_static("swap_background_matting",
  188. [](pybind11::array &im_data, pybind11::array &background_data,
  189. vision::MattingResult &result,
  190. bool remove_small_connected_area) {
  191. cv::Mat im = PyArrayToCvMat(im_data);
  192. cv::Mat background = PyArrayToCvMat(background_data);
  193. auto vis_im = vision::Visualize::SwapBackgroundMatting(
  194. im, background, result, remove_small_connected_area);
  195. FDTensor out;
  196. vision::Mat(vis_im).ShareWithTensor(&out);
  197. return TensorToPyArray(out);
  198. })
  199. .def_static("swap_background_segmentation",
  200. [](pybind11::array &im_data, pybind11::array &background_data,
  201. int background_label, vision::SegmentationResult &result) {
  202. cv::Mat im = PyArrayToCvMat(im_data);
  203. cv::Mat background = PyArrayToCvMat(background_data);
  204. auto vis_im = vision::Visualize::SwapBackgroundSegmentation(
  205. im, background, background_label, result);
  206. FDTensor out;
  207. vision::Mat(vis_im).ShareWithTensor(&out);
  208. return TensorToPyArray(out);
  209. })
  210. .def_static("remove_small_connected_area",
  211. [](pybind11::array &alpha_pred_data, float threshold) {
  212. cv::Mat alpha_pred = PyArrayToCvMat(alpha_pred_data);
  213. auto vis_im = vision::Visualize::RemoveSmallConnectedArea(
  214. alpha_pred, threshold);
  215. })
  216. .def_static("vis_ppocr",
  217. [](pybind11::array &im_data, vision::OCRResult &result) {
  218. auto im = PyArrayToCvMat(im_data);
  219. auto vis_im = vision::Visualize::VisOcr(im, result);
  220. FDTensor out;
  221. vision::Mat(vis_im).ShareWithTensor(&out);
  222. return TensorToPyArray(out);
  223. })
  224. .def_static("vis_ppocr_curve",
  225. [](pybind11::array &im_data, vision::OCRCURVEResult &result) {
  226. auto im = PyArrayToCvMat(im_data);
  227. auto vis_im = vision::Visualize::VisCURVEOcr(im, result);
  228. FDTensor out;
  229. vision::Mat(vis_im).ShareWithTensor(&out);
  230. return TensorToPyArray(out);
  231. })
  232. .def_static(
  233. "vis_mot",
  234. [](pybind11::array &im_data, vision::MOTResult &result,
  235. float score_threshold, vision::tracking::TrailRecorder *record) {
  236. auto im = PyArrayToCvMat(im_data);
  237. auto vis_im = vision::VisMOT(im, result, score_threshold, record);
  238. FDTensor out;
  239. vision::Mat(vis_im).ShareWithTensor(&out);
  240. return TensorToPyArray(out);
  241. })
  242. .def_static("vis_matting_alpha",
  243. [](pybind11::array &im_data, vision::MattingResult &result,
  244. bool remove_small_connected_area) {
  245. cv::Mat im = PyArrayToCvMat(im_data);
  246. auto vis_im = vision::Visualize::VisMattingAlpha(
  247. im, result, remove_small_connected_area);
  248. FDTensor out;
  249. vision::Mat(vis_im).ShareWithTensor(&out);
  250. return TensorToPyArray(out);
  251. });
  252. }
  253. } // namespace ultra_infer