pybaseutils 2.5.0__tar.gz → 2.5.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/PKG-INFO +1 -1
  2. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/build_coco.py +10 -12
  4. pybaseutils-2.5.2/pybaseutils/converter/convert_labelme2coco.py +122 -0
  5. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme.py +5 -1
  6. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dict_uils.py +1 -0
  7. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dict_utils.py +8 -5
  8. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/geometry_tools.py +43 -0
  9. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/image_utils.py +69 -36
  10. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pose/bones_utils.py +8 -0
  11. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils.egg-info/PKG-INFO +1 -1
  12. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils.egg-info/SOURCES.txt +1 -0
  13. pybaseutils-2.5.2/test_py/converter/convert_labelme2coco.py +48 -0
  14. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_coco_vis.py +9 -8
  15. pybaseutils-2.5.0/pybaseutils/converter/convert_labelme2coco.py +0 -195
  16. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/LICENCE +0 -0
  17. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/README.md +0 -0
  18. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/audio/__init__.py +0 -0
  19. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/audio/audio_utils.py +0 -0
  20. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/audio/pyaudio_utils.py +0 -0
  21. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/audio/vad_utils.py +0 -0
  22. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/base/__init__.py +0 -0
  23. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/base/dict_queue.py +0 -0
  24. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/base/list_queue.py +0 -0
  25. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/base/producer_consumer.py +0 -0
  26. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/base64_utils.py +0 -0
  27. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/batch_utils.py +0 -0
  28. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/build_utils/__init__.py +0 -0
  29. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/build_utils/cython_utils.py +0 -0
  30. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  31. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cluster/__init__.py +0 -0
  32. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cluster/kmean.py +0 -0
  33. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cluster/maxmin_distance.py +0 -0
  34. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cluster/similarity.py +0 -0
  35. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/color_utils.py +0 -0
  36. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/config_utils.py +0 -0
  37. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/__init__.py +0 -0
  38. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/build_cvat.py +0 -0
  39. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/build_labelme.py +0 -0
  40. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/build_voc.py +0 -0
  41. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/concat_coco.py +0 -0
  42. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  43. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_coco2voc.py +0 -0
  44. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  45. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  46. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
  47. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  48. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  49. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2coco.py +0 -0
  50. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  51. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2voc.py +0 -0
  52. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  53. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
  54. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  55. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/converter/prelabelme.py +0 -0
  56. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/coords_utils.py +0 -0
  57. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/__init__.py +0 -0
  58. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/camera.py +0 -0
  59. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/corner_utils.py +0 -0
  60. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/frame_record.py +0 -0
  61. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/mouse_utils.py +0 -0
  62. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/nms_utils.py +0 -0
  63. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/cvutils/video_utils.py +0 -0
  64. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/data_utils.py +0 -0
  65. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/__init__.py +0 -0
  66. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/balanced_classes.py +0 -0
  67. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/base_coco.py +0 -0
  68. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/base_dataset.py +0 -0
  69. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/data_resample.py +0 -0
  70. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  71. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  72. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  73. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  74. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_image_text.py +0 -0
  75. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
  76. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme_line.py +0 -0
  77. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_video_folder.py +0 -0
  78. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_video_text.py +0 -0
  79. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_voc.py +0 -0
  80. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_yolo.py +0 -0
  81. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  82. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/file_utils.py +0 -0
  83. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/QueueTable.py +0 -0
  84. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/__init__.py +0 -0
  85. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/demo.py +0 -0
  86. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/kalman_filter.py +0 -0
  87. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/mean_filter.py +0 -0
  88. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/motion_filter.py +0 -0
  89. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/filter/pose_filter.py +0 -0
  90. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/font_style/__init__.py +0 -0
  91. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/font_utils.py +0 -0
  92. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/heatmap_utils.py +0 -0
  93. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/http_utils.py +0 -0
  94. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/json_utils.py +0 -0
  95. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/log.py +0 -0
  96. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/log_utils.py +0 -0
  97. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/media/__init__.py +0 -0
  98. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/media/ffmpeg_utils.py +0 -0
  99. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/metrics/__init__.py +0 -0
  100. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/metrics/accuracy.py +0 -0
  101. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/metrics/average_meter.py +0 -0
  102. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/metrics/class_report.py +0 -0
  103. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/metrics/plot_pr.py +0 -0
  104. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/metrics/plot_roc.py +0 -0
  105. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/nets_utils.py +0 -0
  106. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/numpy_utils.py +0 -0
  107. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pandas_utils.py +0 -0
  108. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/plot_utils.py +0 -0
  109. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pose/__init__.py +0 -0
  110. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pose/human_pose.py +0 -0
  111. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pose/pose_utils.py +0 -0
  112. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pycpp/__init__.py +0 -0
  113. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pycpp/demo.py +0 -0
  114. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/pycpp/main.py +0 -0
  115. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/server/__init__.py +0 -0
  116. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/server/apm_server.py +0 -0
  117. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/setup_config.py +0 -0
  118. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/singleton_utils.py +0 -0
  119. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/text_utils.py +0 -0
  120. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/thread_utils.py +0 -0
  121. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/time_utils.py +0 -0
  122. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracemalloc_utils.py +0 -0
  123. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracemalloc_utils2.py +0 -0
  124. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/QueueTable.py +0 -0
  125. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/__init__.py +0 -0
  126. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/demo.py +0 -0
  127. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/kalman_filter.py +0 -0
  128. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/mean_filter.py +0 -0
  129. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/motion_filter.py +0 -0
  130. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/tracking/pose_filter.py +0 -0
  131. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/transforms/__init__.py +0 -0
  132. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/transforms/affine_transform.py +0 -0
  133. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/transforms/build_transform.py +0 -0
  134. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/transforms/face_alignment.py +0 -0
  135. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/transforms/imgaug_utils.py +0 -0
  136. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/transforms/transform_utils.py +0 -0
  137. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/web/__init__.py +0 -0
  138. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/web/app_gradio_image.py +0 -0
  139. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/web/app_stweb_image.py +0 -0
  140. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/web/app_webio_image.py +0 -0
  141. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/web/demo.py +0 -0
  142. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/word_utils.py +0 -0
  143. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/worker.py +0 -0
  144. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils/yaml_utils.py +0 -0
  145. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils.egg-info/dependency_links.txt +0 -0
  146. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils.egg-info/not-zip-safe +0 -0
  147. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/pybaseutils.egg-info/top_level.txt +0 -0
  148. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/setup.cfg +0 -0
  149. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/setup.py +0 -0
  150. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/Image_enhance/__init__.py +0 -0
  151. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/Image_enhance/dmeo01.py +0 -0
  152. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/WebCrawler/__init__.py +0 -0
  153. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/WebCrawler/download_pdf.py +0 -0
  154. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/WebCrawler/search_baidu.py +0 -0
  155. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/WebCrawler/search_biying.py +0 -0
  156. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/__init__.py +0 -0
  157. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/__init__.py +0 -0
  158. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/action_dataset.py +0 -0
  159. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/build_cython.py +0 -0
  160. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/build_pyarmor.py +0 -0
  161. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/build_service.py +0 -0
  162. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/convert_cvat2labelme.py +0 -0
  163. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/convert_labelme2coco.py +0 -0
  164. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/convert_labelme2voc.py +0 -0
  165. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/copy_move.py +0 -0
  166. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_class_counts.py +0 -0
  167. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_aicq.py +0 -0
  168. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_aije.py +0 -0
  169. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_ailt.py +0 -0
  170. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_shock.py +0 -0
  171. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_motion_blur.py +0 -0
  172. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_video_aije.py +0 -0
  173. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_voc_crop.py +0 -0
  174. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/demo_voc_vis.py +0 -0
  175. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/get_pair_data.py +0 -0
  176. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/mask_image.py +0 -0
  177. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/aije/video_convertor.py +0 -0
  178. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/__init__.py +0 -0
  179. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/demo.py +0 -0
  180. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/main.py +0 -0
  181. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/main_read.py +0 -0
  182. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/segment.py +0 -0
  183. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  184. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio/speechbrain_demo.py +0 -0
  185. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/audio_demo1.py +0 -0
  186. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/camera/__init__.py +0 -0
  187. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/camera/demo.py +0 -0
  188. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/camera.py +0 -0
  189. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/captcha/__init__.py +0 -0
  190. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/captcha/demo.py +0 -0
  191. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/class_attribute.py +0 -0
  192. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/class_names.py +0 -0
  193. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/AffectNet.py +0 -0
  194. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/AsianMovie.py +0 -0
  195. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/BITVehicle2voc.py +0 -0
  196. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/BSTLD2voc.py +0 -0
  197. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/CCPD.py +0 -0
  198. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/CCPD2voc.py +0 -0
  199. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/FL3D_dataset.py +0 -0
  200. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/FreiHAND2coco.py +0 -0
  201. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/MTFL2voc.py +0 -0
  202. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/TT100K.py +0 -0
  203. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/WaterMeters1.py +0 -0
  204. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/WaterMeters2.py +0 -0
  205. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/__init__.py +0 -0
  206. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/car_accident.py +0 -0
  207. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/concat_coco.py +0 -0
  208. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_coco2voc.py +0 -0
  209. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_cvat2labelme.py +0 -0
  210. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_gesture2hand.py +0 -0
  211. /pybaseutils-2.5.0/test_py/converter/convert_labelme2coco.py → /pybaseutils-2.5.2/test_py/converter/convert_labelme2coco_pen.py +0 -0
  212. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2cvat.py +0 -0
  213. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2labelme.py +0 -0
  214. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2voc.py +0 -0
  215. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_voc2labelme.py +0 -0
  216. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/convert_yolo2labelme.py +0 -0
  217. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/fall_dataset.py +0 -0
  218. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/fatigue_driving.py +0 -0
  219. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/fdd_dataset.py +0 -0
  220. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/get_pair_data.py +0 -0
  221. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/handpose2coco.py +0 -0
  222. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/insects_for_aichallenger.py +0 -0
  223. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/parking_rois_gopro.py +0 -0
  224. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/tt100k_utils.py +0 -0
  225. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/ua_detrac2voc.py +0 -0
  226. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/ucf101_dataset.py +0 -0
  227. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/converter/voc_sbd2labelme.py +0 -0
  228. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/__init__.py +0 -0
  229. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/build_cython.py +0 -0
  230. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/build_pyarmor.py +0 -0
  231. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/cryptography_demo.py +0 -0
  232. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/fun_sum.py +0 -0
  233. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/main.py +0 -0
  234. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/model_des_enctypt.py +0 -0
  235. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/cython_build/model_enctypt.py +0 -0
  236. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/date_dataset.py +0 -0
  237. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/date_demo.py +0 -0
  238. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/datedataset_bk.py +0 -0
  239. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo1.py +0 -0
  240. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo2.py +0 -0
  241. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo3.py +0 -0
  242. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo4.py +0 -0
  243. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_async_await1.py +0 -0
  244. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_async_await2.py +0 -0
  245. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_copy_files.py +0 -0
  246. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_copy_files_for_voc.py +0 -0
  247. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_ffmpy.py +0 -0
  248. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_for_annular_to_rect.py +0 -0
  249. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_for_pair_file.py +0 -0
  250. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_for_polygon.py +0 -0
  251. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_for_trt.py +0 -0
  252. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_get_file_label.py +0 -0
  253. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_get_file_list.py +0 -0
  254. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_gif.py +0 -0
  255. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_gif_video.py +0 -0
  256. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_image_crop.py +0 -0
  257. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_kpts.py +0 -0
  258. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_labelme.py +0 -0
  259. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_labelme_crop.py +0 -0
  260. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_lableme_vis.py +0 -0
  261. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_letterbox.py +0 -0
  262. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_metrics.py +0 -0
  263. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_mosaic.py +0 -0
  264. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_mouse.py +0 -0
  265. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_nii.py +0 -0
  266. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_pandas.py +0 -0
  267. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_plot.py +0 -0
  268. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_prelabelme.py +0 -0
  269. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_rename.py +0 -0
  270. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_standard_image .py +0 -0
  271. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_standard_video .py +0 -0
  272. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_taichi.py +0 -0
  273. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_video2frame.py +0 -0
  274. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_video_crop.py +0 -0
  275. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_video_segm.py +0 -0
  276. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_voc_crop.py +0 -0
  277. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_voc_vis.py +0 -0
  278. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_word_similar.py +0 -0
  279. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_worker1.py +0 -0
  280. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/demo_worker2.py +0 -0
  281. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/detector/__init__.py +0 -0
  282. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/detector/demo.py +0 -0
  283. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/detector/detect_face_person.py +0 -0
  284. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/detector/predet_labelme.py +0 -0
  285. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/edit_distance/__init__.py +0 -0
  286. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/edit_distance/demo.py +0 -0
  287. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/edit_distance/text_matching.py +0 -0
  288. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/fast_api/__init__.py +0 -0
  289. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/fast_api/create_image_url.py +0 -0
  290. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/fast_api/get_image_url.py +0 -0
  291. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/flask_demo/__init__.py +0 -0
  292. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/flask_demo/app.py +0 -0
  293. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/flask_demo/utils/__init__.py +0 -0
  294. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/flask_demo/utils/utils.py +0 -0
  295. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/get_file_list.py +0 -0
  296. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/gradio_app.py +0 -0
  297. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/gradio_app_v2.py +0 -0
  298. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/image_correction/__init__.py +0 -0
  299. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v1.py +0 -0
  300. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v2.py +0 -0
  301. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v3.py +0 -0
  302. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/kafka_worker.py +0 -0
  303. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/men_tracemalloc.py +0 -0
  304. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/milvus_demo/__init__.py +0 -0
  305. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/milvus_demo/demo01.py +0 -0
  306. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/milvus_demo/demo02.py +0 -0
  307. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/milvus_demo/hello_milvus.py +0 -0
  308. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/milvus_demo/milvus_client.py +0 -0
  309. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/model_process.py +0 -0
  310. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/performance.py +0 -0
  311. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/pose/__init__.py +0 -0
  312. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/pose/human_pose.py +0 -0
  313. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/qrcode/__init__.py +0 -0
  314. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/qrcode/demo.py +0 -0
  315. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/redis_py/__init__.py +0 -0
  316. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/redis_py/knn_search.py +0 -0
  317. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/redis_py/redis_client.py +0 -0
  318. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/registry/__init__.py +0 -0
  319. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/registry/base.py +0 -0
  320. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/registry/component.py +0 -0
  321. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/registry/main.py +0 -0
  322. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/registry/register.py +0 -0
  323. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/single_class/GRU.py +0 -0
  324. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/single_class/TCN.py +0 -0
  325. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/single_class/__init__.py +0 -0
  326. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/single_class/demo.py +0 -0
  327. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/slowfastnet.py +0 -0
  328. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/test_camera.py +0 -0
  329. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/test_fr/__init__.py +0 -0
  330. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/test_fr/demo11.py +0 -0
  331. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/test_fr/idcardocr.py +0 -0
  332. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/web_socket/__init__.py +0 -0
  333. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/web_socket/asr_clients.py +0 -0
  334. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/web_socket/asr_service.py +0 -0
  335. {pybaseutils-2.5.0 → pybaseutils-2.5.2}/test_py/web_socket/chat_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybaseutils
