pybaseutils 2.2.4__tar.gz → 2.2.7__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 (271) hide show
  1. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/PKG-INFO +1 -1
  2. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_labelme.py +7 -3
  4. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2cvat.py +2 -1
  5. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_labelme.py +60 -48
  6. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/file_utils.py +13 -1
  7. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/image_utils.py +2 -2
  8. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/plot_utils.py +1 -1
  9. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/augment_utils.py +63 -5
  10. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/PKG-INFO +1 -1
  11. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_lableme_vis.py +1 -1
  12. pybaseutils-2.2.7/test_py/demo_plot.py +23 -0
  13. pybaseutils-2.2.4/test_py/demo_plot.py +0 -26
  14. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/LICENCE +0 -0
  15. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/README.md +0 -0
  16. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/__init__.py +0 -0
  17. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/audio_utils.py +0 -0
  18. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/pyaudio_utils.py +0 -0
  19. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/vad_utils.py +0 -0
  20. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/base64_utils.py +0 -0
  21. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/batch_utils.py +0 -0
  22. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/build_utils/__init__.py +0 -0
  23. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/build_utils/cython_utils.py +0 -0
  24. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  25. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/__init__.py +0 -0
  26. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/kmean.py +0 -0
  27. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/maxmin_distance.py +0 -0
  28. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/similarity.py +0 -0
  29. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/color_utils.py +0 -0
  30. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/config_utils.py +0 -0
  31. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/__init__.py +0 -0
  32. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_coco.py +0 -0
  33. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_cvat.py +0 -0
  34. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_voc.py +0 -0
  35. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/concat_coco.py +0 -0
  36. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  37. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_coco2voc.py +0 -0
  38. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  39. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  40. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  41. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  42. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2coco.py +0 -0
  43. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  44. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2voc.py +0 -0
  45. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  46. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  47. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/coords_utils.py +0 -0
  48. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/__init__.py +0 -0
  49. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/corner_utils.py +0 -0
  50. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/monitor.py +0 -0
  51. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/mouse_utils.py +0 -0
  52. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/nms_utils.py +0 -0
  53. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/video_utils.py +0 -0
  54. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/__init__.py +0 -0
  55. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/balanced_classes.py +0 -0
  56. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/base_coco.py +0 -0
  57. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/base_dataset.py +0 -0
  58. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/data_resample.py +0 -0
  59. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  60. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  61. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  62. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  63. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_image_text.py +0 -0
  64. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_voc.py +0 -0
  65. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_yolo.py +0 -0
  66. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  67. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/QueueTable.py +0 -0
  68. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/__init__.py +0 -0
  69. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/demo.py +0 -0
  70. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/kalman_filter.py +0 -0
  71. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/mean_filter.py +0 -0
  72. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/motion_filter.py +0 -0
  73. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/pose_filter.py +0 -0
  74. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/font_style/__init__.py +0 -0
  75. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/font_utils.py +0 -0
  76. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/geometry_tools.py +0 -0
  77. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/heatmap_utils.py +0 -0
  78. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/json_utils.py +0 -0
  79. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/log.py +0 -0
  80. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/log_utils.py +0 -0
  81. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/logger.py +0 -0
  82. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/__init__.py +0 -0
  83. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/accuracy.py +0 -0
  84. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/average_meter.py +0 -0
  85. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/class_report.py +0 -0
  86. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/plot_pr.py +0 -0
  87. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/plot_roc.py +0 -0
  88. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/numpy_utils.py +0 -0
  89. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pandas_utils.py +0 -0
  90. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/__init__.py +0 -0
  91. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/bones_utils.py +0 -0
  92. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/human_pose.py +0 -0
  93. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/pose_utils.py +0 -0
  94. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pycpp/__init__.py +0 -0
  95. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pycpp/demo.py +0 -0
  96. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pycpp/main.py +0 -0
  97. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/server/__init__.py +0 -0
  98. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/server/apm_server.py +0 -0
  99. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/setup_config.py +0 -0
  100. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/singleton_utils.py +0 -0
  101. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/text_utils.py +0 -0
  102. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/thread_utils.py +0 -0
  103. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/time_utils.py +0 -0
  104. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracemalloc_utils.py +0 -0
  105. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracemalloc_utils2.py +0 -0
  106. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/QueueTable.py +0 -0
  107. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/__init__.py +0 -0
  108. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/demo.py +0 -0
  109. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/kalman_filter.py +0 -0
  110. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/mean_filter.py +0 -0
  111. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/motion_filter.py +0 -0
  112. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/pose_filter.py +0 -0
  113. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/__init__.py +0 -0
  114. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/affine_transform.py +0 -0
  115. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/face_alignment.py +0 -0
  116. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/transform_utils.py +0 -0
  117. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/word_utils.py +0 -0
  118. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/worker.py +0 -0
  119. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/yaml_utils.py +0 -0
  120. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/SOURCES.txt +0 -0
  121. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/dependency_links.txt +0 -0
  122. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/not-zip-safe +0 -0
  123. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/top_level.txt +0 -0
  124. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/setup.cfg +0 -0
  125. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/setup.py +0 -0
  126. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/Image_enhance/__init__.py +0 -0
  127. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/Image_enhance/dmeo01.py +0 -0
  128. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/WebCrawler/__init__.py +0 -0
  129. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/WebCrawler/search_image.py +0 -0
  130. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  131. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/__init__.py +0 -0
  132. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/__init__.py +0 -0
  133. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/action_dataset.py +0 -0
  134. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/build_cython.py +0 -0
  135. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/build_pyarmor.py +0 -0
  136. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/build_service.py +0 -0
  137. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/convert_cvat2labelme.py +0 -0
  138. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/convert_labelme2coco.py +0 -0
  139. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/convert_labelme2voc.py +0 -0
  140. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/copy_move.py +0 -0
  141. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_labelme_crop.py +0 -0
  142. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_labelme_shock.py +0 -0
  143. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_video_aije.py +0 -0
  144. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_voc_crop.py +0 -0
  145. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_voc_vis.py +0 -0
  146. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/get_pair_data.py +0 -0
  147. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/video_convertor.py +0 -0
  148. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/__init__.py +0 -0
  149. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/demo.py +0 -0
  150. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/main.py +0 -0
  151. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/main_read.py +0 -0
  152. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/segment.py +0 -0
  153. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  154. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/speechbrain_demo.py +0 -0
  155. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/captcha/__init__.py +0 -0
  156. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/captcha/demo.py +0 -0
  157. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/class_attribute.py +0 -0
  158. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/class_names.py +0 -0
  159. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/AffectNet.py +0 -0
  160. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/AsianMovie.py +0 -0
  161. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/BITVehicle2voc.py +0 -0
  162. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/BSTLD2voc.py +0 -0
  163. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/CCPD.py +0 -0
  164. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/CCPD2voc.py +0 -0
  165. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/FL3D_dataset.py +0 -0
  166. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/FreiHAND2coco.py +0 -0
  167. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/MTFL2voc.py +0 -0
  168. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/TT100K.py +0 -0
  169. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/WaterMeters1.py +0 -0
  170. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/WaterMeters2.py +0 -0
  171. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/__init__.py +0 -0
  172. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/concat_coco.py +0 -0
  173. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_coco2voc.py +0 -0
  174. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_cvat2labelme.py +0 -0
  175. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_gesture2hand.py +0 -0
  176. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_labelme2coco.py +0 -0
  177. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_labelme2cvat.py +0 -0
  178. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_labelme2voc.py +0 -0
  179. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_voc2labelme.py +0 -0
  180. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/fatigue_driving.py +0 -0
  181. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/fdd_dataset.py +0 -0
  182. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/get_pair_data.py +0 -0
  183. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/handpose2coco.py +0 -0
  184. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/insects_for_aichallenger.py +0 -0
  185. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/tt100k_utils.py +0 -0
  186. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/ua_detrac2voc.py +0 -0
  187. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/ucf101_dataset.py +0 -0
  188. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/voc_sbd2labelme.py +0 -0
  189. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/__init__.py +0 -0
  190. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/build_cython.py +0 -0
  191. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/build_pyarmor.py +0 -0
  192. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/cryptography_demo.py +0 -0
  193. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/fun_sum.py +0 -0
  194. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/main.py +0 -0
  195. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/model_des_enctypt.py +0 -0
  196. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/model_enctypt.py +0 -0
  197. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo1.py +0 -0
  198. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo2.py +0 -0
  199. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo3.py +0 -0
  200. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_async_await1.py +0 -0
  201. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_async_await2.py +0 -0
  202. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_coco_vis.py +0 -0
  203. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_copy_files.py +0 -0
  204. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_copy_files_for_voc.py +0 -0
  205. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_ffmpy.py +0 -0
  206. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_for_pair_file.py +0 -0
  207. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_for_polygon.py +0 -0
  208. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_for_trt.py +0 -0
  209. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_get_file_label.py +0 -0
  210. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_get_file_list.py +0 -0
  211. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_gif.py +0 -0
  212. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_gif_video.py +0 -0
  213. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_image_crop.py +0 -0
  214. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_kpts.py +0 -0
  215. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_labelme.py +0 -0
  216. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_labelme_crop.py +0 -0
  217. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_metrics.py +0 -0
  218. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_mouse.py +0 -0
  219. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_nii.py +0 -0
  220. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_pandas.py +0 -0
  221. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_rename.py +0 -0
  222. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_standard_image .py +0 -0
  223. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_standard_video .py +0 -0
  224. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_taichi.py +0 -0
  225. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_video.py +0 -0
  226. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_video_crop.py +0 -0
  227. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_voc_crop.py +0 -0
  228. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_voc_vis.py +0 -0
  229. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_word_similar.py +0 -0
  230. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_worker1.py +0 -0
  231. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_worker2.py +0 -0
  232. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/__init__.py +0 -0
  233. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/demo.py +0 -0
  234. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/detect_face_person.py +0 -0
  235. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/predet_labelme.py +0 -0
  236. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/edit_distance/__init__.py +0 -0
  237. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/edit_distance/demo.py +0 -0
  238. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/edit_distance/text_matching.py +0 -0
  239. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/flask_demo/__init__.py +0 -0
  240. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/flask_demo/func.py +0 -0
  241. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/flask_demo/server.py +0 -0
  242. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/get_file_list.py +0 -0
  243. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/__init__.py +0 -0
  244. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/demo_correction_v1.py +0 -0
  245. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/demo_correction_v2.py +0 -0
  246. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/demo_correction_v3.py +0 -0
  247. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/kafka_worker.py +0 -0
  248. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/men_tracemalloc.py +0 -0
  249. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/__init__.py +0 -0
  250. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/demo01.py +0 -0
  251. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/demo02.py +0 -0
  252. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/hello_milvus.py +0 -0
  253. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/milvus_client.py +0 -0
  254. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/performance.py +0 -0
  255. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/pose/__init__.py +0 -0
  256. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/pose/human_pose.py +0 -0
  257. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/redis_py/__init__.py +0 -0
  258. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/redis_py/knn_search.py +0 -0
  259. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/redis_py/redis_client.py +0 -0
  260. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/__init__.py +0 -0
  261. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/base.py +0 -0
  262. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/component.py +0 -0
  263. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/main.py +0 -0
  264. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/register.py +0 -0
  265. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/GRU.py +0 -0
  266. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/TCN.py +0 -0
  267. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/__init__.py +0 -0
  268. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/demo.py +0 -0
  269. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/test_fr/__init__.py +0 -0
  270. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/test_fr/demo11.py +0 -0
  271. {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/test_fr/idcardocr.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.2.4
3
+ Version: 2.2.7
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -5,4 +5,4 @@
5
5
  @Date : 2019-05-07 17:40:27
6
6
  """
7
7
 
8
- __version__ = '2.2.4'
8
+ __version__ = '2.2.7'
@@ -12,7 +12,7 @@ from tqdm import tqdm
12
12
  from pybaseutils import image_utils, file_utils, json_utils
13
13
 
14
14
 
15
- def maker_labelme(json_file, points, labels, image_name, image_size, keypoints=[], image_bs64=None):
15
+ def maker_labelme(json_file, points, labels, image_name, image_size, image_bs64=None, keypoints=[]):
16
16
  """
17
17
  制作label数据格式
18
18
  :param json_file: 保存json文件路径
@@ -21,16 +21,20 @@ def maker_labelme(json_file, points, labels, image_name, image_size, keypoints=[
21
21
  :param image_name: 图片名称,如果存在则进行拷贝到json_file同一级目录
22
22
  :param image_size: (W,H)
23
23
  :param image_bs64: 图片base64编码,可为None
24
+ :param keypoints: [(N,3),(N,3),...],(x,y,conf),其3维度是置信度
24
25
  :return:
25
26
  """
26
27
  assert len(points) == len(labels)
27
28
  file_utils.create_file_path(json_file)
28
29
  shapes = []
29
- for point, label in zip(points, labels):
30
+ if isinstance(keypoints, np.ndarray): keypoints = keypoints.tolist()
31
+ for i in range(len(points)):
30
32
  # point = [[x1,y1],[x2,y2],...,[xn,yn]]
33
+ point, label = points[i], labels[i]
31
34
  if isinstance(point, np.ndarray): point = point.tolist()
32
35
  if not isinstance(point[0], list): point = [point]
33
- item = {"label": label, "score": None, "keypoints": keypoints, "line_color": None, "fill_color": None,
36
+ kpts = keypoints[i] if keypoints else []
37
+ item = {"label": label, "score": None, "keypoints": kpts, "line_color": None, "fill_color": None,
34
38
  "group_id": None, "points": point, "shape_type": "polygon", "flags": {}, "description": ""}
35
39
  shapes.append(item)
36
40
  data = {
@@ -27,7 +27,8 @@ def convert_labelme2cvat(anno_dir, image_dir="", vis=False):
27
27
  image_name = os.path.basename(image_file)
28
28
  json_file = os.path.join(anno_dir, image_name.split(".")[0] + ".json")
29
29
  xml_file = os.path.join(image_dir, image_name.split(".")[0] + ".xml")
30
- boxes, labels, points, groups = parser_labelme.parser_labelme(json_file, class_dict={})
30
+ info = parser_labelme.parser_labelme(json_file, class_dict={})
31
+ boxes, labels, points = info["boxes"], info["points"], info["labels"]
31
32
  image = cv2.imread(image_file)
32
33
  h, w = image.shape[:2]
33
34
  build_cvat.maker_cvat(xml_file, points, labels, image_name, image_size=[w, h])
@@ -63,13 +63,13 @@ class LabelMeDataset(Dataset):
63
63
  random.seed(200)
64
64
  random.shuffle(self.image_ids)
65
65
  self.num_images = len(self.image_ids)
66
- print("Dataset data_root :{}".format(self.data_root))
67
- print("Dataset anno_dir :{}".format(self.anno_dir))
68
- print("Dataset image_dir :{}".format(self.image_dir))
69
- print("Dataset class_name :{}".format(self.class_name))
70
- print("Dataset class_dict :{}".format(self.class_dict))
71
- print("Dataset num images :{}".format(len(self.image_ids)))
72
- # print("Dataset num_classes :{}".format(self.num_classes))
66
+ print("LabelMeDataset data_root :{}".format(self.data_root))
67
+ print("LabelMeDataset anno_dir :{}".format(self.anno_dir))
68
+ print("LabelMeDataset image_dir :{}".format(self.image_dir))
69
+ print("LabelMeDataset class_name :{}".format(self.class_name))
70
+ print("LabelMeDataset class_dict :{}".format(self.class_dict))
71
+ print("LabelMeDataset num images :{}".format(len(self.image_ids)))
72
+ # print("LabelMeDataset num_classes :{}".format(self.num_classes))
73
73
  print("------" * 10)
74
74
 
75
75
  def __len__(self):
@@ -114,13 +114,12 @@ class LabelMeDataset(Dataset):
114
114
  if not os.path.exists(image_file):
115
115
  continue
116
116
  annotation, width, height = self.load_annotations(anno_file)
117
- box, label, point, group, names = self.parser_annotation(annotation, self.class_dict,
118
- min_points=self.min_points,
119
- unique=self.unique)
120
- if len(label) == 0:
117
+ info = self.parser_annotation(annotation, self.class_dict, min_points=self.min_points, unique=self.unique)
118
+ labels = info["labels"]
119
+ if len(labels) == 0:
121
120
  continue
122
121
  dst_ids.append(image_id)
123
- class_name += label
122
+ class_name += labels
124
123
  if self.class_name is None:
125
124
  class_name = sorted(list(set(class_name)))
126
125
  self.class_name, self.class_dict = self.parser_classes(class_name)
@@ -170,11 +169,12 @@ class LabelMeDataset(Dataset):
170
169
  annotation, width, height = self.load_annotations(anno_file)
171
170
  image = self.read_image(image_file, use_rgb=self.use_rgb)
172
171
  shape = image.shape
173
- boxes, labels, points, groups, names = self.parser_annotation(annotation, self.class_dict, shape,
174
- min_points=self.min_points, unique=self.unique)
175
- data = {"image": image, "points": points, "boxes": boxes, "labels": labels, "groups": groups, "names": names,
176
- "image_file": image_file, "anno_file": anno_file, "size": [shape[1], shape[0]]}
177
- return data
172
+ data_info = self.parser_annotation(annotation, self.class_dict, shape, min_points=self.min_points,
173
+ unique=self.unique)
174
+ # TODO dict(boxes, labels, points, groups, names, keypoints)
175
+ data_info.update({"image": image, "image_file": image_file, "anno_file": anno_file,
176
+ "size": [shape[1], shape[0]]})
177
+ return data_info
178
178
 
179
179
  @staticmethod
180
180
  def parser_annotation(annotation: dict, class_dict={}, shape=None, min_points=-1, unique=False):
@@ -185,7 +185,7 @@ class LabelMeDataset(Dataset):
185
185
  :param min_points: 当标注的轮廓点的个数小于等于min_points,会被剔除;负数不剔除
186
186
  :return:
187
187
  """
188
- bboxes, labels, points, groups, names = [], [], [], [], []
188
+ bboxes, labels, points, groups, names, keypoints = [], [], [], [], [], []
189
189
  for anno in annotation:
190
190
  name = "unique" if unique else anno["label"]
191
191
  label = name
@@ -198,8 +198,9 @@ class LabelMeDataset(Dataset):
198
198
  pts = np.asarray(anno["points"], dtype=np.int32)
199
199
  if min_points > 0 and len(pts) <= min_points:
200
200
  continue
201
- group_id = json_utils.get_value(anno, key=["group_id"], default=0)
202
- group_id = group_id if group_id else 0
201
+ gid = json_utils.get_value(anno, key=["group_id"], default=0)
202
+ gid = gid if gid else 0
203
+ kpt = json_utils.get_value(anno, key=["keypoints"], default=[])
203
204
  if shape:
204
205
  h, w = shape[:2]
205
206
  pts[:, 0] = np.clip(pts[:, 0], 0, w - 1)
@@ -209,8 +210,9 @@ class LabelMeDataset(Dataset):
209
210
  labels.append(label)
210
211
  bboxes.append(box)
211
212
  points.append(pts)
212
- groups.append(group_id)
213
- return bboxes, labels, points, groups, names
213
+ groups.append(gid)
214
+ keypoints.append(kpt)
215
+ return dict(boxes=bboxes, labels=labels, points=points, groups=groups, names=names, keypoints=keypoints)
214
216
 
215
217
  def index2id(self, index):
216
218
  """
@@ -327,7 +329,7 @@ class LabelMeDataset(Dataset):
327
329
  return annos, width, height
328
330
 
329
331
  @staticmethod
330
- def get_targets(data_info: dict, targets, keys=['points', 'boxes', 'labels', 'groups', 'names']):
332
+ def get_match_targets(data_info: dict, targets, keys=['points', 'boxes', 'labels', 'groups', 'names', 'keypoints']):
331
333
  names = data_info["names"]
332
334
  out = {}
333
335
  for i in range(len(names)):
@@ -350,8 +352,8 @@ class LabelMeDataset(Dataset):
350
352
  :return:
351
353
  """
352
354
  image, file = data_info["image"], data_info["image_file"]
353
- target_info = LabelMeDataset.get_targets(data_info, targets=superclass)
354
- attibu_info = LabelMeDataset.get_targets(data_info, targets=subclass)
355
+ target_info = LabelMeDataset.get_match_targets(data_info, targets=superclass)
356
+ attibu_info = LabelMeDataset.get_match_targets(data_info, targets=subclass)
355
357
  item_list = []
356
358
  for i in range(len(target_info.get("boxes", []))):
357
359
  tbbox = [target_info["boxes"][i]]
@@ -439,16 +441,37 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
439
441
  :return:
440
442
  """
441
443
  annotation, width, height = LabelMeDataset.load_annotations(anno_file)
442
- bboxes, labels, points, groups, names = LabelMeDataset.parser_annotation(annotation, class_dict, shape)
443
- return bboxes, labels, points, groups, names
444
+ info = LabelMeDataset.parser_annotation(annotation, class_dict, shape)
445
+ return info
444
446
 
445
447
 
446
- def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
447
- # image = image_utils.draw_image_bboxes_text(image, bboxes, labels, color=(255, 0, 0),
448
+ def draw_keypoints_image(image, boxes=[], keypoints=[], thickness=1, vis_id=False):
449
+ """绘制keypoints"""
450
+ h, w = image.shape[:2]
451
+ if len(keypoints)== 0: return image
452
+ if len(boxes) == 0: boxes = [(0, 0, w, h)] * len(keypoints)
453
+ from pybaseutils.pose import bones_utils
454
+ target_bones = bones_utils.get_target_bones("coco_person")
455
+ image = image_utils.draw_key_point_in_image(image, keypoints, pointline=target_bones["skeleton"],
456
+ colors=target_bones["colors"], thickness=thickness,
457
+ boxes=boxes, vis_id=vis_id)
458
+
459
+ if vis_id:
460
+ for kpts in keypoints:
461
+ if len(kpts) == 0: continue
462
+ print(kpts)
463
+ kpts = np.asarray(kpts)
464
+ point = kpts[:, 0:2]
465
+ texts = [f"{t:3.2f}" for t in kpts[:, 2]]
466
+ image = image_utils.draw_texts(image, points=point, texts=texts, fontScale=0.8, thickness=2)
467
+ return image
468
+
469
+
470
+ def show_target_image(image, boxes, labels, points, keypoints=[], color=(), thickness=2):
471
+ # image = image_utils.draw_image_bboxes_text(image, boxes, labels, color=(255, 0, 0),
448
472
  # thickness=2, fontScale=1.2, drawType="chinese")
449
- # image = image_utils.draw_landmark(image, points, color=(0, 255, 0))
450
- # image = image_utils.draw_key_point_in_image(image, points)
451
473
  image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
474
+ image = draw_keypoints_image(image, boxes, keypoints, thickness=thickness, vis_id=True)
452
475
  image_utils.cv_show_image("det", image)
453
476
  return image
454
477
 
@@ -456,20 +479,9 @@ def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
456
479
  if __name__ == "__main__":
457
480
  from pybaseutils.converter import build_labelme
458
481
 
459
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v1/json"
460
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v7/json"
461
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/使用钳形电流表测量低压线路电流/dataset-v1/json"
462
- # anno_dir = [anno_dir, anno_dir]
463
- names = ['A相电线', 'B相电线', 'C相电线', 'N相电线']
464
-
465
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v11/json"
466
- # anno_dir = "/home/PKing/Downloads/labelme/json"
467
- # anno_dir = "/media/PKing/新加卷1/SDK/base-utils/data/coco/json"
468
- # # names = ["car", "dog", "person", "unique"]
469
- # names = ["BG", "unique"]
470
- # # names = ["car", "dog", "person"]
471
- # # names = ["dog", "car,person"]
472
- # # names = {"car": 1, "person": 0}
482
+ anno_dir = "/home/PKing/Downloads/sample/images"
483
+ anno_dir = "/home/PKing/Downloads/冲击试验/video-ok/NVR_ch2_main_20241121093213_20241121100115/images"
484
+ # anno_dir = "/home/PKing/Downloads/冲击试验/sample/images"
473
485
  names = None
474
486
  dataset = LabelMeDatasets(filename=None,
475
487
  data_root=None,
@@ -482,9 +494,9 @@ if __name__ == "__main__":
482
494
  print("have num:{}".format(len(dataset)))
483
495
  for i in range(len(dataset)):
484
496
  print(i) # i=20
485
- data = dataset.__getitem__(12)
486
- image, points, bboxes, labels = data["image"], data["points"], data["boxes"], data["labels"]
497
+ data = dataset.__getitem__(i)
498
+ image, points, boxes, labels = data["image"], data["points"], data["boxes"], data["labels"]
487
499
  h, w = image.shape[:2]
488
500
  image_file = data["image_file"]
489
501
  anno_file = os.path.join("masker", "{}.json".format(os.path.basename(image_file).split(".")[0]))
490
- show_target_image(image, bboxes, labels, points)
502
+ show_target_image(image, boxes, labels, points, keypoints=data["keypoints"])
@@ -24,7 +24,7 @@ from datetime import datetime
24
24
  from tqdm import tqdm
25
25
 
26
26
  IMG_POSTFIX = ['*.jpg', '*.jpeg', '*.png', '*.tif', "*.JPG", "*.bmp"]
27
- VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv"]
27
+ VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv", "*.dav"]
28
28
  AUDIO_POSTFIX = ['*.mp3', '*.wav']
29
29
 
30
30
 
@@ -363,6 +363,18 @@ def get_basename(file_list):
363
363
  return dest_list
364
364
 
365
365
 
366
+ def change_postfix(file: str, postfix: str):
367
+ """
368
+ 修改后缀名称
369
+ :param file:
370
+ :param postfix:
371
+ :return:
372
+ """
373
+ src_pos = file.split(".")[-1]
374
+ file = file[:-len(f".{src_pos}")] + postfix
375
+ return file
376
+
377
+
366
378
  def randam_select_images(image_list, nums, shuffle=True):
367
379
  """
368
380
  randam select nums images
@@ -1336,7 +1336,7 @@ def show_landmark(title, image, landmarks, vis_id=False, delay=0):
1336
1336
  return image
1337
1337
 
1338
1338
 
1339
- def draw_points_text(image, points, texts=None, color=(255, 0, 0), thickness=-1, fontScale=-1.0, drawType="simple"):
1339
+ def draw_points_texts(image, points, texts=None, color=(255, 0, 0), thickness=-1, fontScale=-1.0, drawType="simple"):
1340
1340
  """
1341
1341
  :param image:
1342
1342
  :param points:
@@ -1358,7 +1358,7 @@ def draw_points_text(image, points, texts=None, color=(255, 0, 0), thickness=-1,
1358
1358
  return image
1359
1359
 
1360
1360
 
1361
- draw_points_texts = draw_points_text
1361
+ draw_points_text = draw_points_texts
1362
1362
 
1363
1363
 
1364
1364
  def draw_texts(image, points, texts, color=(255, 0, 0), fontScale=-1.0, thickness=-1, drawType="simple"):
@@ -91,7 +91,7 @@ def plot_bar(x, y, xlabel="X", ylabel="Y", title="bar", bin_width=1, vis=True, s
91
91
  font = get_font_type(size=14)
92
92
  # 准备数据
93
93
  # 用 Matplotlib 画条形图
94
- plt.bar(x=x, height=y, width=bin_width, align="center", yerr=0.000001, fontproperties=font)
94
+ plt.bar(x=x, height=y, width=bin_width, align="center", yerr=0.000001,)
95
95
  # plt.xlim([0.0, 1.0])
96
96
  # plt.ylim([0.0, 1.05])
97
97
  # 设置横纵坐标的名称以及对应字体格式
@@ -3,7 +3,8 @@
3
3
  @Author : PKing
4
4
  @E-mail :
5
5
  @Date : 2024-07-25 08:33:57
6
- @Brief : https://imgaug.readthedocs.io/en/latest/index.html
6
+ @Brief : https://github.com/aleju/imgaug-doc
7
+ https://imgaug.readthedocs.io/en/latest/index.html
7
8
  """
8
9
  import os
9
10
  import cv2
@@ -14,8 +15,11 @@ from imgaug import augmenters as iaa
14
15
  from imgaug import parameters as iap
15
16
  import imgaug.augmenters.meta as meta
16
17
  from pybaseutils import file_utils, image_utils
18
+ import imgaug as ia
17
19
  from imgaug.augmentables.segmaps import SegmentationMapsOnImage
18
20
  from imgaug.augmentables.kps import KeypointsOnImage
21
+ from imgaug.augmentables import Keypoint, KeypointsOnImage
22
+ from imgaug.augmentables.polys import Polygon, PolygonsOnImage
19
23
 
20
24
 
21
25
  class Compose(object):
@@ -70,8 +74,8 @@ class Transpose(meta.Augmenter):
70
74
 
71
75
  class Normalize(meta.Augmenter):
72
76
  def __init__(self, mean, std, p=1, seed=None, name=None, random_state="deprecated", deterministic="deprecated"):
73
- self.mean = mean
74
- self.std = std
77
+ self.mean = np.array(mean, dtype=np.float32)
78
+ self.std = np.array(std, dtype=np.float32)
75
79
  super(Normalize, self).__init__(
76
80
  seed=seed, name=name,
77
81
  random_state=random_state, deterministic=deterministic)
@@ -91,6 +95,40 @@ class Normalize(meta.Augmenter):
91
95
  return image
92
96
 
93
97
 
98
+ def decode_polygons(polygons: List, shape) -> ia.PolygonsOnImage:
99
+ """
100
+ :param polygons: [(N,2),(N,2),....,]
101
+ :param shape:
102
+ :return:
103
+ """
104
+ polygons = [Polygon(c) for c in polygons]
105
+ P = ia.PolygonsOnImage(polygons, shape=shape)
106
+ return P
107
+
108
+
109
+ def encode_polygons(polygons: ia.PolygonsOnImage) -> List:
110
+ polygons = [item.coords for item in polygons.polygons]
111
+ return polygons
112
+
113
+
114
+ aug_seq = iaa.Sequential([
115
+ iaa.MotionBlur(k=15), # 运动模糊
116
+ iaa.Clouds(), # 云雾
117
+ iaa.imgcorruptlike.Fog(severity=1), # 多雾/霜
118
+ iaa.imgcorruptlike.Snow(severity=2), # 下雨、大雪
119
+ iaa.Rain(drop_size=(0.10, 0.20), speed=(0.2, 0.3)), # 雨
120
+ iaa.Rain(speed=(0.3, 0.5)), # 雨
121
+ iaa.Snowflakes(flake_size=(0.6, 0.7), speed=(0.02, 0.03)), # 雪点
122
+ iaa.imgcorruptlike.Spatter(severity=2), # 溅 123水滴、45泥
123
+ iaa.contrast.LinearContrast((0.5, 2.0), per_channel=0.5), # 对比度变为原来的一半或者二倍
124
+ iaa.imgcorruptlike.Brightness(severity=2), # 亮度增加
125
+ iaa.imgcorruptlike.Saturate(severity=3), # 色彩饱和度
126
+ iaa.FastSnowyLandscape(lightness_threshold=(100, 255), lightness_multiplier=(1.5, 2.0)),
127
+ # 雪地亮度阈值是从 uniform(100, 255)(每张图像)和来自 uniform(1.5, 2.0)(每张图像)的乘数采样的。
128
+ iaa.Cartoon(blur_ksize=3, segmentation_size=1.0, saturation=2.0, edge_prevalence=1.0), # 卡通
129
+ ])
130
+
131
+
94
132
  def augment_example(input_size=(224, 224)):
95
133
  transforms = [
96
134
  iaa.Resize({"width": int(input_size[0] * 1.2), "height": "keep-aspect-ratio"}),
@@ -158,7 +196,7 @@ def demo_for_keypoint():
158
196
  image = image_utils.read_image("../../data/test.png")
159
197
  mask = image_utils.read_image("../../data/mask.png")
160
198
  mask = image_utils.get_image_mask(mask)
161
- contours = image_utils.find_mask_contours(mask) # [(N,2)]
199
+ contours = image_utils.find_mask_contours(mask)
162
200
  auimg, contours = augment(image=image, keypoints=contours)
163
201
  h, w = auimg.shape[:2]
164
202
  mask = image_utils.draw_mask_contours(contours, size=(w, h))
@@ -167,7 +205,27 @@ def demo_for_keypoint():
167
205
  image_utils.cv_show_image("image", result)
168
206
 
169
207
 
208
+ def demo_for_polygons():
209
+ transforms = augment_example()
210
+ augment = Compose(transforms=transforms, fixed=True)
211
+ for i in range(100):
212
+ image = image_utils.read_image("../../data/test.png")
213
+ mask = image_utils.read_image("../../data/mask.png")
214
+ mask = image_utils.get_image_mask(mask)
215
+ contours = image_utils.find_mask_contours(mask)
216
+ contours = contours * 3
217
+ polygons = decode_polygons(contours, image.shape)
218
+ auimg, polygons = augment(image=image, polygons=polygons)
219
+ contours = encode_polygons(polygons)
220
+ h, w = auimg.shape[:2]
221
+ mask = image_utils.draw_mask_contours(contours, size=(w, h))
222
+ color_image = image_utils.draw_image_contours(auimg, contours)
223
+ result = image_utils.image_hstack([image, color_image, mask])
224
+ image_utils.cv_show_image("image", result)
225
+
226
+
170
227
  if __name__ == "__main__":
171
228
  # demo_for_image()
172
229
  # demo_for_segment()
173
- demo_for_keypoint()
230
+ # demo_for_keypoint()
231
+ demo_for_polygons()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.2.4
3
+ Version: 2.2.7
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -26,7 +26,7 @@ if __name__ == "__main__":
26
26
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-test/json"
27
27
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v25/json"
28
28
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-negetive/dataset-v02/json"
29
- anno_dir = "/home/PKing/Downloads/aije-negetive/dataset-v01/sample"
29
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v31/images"
30
30
  names = None
31
31
  # names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
32
32
  dataset = parser_labelme.LabelMeDatasets(filename=None,
@@ -0,0 +1,23 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-12-31 11:37:30
6
+ @Brief : https://blog.csdn.net/qdPython/article/details/121381363
7
+ """
8
+ import os
9
+ import cv2
10
+ import random
11
+ import types
12
+ import torch
13
+ import numpy as np
14
+ from typing import Callable
15
+ from pybaseutils import image_utils, file_utils, text_utils, plot_utils
16
+ from pybaseutils.cvutils import video_utils
17
+ import cv2
18
+ import re
19
+
20
+ if __name__ == '__main__':
21
+ x = [1, 2, 3]
22
+ y = [1, 2, 3]
23
+ plot_utils.plot_bar(x, y, xlabel="X轴", ylabel="Y轴", title="bar", bin_width=1, vis=True, save=True)
@@ -1,26 +0,0 @@
1
- # -*-coding: utf-8 -*-
2
- """
3
- @Author : PKing
4
- @E-mail : 390737991@qq.com
5
- @Date : 2022-12-16 15:39:50
6
- @Brief :
7
- """
8
-
9
- import numpy as np
10
- from pybaseutils import plot_utils, image_utils, file_utils
11
-
12
-
13
- def plot_sigmoid(x=[], step=0.1, inv=False):
14
- x = np.arange(start=x[0], stop=x[1], step=step)
15
- y = 1 / (1 + np.exp(-x))
16
- return x, y
17
-
18
-
19
- if __name__ == '__main__':
20
- file = "/home/dm/nasdata/dataset/csdn/plate/CCPD-master/CRNN-Plate-Recognition/data/province_count.json"
21
- data: dict = file_utils.read_json_data(file)
22
- y = list(data.values())
23
- x = list(data.keys())
24
- # x = [str(i) for i in range(len(y))]
25
- # plot_utils.plot_bar_text(x, y)
26
- plot_utils.plot_bar(x, y,xlabel="好X", ylabel="Y",)
File without changes
File without changes