3
- Version: 2.5.0
3
+ Version: 2.5.2
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -8,4 +8,4 @@
8
8
  # --------------------------------------------------------
9
9
  """
10
10
 
11
- __version__ = '2.5.0'
11
+ __version__ = '2.5.2'
@@ -211,6 +211,7 @@ class COCOBuilder():
211
211
  keypoints[1::3] = np.clip(keypoints[1::3], 1, height - 1)
212
212
  :return:
213
213
  """
214
+ if isinstance(keypoints, np.ndarray): keypoints = keypoints.tolist()
214
215
  self.annotation_id += 1
215
216
  annotation_item = dict()
216
217
  annotation_item['segmentation'] = seg
@@ -274,24 +275,21 @@ class COCOBuilder():
274
275
  if area < min_area: segs, area = [], []
275
276
  return segs, area
276
277
 
277
- def addObjects(self, filename, objects: dict, width, height, num_joints, ignore_tiny=False):
278
+ def addObjects(self, filename, objects: dict, width, height, ignore_tiny=False):
278
279
  """
279
280
  :param filename: os.path.basename(filename)
280
281
  :param objects:
281
- boxes is [[xmin,ymin,xmax,ymax],[xmin,ymin,xmax,ymax],...]
282
- labels is [目标1,目标2,...]
283
- contours is [目标1的轮廓,目标2的轮廓,...]
284
- keypoints is [目标1的关键点,目标2的关键点,...],格式:
285
- keypoints=num_joints*3,x,y,visibility
286
- keypoints关节点的格式 : [x_1, y_1, v_1,...,x_k, y_k, v_k]
287
- 其中x,y为Keypoint的坐标,v为可见标志
288
- v = 0 : 未标注点
289
- v = 1 : 标注了但是图像中不可见(例如遮挡)
290
- v = 2 : 标注了并图像可见
282
+ boxes [[xmin,ymin,xmax,ymax],[xmin,ymin,xmax,ymax],...]
283
+ labels [目标1,目标2,...]
284
+ contours [目标1[seg1,seg2,...],目标2[seg1,seg2,...],...]
285
+ keypoints [目标1[x1, y1, v1,x2, y2, v2,...],目标1[x1, y1, v1,x2, y2, v2,...],...]
286
+ 其中x,y为Keypoint的坐标,v为可见标志
287
+ v = 0 : 未标注点
288
+ v = 1 : 标注了但是图像中不可见(例如遮挡)
289
+ v = 2 : 标注了并图像可见
291
290
  实际预测时,不要求预测每个关节点的可见性
292
291
  :param width:
293
292
  :param height:
294
- :param num_joints:
295
293
  :param ignore_tiny: 是否去除segment很细小的目标
296
294
  :return:
297
295
  """
@@ -0,0 +1,122 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Project:
5
+ # @Author : panjq
6
+ # @Date : 2020-02-12 18:28:16
7
+ # @url :
8
+ # --------------------------------------------------------
9
+ """
10
+
11
+ import argparse
12
+ import sys
13
+ import os
14
+ import numpy as np
15
+ import json
16
+ import cv2
17
+ import time
18
+ from tqdm import tqdm
19
+ from pybaseutils.dataloader import parser_labelme
20
+ from pybaseutils.converter import build_coco
21
+
22
+
23
+ class Labelme2COCO(build_coco.COCOBuilder):
24
+ """Convert Labelme to COCO dataset format"""
25
+
26
+ def __init__(self, anno_dir, image_dir, class_name=[], init_id=None, use_kpt=False, kpt_names=[],
27
+ kpt_shape=[]):
28
+ """
29
+ :param anno_dir:
30
+ :param image_dir:
31
+ :param class_name:
32
+ :param init_id:
33
+ :param use_kpt:
34
+ :param kpt_names: 关键点名称列表,
35
+ 当kpt_names.ndim=1时,要求所有类别且所有目标的关键点名称必须一致
36
+ 当kpt_names.ndim=2时,仅要求相同类别目标的关键点名称必须一致,且len(kpt_names)==len(self.class_name)
37
+ :param kpt_shape: 关键点的维度,默认是(17, 3),对于coco-person,有17个关键点,3表示(x,y,v))
38
+ """
39
+ super(Labelme2COCO, self).__init__(init_id=init_id)
40
+ print(anno_dir)
41
+ print(image_dir)
42
+ self.anno_dir = anno_dir
43
+ self.image_dir = image_dir
44
+ self.kpt_names = kpt_names
45
+ self.kpt_shape = kpt_shape
46
+ self.labelme = parser_labelme.LabelMeDataset(anno_dir=anno_dir,
47
+ image_dir=image_dir,
48
+ class_name=class_name,
49
+ check_kpt=True,
50
+ use_kpt=use_kpt,
51
+ kpt_names=kpt_names,
52
+ kpt_shape=kpt_shape,
53
+ use_rgb=False,
54
+ shuffle=False,
55
+ check=False
56
+ )
57
+
58
+ def build_instances_dataset(self, save_file, ):
59
+ """
60
+ 构建COCO的目标检测和实例分割数据集
61
+ :param save_file: 输出COCO格式的文件
62
+ :return:
63
+ """
64
+ for index in tqdm(range(len(self.labelme))):
65
+ data_info = self.labelme.__getitem__(index)
66
+ contours = [[c] for c in data_info["points"]]
67
+ info = {"boxes": data_info["boxes"], "labels": data_info["names"],
68
+ "contours": contours}
69
+ width, height = data_info["size"]
70
+ filename = data_info["image_file"]
71
+ self.addObjects(filename, info, width, height, num_joints=0)
72
+ build_coco.COCOTools.check_coco(self.coco)
73
+ self.save_coco(save_file)
74
+
75
+ def build_keypoints_dataset(self, save_file, skeleton=[]):
76
+ """
77
+ 构建COCO的目标检测和实例分割数据集
78
+ :param save_file: 输出COCO格式的文件
79
+ :return:
80
+ """
81
+ for index in tqdm(range(len(self.labelme))):
82
+ data_info = self.labelme.__getitem__(index)
83
+ contours = [[c] for c in data_info["points"]]
84
+ keypoints = [c.reshape(-1) for c in data_info["keypoints"]]
85
+ info = {"boxes": data_info["boxes"], "labels": data_info["names"],
86
+ "contours": contours, "keypoints": keypoints}
87
+ width, height = data_info["size"]
88
+ filename = data_info["image_file"]
89
+ self.addObjects(filename, info, width, height)
90
+ # 设置关键点的名称和skeleton
91
+ self.set_keypoints_category(kps_name=self.kpt_names[0], skeleton=skeleton, cat_id=0)
92
+ build_coco.COCOTools.check_coco(self.coco)
93
+ self.save_coco(save_file)
94
+
95
+ def save_coco(self, json_file):
96
+ """保存COCO数据集"""
97
+ super(Labelme2COCO, self).save_coco(json_file)
98
+
99
+
100
+ def demo():
101
+ class_name = ["person"]
102
+ kpt_names = [["p0", "p1", "p2", "p3", "p4"]]
103
+ skeleton = [[0, 2], [2, 1], [2, 3], [3, 4]]
104
+ kpt_shape = [5, 3]
105
+ anno_dir = "/media/PKing/dev2/SDK/base-utils/data/labelme/images"
106
+ coco_ins_file = os.path.join(os.path.dirname(anno_dir), "coco_ins.json")
107
+ coco_kps_file = os.path.join(os.path.dirname(anno_dir), "coco_kps.json")
108
+ build = Labelme2COCO(image_dir=anno_dir,
109
+ anno_dir=anno_dir,
110
+ class_name=class_name,
111
+ use_kpt=True,
112
+ kpt_names=kpt_names,
113
+ kpt_shape=kpt_shape
114
+ )
115
+ # TODO 构建关键点检测数据集
116
+ build.build_keypoints_dataset(coco_kps_file, skeleton=skeleton)
117
+ # TODO 构建实例分割数据集
118
+ # build.build_instances_dataset(coco_ins_file)
119
+
120
+
121
+ if __name__ == '__main__':
122
+ demo()
@@ -53,6 +53,10 @@ class LabelMeDataset(Dataset):
53
53
  :param check: 当class_name=None且check=True,将自动获取所有class
54
54
  :param check_kpt: True会检查关键点的完整性,图像中仅当所有目标都标注和对应的关键点(无漏标注),才返回数据
55
55
  False不会检查关键点的完整性,,图像中只要标注的目标和对应的关键点(漏标注),会返回数据
56
+ :param kpt_names: 关键点名称列表,
57
+ 当kpt_names.ndim=1时,要求所有类别且所有目标的关键点名称必须一致
58
+ 当kpt_names.ndim=2时,仅要求相同类别目标的关键点名称必须一致,且len(kpt_names)==len(self.class_name)
59
+ :param kpt_shape: 关键点的维度,默认是(17, 3),对于coco-person,有17个关键点,3表示(x,y,v)
56
60
  :param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
57
61
  :param kwargs: read_image: 是否读取图片,否则image=None
58
62
  """
@@ -619,9 +623,9 @@ def example_for_keypoints():
619
623
  image_dir=None,
620
624
  class_name=class_name,
621
625
  use_kpt=True,
626
+ check_kpt=True,
622
627
  kpt_names=kpt_names,
623
628
  kpt_shape=kpt_shape,
624
- check_kpt=False,
625
629
  check=False,
626
630
  phase="val",
627
631
  shuffle=False)
@@ -7,4 +7,5 @@
7
7
  # @Brief :
8
8
  # --------------------------------------------------------
9
9
  """
10
+ # TODO 兼容之前dict_uils.py的异常
10
11
  from pybaseutils.dict_utils import *
@@ -14,8 +14,9 @@ from collections import defaultdict
14
14
 
15
15
 
16
16
  class Objects(object):
17
- def __init__(self, boxes, label, score, names=[], size=[], segms=None, masks=None, keypt=None,
18
- traid=None, trace=None, color=[], image=None, file=""):
17
+ def __init__(self, boxes, label, score, names=[], size=[],
18
+ segms=[], masks=None, keypt=[], value=[],
19
+ traid=[], trace: defaultdict = None, color=[], image=None, file=""):
19
20
  self.boxes = boxes # 目标框(xmin,ymin,xmax,ymax)
20
21
  self.score = score # 目标框置信度
21
22
  self.label = label # 目标框类别
@@ -25,12 +26,14 @@ class Objects(object):
25
26
  self.masks = masks # 目标轮廓掩码
26
27
  self.segms = segms # 目标轮廓[np.shape(n,2)]
27
28
  self.traid = traid # 轨迹ID
28
- self.trace = trace # 轨迹的历史boxes
29
+ self.trace = trace # 轨迹的历史数据
30
+ self.value = value # 一些数值
31
+ self.depth = None # 深度图
32
+ self.dists = [] # 深度值(segms/boxes区域)
29
33
  self.color = [(255, 0, 0)] * len(boxes) # 目标框颜色
34
+ self.metas = defaultdict() # 其他信息
30
35
  self.size = size # 原始图像大小
31
36
  self.file = file # 文件路径
32
- self.depth = None # 深度图
33
- self.metas = defaultdict() # 其他信息
34
37
 
35
38
  def update(self, **kwargs):
36
39
  """更新属性值"""
@@ -7,6 +7,7 @@
7
7
  # @Brief :
8
8
  # --------------------------------------------------------
9
9
  """
10
+ import math
10
11
  import numpy as np
11
12
  from scipy.spatial.distance import cdist
12
13
 
@@ -221,6 +222,48 @@ def compute_vector_angle(a, b, minangle=True):
221
222
  return angle
222
223
 
223
224
 
225
+ def image2math_coord(pts, height=None):
226
+ """
227
+ 将图像坐标系(x 向右,y 向下)转换为数学坐标系(x 向右,y 向上)笛卡尔坐标系。
228
+ :param pts: 形如 (N, 2) 的数组/列表,图像坐标点
229
+ :param height: 可选,图像高度。给出时按 (x, height - y) 翻转,
230
+ 结果仍落在图像矩形范围内;不给出时按 (x, -y) 翻转。
231
+ :return: (N, 2) 的 numpy 数组,数学坐标点
232
+ """
233
+ pts = np.asarray(pts, dtype=float)
234
+ if pts.ndim != 2 or pts.shape[1] != 2: raise ValueError("pts 必须是形如 (N, 2) 的数组")
235
+ out = pts.copy()
236
+ if height is None:
237
+ out[:, 1] = -out[:, 1] # y 取反,原点不变
238
+ else:
239
+ out[:, 1] = height - out[:, 1] # 以图像底边为 y=0
240
+ return out
241
+
242
+
243
+ def get_vector_angle(v1, v2, clockwise=True):
244
+ """
245
+ 坐标系约定: 标准的数学坐标系(x 轴向右,y 轴向上)
246
+ 计算从向量 v1 旋转到向量 v2 的角度。
247
+ :param v1: 形如 (x, y) 的元组/列表,表示平面向量
248
+ :param v2: 形如 (x, y) 的元组/列表,表示平面向量
249
+ :param clockwise: True 顺时针角度,False 逆时针角度
250
+ :return: 角度(度),范围 [0, 360)
251
+ 注意: 0 和 360 是同一个方向,函数统一返回 0
252
+ """
253
+ x1, y1 = v1
254
+ x2, y2 = v2
255
+ # 零向量无法定义方向
256
+ if (x1 == 0 and y1 == 0) or (x2 == 0 and y2 == 0): return 0
257
+ dot = x1 * x2 + y1 * y2 # 点积
258
+ cross = x1 * y2 - y1 * x2 # 叉积(z 分量)
259
+ # 叉积 > 0 表示 v2 在 v1 的逆时针方向
260
+ # 顺时针:用 -cross;逆时针:用 +cross
261
+ signed_cross = -cross if clockwise else cross
262
+ angle = math.degrees(math.atan2(signed_cross, dot))
263
+ # 把 (-180, 180] 映射到 [0, 360)
264
+ return angle % 360
265
+
266
+
224
267
  def line_test():
225
268
  '''
226
269
  angle: 56.789092174788685
@@ -1440,12 +1440,14 @@ def show_landmark(title, image, landmarks, vis_id=False, delay=0):
1440
1440
  return image
1441
1441
 
1442
1442
 
1443
- def draw_points_texts(image, points, texts=None, color=(255, 0, 0), thickness=0, fontScale=0, drawType="simple"):
1443
+ def draw_points_texts(image, points, texts=None, color=(255, 0, 0), thickness=0, fontScale=0, vis_pt=True,
1444
+ drawType="simple"):
1444
1445
  """
1445
1446
  :param image:
1446
1447
  :param points:
1447
1448
  :param texts:
1448
1449
  :param color:
1450
+ :param vis_pt: 是否绘制点
1449
1451
  :param drawType: custom or simple
1450
1452
  :return:
1451
1453
  """
@@ -1457,7 +1459,7 @@ def draw_points_texts(image, points, texts=None, color=(255, 0, 0), thickness=0,
1457
1459
  point = (int(point[0]), int(point[1]))
1458
1460
  c = color[index]
1459
1461
  text = str(text)
1460
- cv2.circle(image, point, thickness * 3, tuple(c), -1, lineType=cv2.LINE_AA)
1462
+ if vis_pt: cv2.circle(image, point, thickness * 3, tuple(c), -1, lineType=cv2.LINE_AA)
1461
1463
  if text: draw_text(image, point, text, color=c, fontScale=fontScale, thickness=thickness, drawType=drawType)
1462
1464
  return image
1463
1465
 
@@ -1539,7 +1541,7 @@ def draw_bbox_text_ch(image, bbox, text, color, thickness=2, fontScale=0.8):
1539
1541
  cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,避免断裂
1540
1542
  cv2.rectangle(image, bg1, bg2, color, -1) # 绘制底纹
1541
1543
  if len(bbox) == 4: cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness) # 绘制bbox
1542
- text_loc = (text_loc[0], int(text_loc[1] * 1.0)) # 调整字体位置
1544
+ text_loc = (text_loc[0], int(text_loc[1] * 1.0)) # 调整字体位置
1543
1545
  cv2_putText(image, str(text), text_loc, color=(255, 255, 255), fontScale=fontScale, thickness=abs(thickness))
1544
1546
  return image
1545
1547
 
@@ -1558,7 +1560,7 @@ def draw_bbox_text_en(image, bbox, text, color, thickness=2, fontScale=0.8):
1558
1560
  cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,避免断裂
1559
1561
  cv2.rectangle(image, bg1, bg2, color, -1) # 绘制底纹
1560
1562
  if len(bbox) == 4: cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness) # 绘制bbox
1561
- text_loc = (text_loc[0], int(text_loc[1] * 0.95)) # 调整字体位置
1563
+ # text_loc = (text_loc[0], int(text_loc[1] * 0.95)) # 调整字体位置
1562
1564
  cv2.putText(image, str(text), (text_loc[0], text_loc[1]), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
1563
1565
  fontScale=fontScale, color=(255, 255, 255), thickness=abs(thickness))
1564
1566
  return image
@@ -1627,6 +1629,7 @@ def get_font_type(size, font=""):
1627
1629
 
1628
1630
 
1629
1631
  def cv2_putText(img, text, point, fontFace=None, fontScale=0.8, color=(255, 0, 0), thickness=None):
1632
+ if not text: return img
1630
1633
  # cv2.putText(img, str(text), point, fontFace, fontScale, color=color, thickness=thickness)
1631
1634
  text_wh, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_COMPLEX, fontScale, abs(thickness))
1632
1635
  pilimg = Image.fromarray(img) # Image.fromarray()将数组类型转成图片格式,与np.array()相反
@@ -1636,15 +1639,19 @@ def cv2_putText(img, text, point, fontFace=None, fontScale=0.8, color=(255, 0, 0
1636
1639
  font = get_font_type(size=size)
1637
1640
  draw.text(point, text, color, font)
1638
1641
  img[:] = np.asarray(pilimg)
1642
+ return img
1639
1643
 
1640
1644
 
1641
- def draw_key_point_in_image(image, key_points, pointline=[], boxes=[], colors=None, vis_id=False, thickness=2):
1645
+ def draw_key_point_in_image(image, key_points, pointline=[], boxes=[], colors=None,
1646
+ vis_id=False, vis_pt=True, thickness=2):
1642
1647
  """
1643
1648
  :param image:
1644
1649
  :param key_points: list(ndarray(19,2)) or ndarray(n_person,19,2)
1645
1650
  :param pointline: `auto`->pointline = circle_line(len(points), iscircle=True)
1646
1651
  :param boxes: 目标框
1647
1652
  :param colors: 每个点的颜色
1653
+ :param vis_id: 是否绘制ID
1654
+ :param vis_pt: 是否绘制点
1648
1655
  :return:
1649
1656
  """
1650
1657
  nums = max(len(key_points), len(boxes))
@@ -1657,22 +1664,35 @@ def draw_key_point_in_image(image, key_points, pointline=[], boxes=[], colors=No
1657
1664
  # 可视化(x,y,v)的v
1658
1665
  # if vis_id and len(points[0]) == 3: texts = [f"{t}[{int(points[i][2])}]" for i, t in enumerate(texts)]
1659
1666
  image = draw_image_points_lines(image, points, pointline, circle_color=color, line_color=color,
1660
- texts=texts, thickness=thickness)
1667
+ texts=texts, thickness=thickness, vis_pt=vis_pt)
1661
1668
  if len(boxes) > 0:
1662
1669
  image = draw_image_boxes(image, boxes=[boxes[i]], color=color, thickness=thickness)
1663
1670
  return image
1664
1671
 
1665
1672
 
1666
- def draw_key_point_arrowed_in_image(image, key_points, pointline=[], color=None):
1673
+ def draw_key_point_arrowed_in_image(image, key_points, pointline=[], boxes=[], colors=None,
1674
+ vis_id=False, vis_pt=True, thickness=2):
1667
1675
  """
1668
1676
  :param key_points: list(ndarray(19,2)) or ndarray(n_person,19,2)
1669
1677
  :param image:
1670
1678
  :param pointline:[[start-->end]]
1679
+ :param vis_id: 是否绘制ID
1680
+ :param vis_pt: 是否绘制点
1671
1681
  :return:
1672
1682
  """
1673
- for person_id, points in enumerate(key_points):
1674
- if points is None or len(points) == 0: continue
1675
- image = draw_image_points_arrowed_lines(image, points, pointline)
1683
+ nums = max(len(key_points), len(boxes))
1684
+ for i in range(nums):
1685
+ color = color_table[(i + 1) % 20] if not colors else colors
1686
+ if len(key_points) > 0:
1687
+ points = key_points[i]
1688
+ if points is None or len(points) == 0: continue
1689
+ texts = list(range(len(points))) if vis_id else [""] * len(points)
1690
+ # 可视化(x,y,v)的v
1691
+ # if vis_id and len(points[0]) == 3: texts = [f"{t}[{int(points[i][2])}]" for i, t in enumerate(texts)]
1692
+ image = draw_image_points_arrowed_lines(image, points, pointline, circle_color=color, line_color=color,
1693
+ texts=texts, thickness=thickness, vis_pt=vis_pt)
1694
+ if len(boxes) > 0:
1695
+ image = draw_image_boxes(image, boxes=[boxes[i]], color=color, thickness=thickness)
1676
1696
  return image
1677
1697
 
1678
1698
 
@@ -1683,7 +1703,8 @@ def draw_image_points_lines(image,
1683
1703
  fontScale=0.8,
1684
1704
  circle_color=(255, 0, 0),
1685
1705
  line_color=(0, 0, 255),
1686
- thickness=2):
1706
+ thickness=2,
1707
+ vis_pt=True):
1687
1708
  """
1688
1709
  在图像中画点和连接线
1689
1710
  :param image:
@@ -1691,6 +1712,7 @@ def draw_image_points_lines(image,
1691
1712
  :param pointline: `auto`->pointline = circle_line(len(points), iscircle=True)
1692
1713
  :param color:
1693
1714
  :param texts:
1715
+ :param vis_pt: 是否绘制点
1694
1716
  :param drawType: simple or custom
1695
1717
  :param check:
1696
1718
  :return:
@@ -1700,19 +1722,25 @@ def draw_image_points_lines(image,
1700
1722
  texts = list(range(len(points)))
1701
1723
  draw_image_lines(image, points, pointline, color=line_color, thickness=thickness)
1702
1724
  thickness_ = max(int(thickness * 1), 1)
1703
- image = draw_points_text(image, points,
1704
- texts=texts,
1705
- color=circle_color,
1706
- fontScale=fontScale,
1707
- thickness=thickness_,
1708
- drawType="simple")
1725
+ image = draw_points_texts(image, points,
1726
+ texts=texts,
1727
+ color=circle_color,
1728
+ fontScale=fontScale,
1729
+ thickness=thickness_,
1730
+ vis_pt=vis_pt,
1731
+ drawType="simple")
1709
1732
  return image
1710
1733
 
1711
1734
 
1712
- def draw_image_points_arrowed_lines(image, points,
1735
+ def draw_image_points_arrowed_lines(image,
1736
+ points,
1713
1737
  pointline=[],
1714
1738
  texts=None,
1715
- drawType="simple",
1739
+ fontScale=0.8,
1740
+ circle_color=(255, 0, 0),
1741
+ line_color=(0, 0, 255),
1742
+ thickness=2,
1743
+ vis_pt=True,
1716
1744
  reverse=False):
1717
1745
  """
1718
1746
  在图像中画点箭头线
@@ -1721,16 +1749,23 @@ def draw_image_points_arrowed_lines(image, points,
1721
1749
  :param pointline: `auto`->pointline = circle_line(len(points), iscircle=True)
1722
1750
  :param color:
1723
1751
  :param texts:
1752
+ :param vis_pt: 是否绘制点
1724
1753
  :param drawType: simple or custom
1725
1754
  :param check:
1726
1755
  :return:
1727
1756
  """
1728
1757
  points = np.asarray(points, dtype=np.int32)
1729
- thickness = 2
1730
1758
  if texts is None:
1731
1759
  texts = list(range(len(points)))
1732
- image = draw_points_text(image, points, texts=texts, thickness=thickness, drawType=drawType)
1733
- draw_image_arrowed_lines(image, points, pointline, thickness=thickness, reverse=reverse)
1760
+ draw_image_arrowed_lines(image, points, pointline, color=line_color, thickness=thickness, reverse=reverse)
1761
+ thickness_ = max(int(thickness * 1), 1)
1762
+ image = draw_points_texts(image, points,
1763
+ texts=texts,
1764
+ color=circle_color,
1765
+ fontScale=fontScale,
1766
+ thickness=thickness_,
1767
+ vis_pt=vis_pt,
1768
+ drawType="simple")
1734
1769
  return image
1735
1770
 
1736
1771
 
@@ -1755,7 +1790,7 @@ def arrowed_line(image, pt1, pt2, color, arrow_length=20, **kwargs):
1755
1790
  """
1756
1791
  cv2.arrowedLine 的 tipLength 参数是相对于线段总长的比例,这导致箭头大小会随着线段长度变化
1757
1792
  使用fixed_arrowedLine可以修复这个问题
1758
- 绘制一条带有固定长度箭头的线段。
1793
+ 绘制一条带有固定长度箭头的线段(pt1-->pt2)。
1759
1794
  :param image: 目标图像
1760
1795
  :param pt1: 箭尾/起点坐标 (x1, y1)
1761
1796
  :param pt2: 箭头/终点坐标 (x2, y2)
@@ -1780,24 +1815,22 @@ def arrowed_line(image, pt1, pt2, color, arrow_length=20, **kwargs):
1780
1815
  return image
1781
1816
 
1782
1817
 
1783
- def draw_image_arrowed_lines(image,
1784
- points,
1785
- pointline=[],
1786
- color=(0, 0, 255),
1787
- thickness=2,
1788
- reverse=False):
1789
- points = np.asarray(points, dtype=np.int32)
1790
- if pointline == "auto":
1818
+ def draw_image_arrowed_lines(image, points, pointline=[], color=(0, 0, 255), thickness=2, reverse=False):
1819
+ if pointline == "auto" or pointline == []:
1791
1820
  pointline = circle_line(len(points), iscircle=True)
1792
- for point_index in pointline:
1793
- point1 = tuple(points[point_index[0]])
1794
- point2 = tuple(points[point_index[1]])
1821
+ if isinstance(color[0], numbers.Number): color = [color] * len(points)
1822
+ for index in pointline:
1823
+ if not index: continue
1824
+ point1 = tuple(points[index[0]])
1825
+ point2 = tuple(points[index[1]])
1795
1826
  if (not check_point(point1)) or (not check_point(point2)):
1796
1827
  continue
1828
+ point1 = (int(point1[0]), int(point1[1]))
1829
+ point2 = (int(point2[0]), int(point2[1]))
1797
1830
  if reverse:
1798
- cv2.arrowedLine(image, point1, point2, color, thickness=thickness, tipLength=thickness)
1831
+ arrowed_line(image, point2, point1, color=color[index[1]], thickness=thickness)
1799
1832
  else:
1800
- cv2.arrowedLine(image, point2, point1, color, thickness=thickness, tipLength=thickness)
1833
+ arrowed_line(image, point1, point2, color=color[index[1]], thickness=thickness)
1801
1834
  return image
1802
1835
 
1803
1836
 
@@ -57,6 +57,14 @@ BONES = {
57
57
  [0, 127, 255], [102, 0, 102], [153, 0, 153], [178, 0, 204], [255, 0, 255]],
58
58
  "describe": "手部关键点信息"
59
59
  },
60
+ "pressure_meter": {
61
+ "skeleton": [[2, 0], [2, 1], [2, 3]],
62
+ "keypoint": [],
63
+ "num_joints": 4,
64
+ "names": {},
65
+ "colors": [[255, 0, 0], [255, 0, 0], [0, 255, 0], [0, 255, 0]],
66
+ "describe": "压力计"
67
+ },
60
68
  "points": {
61
69
  "skeleton": [[]],
62
70
  "keypoint": [],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybaseutils
3
- Version: 2.5.0
3
+ Version: 2.5.2
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -259,6 +259,7 @@ test_py/converter/convert_coco2voc.py
259
259
  test_py/converter/convert_cvat2labelme.py
260
260
  test_py/converter/convert_gesture2hand.py
261
261
  test_py/converter/convert_labelme2coco.py
262
+ test_py/converter/convert_labelme2coco_pen.py
262
263
  test_py/converter/convert_labelme2cvat.py
263
264
  test_py/converter/convert_labelme2labelme.py
264
265
  test_py/converter/convert_labelme2voc.py
@@ -0,0 +1,48 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ @Author : Pan
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-10-12 16:21:55
6
+ @Brief :
7
+ """
8
+ import sys
9
+ import os
10
+
11
+ sys.path.insert(0, os.getcwd())
12
+ import cv2
13
+ import argparse
14
+ import sys
15
+ import os
16
+ import numpy as np
17
+ import json
18
+ import cv2
19
+ import time
20
+ from tqdm import tqdm
21
+ from pybaseutils import file_utils, json_utils, image_utils
22
+ from pybaseutils.dataloader import parser_labelme
23
+ from pybaseutils.converter import convert_labelme2coco
24
+
25
+
26
+ def demo():
27
+ class_name = ["pressure_meter"]
28
+ kpt_names = [ [ "range_start", "range_end",'pointer_start', 'pointer_end', ] ]
29
+ skeleton = [[2, 0], [2, 1], [2, 3]]
30
+ kpt_shape = [4, 3]
31
+ anno_dir = "/home/PKing/nasdata/tmp/tmp/pressure_meter/dataset-v1/train/images"
32
+ coco_ins_file = os.path.join(os.path.dirname(anno_dir), "coco_ins.json")
33
+ coco_kps_file = os.path.join(os.path.dirname(anno_dir), "coco_kps.json")
34
+ build = convert_labelme2coco.Labelme2COCO(image_dir=anno_dir,
35
+ anno_dir=anno_dir,
36
+ class_name=class_name,
37
+ use_kpt=True,
38
+ kpt_names=kpt_names,
39
+ kpt_shape=kpt_shape
40
+ )
41
+ # TODO 构建关键点检测数据集
42
+ build.build_keypoints_dataset(coco_kps_file, skeleton=skeleton)
43
+ # TODO 构建实例分割数据集
44
+ # build.build_instances_dataset(coco_ins_file)
45
+
46
+
47
+ if __name__ == '__main__':
48
+ demo()
@@ -36,6 +36,7 @@ def demo_vis_CocoInstances():
36
36
 
37
37
  # anno_file = "../data/coco/coco_ins.json"
38
38
  anno_file = "/home/PKing/Downloads/labeled_trainval/SSLAD-2D/labeled/val/instance_val.json"
39
+ anno_file = "/media/PKing/dev2/SDK/base-utils/data/labelme/coco_ins.json"
39
40
  class_name = None
40
41
  dataset = parser_coco_ins.CocoInstances(anno_file=[anno_file], image_dir="", decode=True,
41
42
  class_name=class_name, use_rgb=False, shuffle=True)
@@ -54,11 +55,11 @@ def demo_vis_CocoKeypoints():
54
55
  # anno_file = "/home/PKing/nasdata/dataset/tmp/hand-pose/HandPose-v2/train/train_anno.json"
55
56
  # class_name = ['hand']
56
57
  # anno_file = "/home/PKing/nasdata/dataset/tmp/pen/dataset-pen2/train/coco_kps.json"
57
- anno_file = "/home/PKing/nasdata/tmp/tmp/pen/dataset-pen1/train/coco_kps.json"
58
- # class_name = ['pen_tip']
59
- class_name = []
60
- class_name = ["hand_pen"]
61
- # class_name = {"pen": "hand"}
58
+ anno_file = "/media/PKing/dev2/SDK/base-utils/data/labelme/coco_kps.json"
59
+ class_name = ["person"]
60
+
61
+ anno_file = "/home/PKing/nasdata/tmp/tmp/pressure_meter/dataset-v1/train/coco_kps.json"
62
+ class_name = ["pressure_meter"]
62
63
  dataset = parser_coco_kps.CocoKeypoints(anno_file, image_dir="", class_name=class_name, shuffle=True)
63
64
  bones = dataset.bones
64
65
  for i in range(len(dataset)):
@@ -66,7 +67,7 @@ def demo_vis_CocoKeypoints():
66
67
  data = dataset.__getitem__(i)
67
68
  image, boxes, labels, keypoints = data['image'], data["boxes"], data["labels"], data["keypoints"]
68
69
  h, w = image.shape[:2]
69
- kpts = [s / (w, h) for s in keypoints] if len(keypoints) > 0 else []
70
+ kpts = [s / (w, h, 1) for s in keypoints] if len(keypoints) > 0 else []
70
71
  kpts = np.asarray(kpts)
71
72
  keypoints = np.asarray(keypoints)
72
73
  print("i={},image_file={}".format(i, data['image_file']))
@@ -90,6 +91,6 @@ def demo_vis_CocoDetections():
90
91
 
91
92
 
92
93
  if __name__ == "__main__":
93
- demo_vis_CocoDetections()
94
+ # demo_vis_CocoDetections()
94
95
  # demo_vis_CocoInstances()
95
- # demo_vis_CocoKeypoints()
96
+ demo_vis_CocoKeypoints()