pybaseutils 2.0.4__tar.gz → 2.0.6__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 (247) hide show
  1. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/PKG-INFO +1 -1
  2. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_cvat2labelme.py +15 -7
  4. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2yolo.py +3 -3
  5. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_yolo2voc.py +1 -1
  6. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_labelme.py +7 -4
  7. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/image_utils.py +24 -1
  8. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/plot_roc.py +58 -5
  9. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/PKG-INFO +1 -1
  10. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/SOURCES.txt +5 -1
  11. pybaseutils-2.0.6/test_py/aije/action_dataset.py +86 -0
  12. pybaseutils-2.0.6/test_py/aije/convert_cvat2labelme.py +21 -0
  13. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_labelme_crop.py +3 -2
  14. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_voc_crop.py +7 -7
  15. pybaseutils-2.0.6/test_py/aije/video_convertor.py +27 -0
  16. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_cvat2labelme.py +5 -3
  17. pybaseutils-2.0.6/test_py/converter/get_pair_data.py +57 -0
  18. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo1.py +18 -8
  19. pybaseutils-2.0.6/test_py/demo2.py +29 -0
  20. pybaseutils-2.0.6/test_py/demo_kpts.py +68 -0
  21. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_lableme_vis.py +12 -3
  22. pybaseutils-2.0.4/test_py/aije/video_demo.py +0 -47
  23. pybaseutils-2.0.4/test_py/demo2.py +0 -25
  24. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/LICENCE +0 -0
  25. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/README.md +0 -0
  26. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/__init__.py +0 -0
  27. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/audio_utils.py +0 -0
  28. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/pyaudio_utils.py +0 -0
  29. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/vad_utils.py +0 -0
  30. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/base64_utils.py +0 -0
  31. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/batch_utils.py +0 -0
  32. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/build_utils/__init__.py +0 -0
  33. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/build_utils/cython_utils.py +0 -0
  34. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  35. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/__init__.py +0 -0
  36. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/kmean.py +0 -0
  37. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/maxmin_distance.py +0 -0
  38. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/similarity.py +0 -0
  39. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/color_utils.py +0 -0
  40. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/config_utils.py +0 -0
  41. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/__init__.py +0 -0
  42. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_coco.py +0 -0
  43. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_cvat.py +0 -0
  44. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_labelme.py +0 -0
  45. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_voc.py +0 -0
  46. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/concat_coco.py +0 -0
  47. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  48. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_coco2voc.py +0 -0
  49. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  50. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  51. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  52. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  53. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2coco.py +0 -0
  54. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  55. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2voc.py +0 -0
  56. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/coords_utils.py +0 -0
  57. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/__init__.py +0 -0
  58. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/corner_utils.py +0 -0
  59. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/monitor.py +0 -0
  60. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/mouse_utils.py +0 -0
  61. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/video_utils.py +0 -0
  62. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/__init__.py +0 -0
  63. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/base_coco.py +0 -0
  64. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/base_dataset.py +0 -0
  65. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  66. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  67. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  68. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_voc.py +0 -0
  69. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_yolo.py +0 -0
  70. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  71. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/file_utils.py +0 -0
  72. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/QueueTable.py +0 -0
  73. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/__init__.py +0 -0
  74. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/demo.py +0 -0
  75. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/kalman_filter.py +0 -0
  76. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/mean_filter.py +0 -0
  77. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/motion_filter.py +0 -0
  78. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/pose_filter.py +0 -0
  79. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/font_style/__init__.py +0 -0
  80. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/font_utils.py +0 -0
  81. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/geometry_tools.py +0 -0
  82. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/heatmap_utils.py +0 -0
  83. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/json_utils.py +0 -0
  84. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/log.py +0 -0
  85. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/logger.py +0 -0
  86. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/__init__.py +0 -0
  87. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/accuracy.py +0 -0
  88. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/average_meter.py +0 -0
  89. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/class_report.py +0 -0
  90. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/plot_pr.py +0 -0
  91. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/numpy_utils.py +0 -0
  92. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pandas_utils.py +0 -0
  93. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/plot_utils.py +0 -0
  94. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/__init__.py +0 -0
  95. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/bones_utils.py +0 -0
  96. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/human_pose.py +0 -0
  97. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/pose_utils.py +0 -0
  98. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pycpp/__init__.py +0 -0
  99. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pycpp/demo.py +0 -0
  100. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pycpp/main.py +0 -0
  101. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/server/__init__.py +0 -0
  102. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/server/apm_server.py +0 -0
  103. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/setup_config.py +0 -0
  104. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/singleton_utils.py +0 -0
  105. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/thread_utils.py +0 -0
  106. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/time_utils.py +0 -0
  107. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracemalloc_utils.py +0 -0
  108. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracemalloc_utils2.py +0 -0
  109. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/QueueTable.py +0 -0
  110. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/__init__.py +0 -0
  111. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/demo.py +0 -0
  112. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/kalman_filter.py +0 -0
  113. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/mean_filter.py +0 -0
  114. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/motion_filter.py +0 -0
  115. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/pose_filter.py +0 -0
  116. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/__init__.py +0 -0
  117. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/affine_transform.py +0 -0
  118. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/augment_utils.py +0 -0
  119. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/face_alignment.py +0 -0
  120. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/transform_utils.py +0 -0
  121. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/word_utils.py +0 -0
  122. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/worker.py +0 -0
  123. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/yaml_utils.py +0 -0
  124. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/dependency_links.txt +0 -0
  125. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/not-zip-safe +0 -0
  126. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/top_level.txt +0 -0
  127. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/setup.cfg +0 -0
  128. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/setup.py +0 -0
  129. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/WebCrawler/__init__.py +0 -0
  130. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/WebCrawler/search_image.py +0 -0
  131. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  132. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/__init__.py +0 -0
  133. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/__init__.py +0 -0
  134. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/build_cython.py +0 -0
  135. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/build_pyarmor.py +0 -0
  136. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/build_service.py +0 -0
  137. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/convert_labelme2coco.py +0 -0
  138. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/convert_labelme2voc.py +0 -0
  139. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/copy_move.py +0 -0
  140. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_video_aije.py +0 -0
  141. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_voc_vis.py +0 -0
  142. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/__init__.py +0 -0
  143. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/demo.py +0 -0
  144. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/main.py +0 -0
  145. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/main_read.py +0 -0
  146. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/segment.py +0 -0
  147. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  148. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/speechbrain_demo.py +0 -0
  149. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/captcha/__init__.py +0 -0
  150. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/captcha/demo.py +0 -0
  151. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/class_attribute.py +0 -0
  152. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/class_names.py +0 -0
  153. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/AffectNet.py +0 -0
  154. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/AsianMovie.py +0 -0
  155. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/BITVehicle2voc.py +0 -0
  156. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/BSTLD2voc.py +0 -0
  157. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/CCPD.py +0 -0
  158. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/CCPD2voc.py +0 -0
  159. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/FL3D_dataset.py +0 -0
  160. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/FreiHAND2coco.py +0 -0
  161. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/MTFL2voc.py +0 -0
  162. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/TT100K.py +0 -0
  163. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/WaterMeters1.py +0 -0
  164. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/WaterMeters2.py +0 -0
  165. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/__init__.py +0 -0
  166. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/concat_coco.py +0 -0
  167. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_coco2voc.py +0 -0
  168. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_gesture2hand.py +0 -0
  169. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_labelme2coco.py +0 -0
  170. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_labelme2cvat.py +0 -0
  171. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_labelme2voc.py +0 -0
  172. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_voc2labelme.py +0 -0
  173. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/fatigue_driving.py +0 -0
  174. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/fdd_dataset.py +0 -0
  175. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/handpose2coco.py +0 -0
  176. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/insects_for_aichallenger.py +0 -0
  177. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/tt100k_utils.py +0 -0
  178. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/ua_detrac2voc.py +0 -0
  179. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/ucf101_dataset.py +0 -0
  180. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/voc_sbd2labelme.py +0 -0
  181. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/__init__.py +0 -0
  182. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/build_cython.py +0 -0
  183. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/build_pyarmor.py +0 -0
  184. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/cryptography_demo.py +0 -0
  185. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/fun_sum.py +0 -0
  186. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/main.py +0 -0
  187. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/model_des_enctypt.py +0 -0
  188. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/model_enctypt.py +0 -0
  189. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo3.py +0 -0
  190. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_async_await1.py +0 -0
  191. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_async_await2.py +0 -0
  192. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_coco_vis.py +0 -0
  193. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_copy_files.py +0 -0
  194. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_copy_files_for_voc.py +0 -0
  195. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_ffmpy.py +0 -0
  196. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_for_pair_file.py +0 -0
  197. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_for_polygon.py +0 -0
  198. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_for_trt.py +0 -0
  199. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_get_file_list.py +0 -0
  200. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_gif.py +0 -0
  201. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_gif_video.py +0 -0
  202. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_image_crop.py +0 -0
  203. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_labelme.py +0 -0
  204. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_labelme_crop.py +0 -0
  205. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_metrics.py +0 -0
  206. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_mouse.py +0 -0
  207. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_nii.py +0 -0
  208. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_pandas.py +0 -0
  209. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_plot.py +0 -0
  210. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_rename.py +0 -0
  211. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_standard_image .py +0 -0
  212. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_standard_video .py +0 -0
  213. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_taichi.py +0 -0
  214. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_video.py +0 -0
  215. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_voc_crop.py +0 -0
  216. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_voc_vis.py +0 -0
  217. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_word_similar.py +0 -0
  218. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_worker1.py +0 -0
  219. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_worker2.py +0 -0
  220. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/__init__.py +0 -0
  221. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/demo.py +0 -0
  222. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/detect_face_person.py +0 -0
  223. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/predet_labelme.py +0 -0
  224. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/__init__.py +0 -0
  225. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/demo.py +0 -0
  226. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/text_matching.py +0 -0
  227. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/text_utils.py +0 -0
  228. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/flask_demo/__init__.py +0 -0
  229. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/flask_demo/func.py +0 -0
  230. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/flask_demo/server.py +0 -0
  231. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/__init__.py +0 -0
  232. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/demo_correction_v1.py +0 -0
  233. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/demo_correction_v2.py +0 -0
  234. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/demo_correction_v3.py +0 -0
  235. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/kafka_worker.py +0 -0
  236. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/men_tracemalloc.py +0 -0
  237. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/performance.py +0 -0
  238. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/pose/__init__.py +0 -0
  239. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/pose/human_pose.py +0 -0
  240. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/__init__.py +0 -0
  241. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/base.py +0 -0
  242. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/component.py +0 -0
  243. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/main.py +0 -0
  244. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/register.py +0 -0
  245. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/test_fr/__init__.py +0 -0
  246. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/test_fr/demo11.py +0 -0
  247. {pybaseutils-2.0.4 → pybaseutils-2.0.6}/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.0.4
3
+ Version: 2.0.6
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.0.4'
8
+ __version__ = '2.0.6'
@@ -38,17 +38,21 @@ def parser_annotations(xml_file):
38
38
  return filename, annos, width, height
39
39
 
40
40
 
41
- def convert_cvat2labelme(anno_dir, image_dir="", thickness=1, fontScale=1.0, vis=False):
41
+ def convert_cvat2labelme(anno_dir, image_dir="", out_dir="", thickness=1, fontScale=1.0, vis=False):
42
42
  """
43
43
  将CVAT标注格式(LabelMe 3.0)转换labelme通用格式
44
- :param anno_dir: 标注文件目录,输出json文件与anno_dir同目录
44
+ :param anno_dir: 标注文件目录,默认输出json文件与anno_dir同目录
45
45
  :param image_dir: 图片文件目录
46
+ :param out_dir: 输出labelme *.json文件目录
46
47
  :param vis:
47
48
  :return:
48
49
  """
50
+ if not out_dir: out_dir = os.path.join(os.path.dirname(anno_dir), "json")
49
51
  xml_list = file_utils.get_files_lists(anno_dir, postfix=["*.xml"])
50
52
  for xml_file in tqdm(xml_list):
51
53
  image_name, annos, w, h = parser_annotations(xml_file)
54
+ image_id = os.path.basename(xml_file).split(".")[0]
55
+ image_name = "{}.{}".format(image_id, image_name.split(".")[1])
52
56
  points = [an['points'] for an in annos if len(an['points']) > 0]
53
57
  labels = [an['label'] for an in annos if an['label']]
54
58
  if len(points) == 0 or len(labels) == 0:
@@ -59,14 +63,18 @@ def convert_cvat2labelme(anno_dir, image_dir="", thickness=1, fontScale=1.0, vis
59
63
  image = cv2.imread(image_file)
60
64
  h, w = image.shape[:2]
61
65
  if vis:
62
- image = image_utils.draw_image_contours(image, points, texts=labels, thickness=thickness, fontScale=fontScale)
66
+ print(image_file, "labels:{}".format(labels))
67
+ image = image_utils.draw_image_contours(image, points, texts=labels, thickness=thickness,
68
+ fontScale=fontScale)
63
69
  image_utils.cv_show_image("det", image)
64
70
  image_id = image_name.split(".")[0]
65
- json_file = os.path.join(anno_dir, f"{image_id}.json")
71
+ json_file = os.path.join(out_dir, f"{image_id}.json")
66
72
  build_labelme.maker_labelme(json_file, points, labels, image_name, image_size=[w, h], image_bs64=None)
67
73
 
68
74
 
69
75
  if __name__ == "__main__":
70
- image_dir = "/home/PKing/Downloads/default"
71
- anno_dir = image_dir
72
- convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, vis=False)
76
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/aije-action-train-v02/JPEGImages"
77
+ anno_dir = os.path.join(os.path.dirname(image_dir), "xml")
78
+ json_dir = os.path.join(os.path.dirname(image_dir), "json")
79
+ convert_cvat2labelme.convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, out_dir=json_dir,
80
+ thickness=1, fontScale=2.0, vis=True)
@@ -80,7 +80,7 @@ def convert_voc2yolo_file(filename, out_text_dir, out_image_dir=None, class_name
80
80
  format = "jpg"
81
81
  newname = "{}.{}".format(image_id, format)
82
82
  text_path = file_utils.create_dir(out_text_dir, None, "{}.txt".format(image_id))
83
- labels = np.asarray(labels).astype(np.int).reshape(-1)
83
+ labels = np.asarray(labels).astype(np.int32).reshape(-1)
84
84
  contents = create_yolo_dets(bboxes, labels, width=w, height=h)
85
85
  file_utils.write_data(text_path, contents)
86
86
  if out_image_dir:
@@ -131,7 +131,7 @@ def convert_voc2yolo(data_root, out_text_dir, out_image_dir=None, class_name=Non
131
131
  format = "jpg"
132
132
  newname = "{}.{}".format(image_id, format)
133
133
  text_path = file_utils.create_dir(out_text_dir, None, "{}.txt".format(image_id))
134
- labels = np.asarray(labels).astype(np.int).reshape(-1)
134
+ labels = np.asarray(labels).astype(np.int32).reshape(-1)
135
135
  contents = create_yolo_dets(bboxes, labels, width=w, height=h)
136
136
  file_utils.write_data(text_path, contents, split=" ")
137
137
  if out_image_dir:
@@ -183,7 +183,7 @@ def convert_voc2yolo_segment(data_root, out_text_dir, out_image_dir=None, class_
183
183
  format = "jpg"
184
184
  newname = "{}.{}".format(image_id, format)
185
185
  text_path = file_utils.create_dir(out_text_dir, None, "{}.txt".format(image_id))
186
- labels = np.asarray(labels).astype(np.int).reshape(-1)
186
+ labels = np.asarray(labels).astype(np.int32).reshape(-1)
187
187
  contents = create_yolo_segs(bboxes, labels, width=w, height=h)
188
188
  file_utils.write_data(text_path, contents, split=" ")
189
189
  if out_image_dir:
@@ -50,7 +50,7 @@ def convert_yolo2voc(filename, out_xml_dir=None, out_image_dir=None, class_name=
50
50
  format = "jpg"
51
51
  newname = "{}.{}".format(image_id, format)
52
52
  xml_path = file_utils.create_dir(out_xml_dir, None, "{}.xml".format(image_id))
53
- labels = np.asarray(labels).astype(np.int).reshape(-1)
53
+ labels = np.asarray(labels).astype(np.int32).reshape(-1)
54
54
  objects = build_voc.create_objects(bboxes, labels, keypoints=None, class_name=class_name)
55
55
  build_voc.write_voc_xml_objects(newname, image_shape, objects, xml_path)
56
56
  if out_image_dir:
@@ -107,8 +107,7 @@ class LabelMeDataset(Dataset):
107
107
  """
108
108
  print("Please wait, it's in checking")
109
109
  dst_ids = []
110
- # image_ids = image_ids[:100]
111
- # image_ids = image_ids[100:]
110
+ class_name = []
112
111
  for image_id in tqdm(image_ids):
113
112
  image_file, anno_file, image_id = self.get_image_anno_file(image_id)
114
113
  if not os.path.exists(anno_file):
@@ -122,6 +121,10 @@ class LabelMeDataset(Dataset):
122
121
  if len(label) == 0:
123
122
  continue
124
123
  dst_ids.append(image_id)
124
+ class_name += label
125
+ if self.class_name is None:
126
+ class_name = sorted(list(set(class_name)))
127
+ self.class_name, self.class_dict = self.parser_classes(class_name)
125
128
  print("have nums image:{},legal image:{}".format(len(image_ids), len(dst_ids)))
126
129
  return dst_ids
127
130
 
@@ -381,12 +384,12 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
381
384
  return bboxes, labels, points, groups
382
385
 
383
386
 
384
- def show_target_image(image, bboxes, labels, points, color=()):
387
+ def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
385
388
  # image = image_utils.draw_image_bboxes_text(image, bboxes, labels, color=(255, 0, 0),
386
389
  # thickness=2, fontScale=1.2, drawType="chinese")
387
390
  # image = image_utils.draw_landmark(image, points, color=(0, 255, 0))
388
391
  # image = image_utils.draw_key_point_in_image(image, points)
389
- image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=1)
392
+ image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
390
393
  image_utils.cv_show_image("det", image)
391
394
 
392
395
 
@@ -2452,7 +2452,7 @@ def draw_image_contours(image, contours: List[np.ndarray], texts=[], color=(), a
2452
2452
  """
2453
2453
  for i in range(0, len(contours)):
2454
2454
  c = color if color else color_table[i + 1]
2455
- t = texts[i] if texts else ""
2455
+ t = str(texts[i]) if texts else ""
2456
2456
  p = np.asarray(contours[i], dtype=np.int32)
2457
2457
  b = (min(p[:, 0]), min(p[:, 1]), max(p[:, 0]), max(p[:, 1]))
2458
2458
  if len(p.shape) == 2: p = [p]
@@ -2482,6 +2482,29 @@ def draw_mask_contours(contours: List[np.ndarray], size, value=255):
2482
2482
  return mask
2483
2483
 
2484
2484
 
2485
+ def contours_interpolation(contours, n=1000):
2486
+ """
2487
+ 对图像轮廓或者对直线进行线性差值,来源于ultralytics/utils/ops.py
2488
+ 轮廓插值,线性插值,直线插值
2489
+ Inputs a list of contours (n,2) and returns a list of contours (n,2) up-sampled to n points each.
2490
+
2491
+ Args:
2492
+ contours (list): a list of (n,2) arrays, where n is the number of points in the segment.
2493
+ n (int): number of points to resample the segment to. Defaults to 1000
2494
+
2495
+ Returns:
2496
+ contours (list): the resampled contours.
2497
+ """
2498
+ for i, s in enumerate(contours):
2499
+ s = np.concatenate((s, s[0:1, :]), axis=0)
2500
+ x = np.linspace(0, len(s) - 1, n)
2501
+ xp = np.arange(len(s))
2502
+ contours[i] = (
2503
+ np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)], dtype=np.float32).reshape(2, -1).T
2504
+ ) # segment xy
2505
+ return contours
2506
+
2507
+
2485
2508
  def get_mask_boundrect_cv(mask, binarize=False, shift=0):
2486
2509
  """
2487
2510
  获得mask的最大外接矩形框(其速度比get_mask_boundrect快2倍左右)
@@ -39,9 +39,9 @@ def plot_roc_curve(true_labels, pred_scores, vis=True):
39
39
  # 绘制ROC曲线
40
40
  if vis:
41
41
  plt_roc_curve([fpr], [tpr], [roc_auc], names=[""])
42
- print("FPR :{}".format(fpr))
43
- print("TPR :{}".format(tpr))
44
- print("Threshold :{}".format(threshold))
42
+ # print("FPR :{}".format(fpr))
43
+ # print("TPR :{}".format(tpr))
44
+ # print("Threshold :{}".format(threshold))
45
45
  print("AUC(ROC) :{}".format(roc_auc))
46
46
  print("best_threshold:{} ".format(threshold[optimal_index]))
47
47
  return fpr, tpr, roc_auc, threshold, optimal_index
@@ -134,8 +134,61 @@ def custom_roc_curve(y_true, y_score):
134
134
  plt.show()
135
135
 
136
136
 
137
+ def get_best_accuracy(true_labels, pred_scores, threshold=(0, 1.0, 0.05), vis=False):
138
+ """
139
+ 计算最佳准确率和阈值
140
+ :param true_labels:
141
+ :param pred_scores:
142
+ :param vis:
143
+ :return: best_acc, best_th
144
+ """
145
+ true_labels, pred_scores = np.asarray(true_labels), np.asarray(pred_scores)
146
+ threshold = np.arange(threshold[0], threshold[1], threshold[2])
147
+ acc_list = []
148
+ for th in threshold:
149
+ pred_labels = np.asarray(pred_scores > th, dtype=np.int32)
150
+ acc = metrics.accuracy_score(y_true=true_labels, y_pred=pred_labels)
151
+ acc_list.append(acc)
152
+ index = np.argmax(acc_list)
153
+ best_th = threshold[index]
154
+ best_acc = acc_list[index]
155
+ if vis:
156
+ print("best threshold :{}".format(best_th))
157
+ print("best Accuracy :{}".format(best_acc))
158
+ plt_curve(x=threshold, y=acc_list, xlabel="threshold", ylabel="Accuracy",
159
+ line=f"Acc={best_acc:1.3f}", title="", grid=True)
160
+ return best_acc, best_th
161
+
162
+
163
+ def plt_curve(x, y, line="", xlabel="", ylabel="", title="", grid=True):
164
+ """
165
+ 绘制PR-threshold曲线
166
+ :param x: Precision
167
+ :param recall: Recall
168
+ :param y
169
+ :param title:曲线名称
170
+ :return:
171
+ """
172
+ lw = 2
173
+ plt.figure(figsize=(10, 10))
174
+ colors = ["b", "r", "c", "m", "g", "y", "k", "w"]
175
+ plt.plot(x, y, color=colors[0], lw=lw, label=line)
176
+ plt.xlim([0.0, 1.05])
177
+ plt.ylim([0.0, 1.05])
178
+ # 设置横纵坐标的名称以及对应字体格式
179
+ font = {'weight': 'normal', 'size': 20}
180
+ plt.xlabel(xlabel, font)
181
+ plt.ylabel(ylabel, font)
182
+ plt.title(title, font)
183
+ plt.legend(loc="lower right") # "upper right"
184
+ # plt.legend(loc="upper right")#"upper right"
185
+ plt.grid(grid) # 显示网格;
186
+ plt.show()
187
+
188
+
137
189
  if __name__ == "__main__":
138
190
  true_labels = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] # 真实类别
139
- pred_scores = [0.1, 0.2, 0.7, 0.3, 0.4, 0.5, 0.2, 0.7, 0.8, 0.9] # 预测类别分数
191
+ pred_scores = [0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] # 预测类别分数
140
192
  # pred_scores = [0.11, 0.21, 0.71, 0.31, 0.41, 0.51, 0.21, 0.71, 0.81, 0.91] # 预测类别分数
141
- plot_roc_curve(true_labels, pred_scores)
193
+ # plot_roc_curve(true_labels, pred_scores)
194
+ print(get_best_accuracy(true_labels, pred_scores, vis=True))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -130,6 +130,7 @@ test_py/demo_get_file_list.py
130
130
  test_py/demo_gif.py
131
131
  test_py/demo_gif_video.py
132
132
  test_py/demo_image_crop.py
133
+ test_py/demo_kpts.py
133
134
  test_py/demo_labelme.py
134
135
  test_py/demo_labelme_crop.py
135
136
  test_py/demo_lableme_vis.py
@@ -155,9 +156,11 @@ test_py/WebCrawler/__init__.py
155
156
  test_py/WebCrawler/search_image.py
156
157
  test_py/WebCrawler/search_image_for_baidu.py
157
158
  test_py/aije/__init__.py
159
+ test_py/aije/action_dataset.py
158
160
  test_py/aije/build_cython.py
159
161
  test_py/aije/build_pyarmor.py
160
162
  test_py/aije/build_service.py
163
+ test_py/aije/convert_cvat2labelme.py
161
164
  test_py/aije/convert_labelme2coco.py
162
165
  test_py/aije/convert_labelme2voc.py
163
166
  test_py/aije/copy_move.py
@@ -165,7 +168,7 @@ test_py/aije/demo_labelme_crop.py
165
168
  test_py/aije/demo_video_aije.py
166
169
  test_py/aije/demo_voc_crop.py
167
170
  test_py/aije/demo_voc_vis.py
168
- test_py/aije/video_demo.py
171
+ test_py/aije/video_convertor.py
169
172
  test_py/audio/__init__.py
170
173
  test_py/audio/demo.py
171
174
  test_py/audio/main.py
@@ -198,6 +201,7 @@ test_py/converter/convert_labelme2voc.py
198
201
  test_py/converter/convert_voc2labelme.py
199
202
  test_py/converter/fatigue_driving.py
200
203
  test_py/converter/fdd_dataset.py
204
+ test_py/converter/get_pair_data.py
201
205
  test_py/converter/handpose2coco.py
202
206
  test_py/converter/insects_for_aichallenger.py
203
207
  test_py/converter/tt100k_utils.py
@@ -0,0 +1,86 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-11-29 18:11:47
6
+ @Brief :
7
+ """
8
+ import os
9
+ import cv2
10
+ from tqdm import tqdm
11
+ from pybaseutils.dataloader import parser_labelme
12
+ from pybaseutils import image_utils, file_utils
13
+
14
+
15
+ def save_object_crops(data_info, out_dir, class_name=None, scale=[], square=False,
16
+ padding=False, min_size=20 * 20 * 3, flag="", vis=False):
17
+ """
18
+ 对VOC的数据目标进行裁剪
19
+ :param image:
20
+ :param out_dir:
21
+ :param bboxes:
22
+ :param labels:
23
+ :param image_id:
24
+ :param class_name:
25
+ :param scale:
26
+ :param square:
27
+ :param padding:
28
+ :param flag:
29
+ :param vis:
30
+ :return:
31
+ """
32
+ image, points, boxes, labels = data_info["image"], data_info["points"], data_info["boxes"], data_info["labels"]
33
+ if len(boxes) == 0: return
34
+ image_file = data_info["image_file"]
35
+ h, w = image.shape[:2]
36
+ image_id = os.path.basename(image_file).split(".")[0]
37
+ if square:
38
+ boxes = image_utils.get_square_boxes(boxes, use_max=True, baseline=-1)
39
+ if scale:
40
+ boxes = image_utils.extend_xyxy(boxes, scale=scale)
41
+ if padding:
42
+ crops = image_utils.get_bboxes_crop_padding(image, boxes)
43
+ else:
44
+ crops = image_utils.get_bboxes_crop(image, boxes)
45
+ if vis:
46
+ m = image_utils.draw_image_bboxes_labels(image.copy(), boxes, labels, class_name=class_name,
47
+ thickness=2, fontScale=0.8, drawType="chinese")
48
+ image_utils.cv_show_image("image", m, use_rgb=False, delay=0)
49
+ for i, img in enumerate(crops):
50
+ if img.size < min_size: continue
51
+ name = class_name[int(labels[i])] if class_name else labels[i]
52
+ if out_dir:
53
+ file_name = "{}_{:0=4d}_{}.jpg".format(image_id, i, flag) if flag else "{}_{:0=4d}.jpg".format(image_id, i)
54
+ img_file = file_utils.create_dir(out_dir, name, file_name)
55
+ cv2.imwrite(img_file, img)
56
+ if vis: image_utils.cv_show_image("crop", img, use_rgb=False, delay=0)
57
+
58
+
59
+ if __name__ == "__main__":
60
+ """
61
+ 对VOC的数据目标进行裁剪
62
+ 室内:['主杆', '从此进出标示牌', '其他鞋', '吊物绳', '在此工作标示牌', '垫子', '安全带', '安全帽', '安全绳',
63
+ '导线头', '尖嘴钳', '工具袋', '手', '扳手', '抹布', '未穿工作服','柱式绝缘子', '止步高压危险标示牌',
64
+ '绝缘手套', '绝缘鞋', '脚扣', '螺丝', '身穿工作服', '遮拦杆', '铁架', '铝扎线']
65
+ 室外: []
66
+ """
67
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-det/aije-action-train-v01/json"
68
+ class_name = None # 室内
69
+ out_dir = os.path.join(os.path.dirname(anno_dir), "crops")
70
+ dataset = parser_labelme.LabelMeDatasets(filename=None,
71
+ data_root=None,
72
+ anno_dir=anno_dir,
73
+ image_dir=None,
74
+ class_name=class_name,
75
+ check=False,
76
+ phase="val",
77
+ shuffle=False)
78
+ print("have num:{}".format(len(dataset)))
79
+ class_name = dataset.class_name
80
+ scale = [2.0, 2.0]
81
+ flag = str(scale[0]).replace(".", "p")
82
+ flag = None
83
+ # scale = None
84
+ for i in tqdm(range(len(dataset))):
85
+ data_info = dataset.__getitem__(i)
86
+ save_object_crops(data_info, out_dir, class_name=class_name, scale=scale, flag=flag, vis=False)
@@ -0,0 +1,21 @@
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 os
9
+ import numpy as np
10
+ import cv2
11
+ from tqdm import tqdm
12
+ from pybaseutils.dataloader import parser_voc
13
+ from pybaseutils.converter import build_voc, build_labelme, convert_cvat2labelme
14
+ from pybaseutils import file_utils, image_utils, json_utils
15
+
16
+ if __name__ == "__main__":
17
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/aije-action-train-v01/JPEGImages"
18
+ anno_dir = os.path.join(os.path.dirname(image_dir), "xml")
19
+ json_dir = os.path.join(os.path.dirname(image_dir), "json")
20
+ convert_cvat2labelme.convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, out_dir=json_dir,
21
+ thickness=1, fontScale=2.0, vis=False)
@@ -67,10 +67,11 @@ if __name__ == "__main__":
67
67
  # anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v9/json"
68
68
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v0/json"
69
69
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det-fix/dataset-v12/json"
70
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-det/aije-action-train-v20/json"
70
71
  # anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v10/json"
71
72
  # anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-person-coco/json"
72
- class_name = ['手', '绝缘手套', '手穿绝缘手套', '棉纱手套', '手穿棉纱手套']
73
- # class_name = None # 室内
73
+ # class_name = ['手', '绝缘手套', '手穿绝缘手套', '棉纱手套', '手穿棉纱手套']
74
+ class_name = None # 室内
74
75
  out_dir = os.path.join(os.path.dirname(anno_dir), "crops")
75
76
  dataset = parser_labelme.LabelMeDatasets(filename=None,
76
77
  data_root=None,
@@ -12,13 +12,13 @@ from pybaseutils.dataloader import parser_voc
12
12
  from pybaseutils import image_utils, file_utils
13
13
 
14
14
 
15
- def save_object_crops(image, out_dir, bboxes, labels, image_id, class_name=None,
15
+ def save_object_crops(image, out_dir, boxes, labels, image_id, class_name=None,
16
16
  scale=[], square=False, padding=False, flag="", vis=False):
17
17
  """
18
18
  对VOC的数据目标进行裁剪
19
19
  :param image:
20
20
  :param out_dir:
21
- :param bboxes:
21
+ :param boxes:
22
22
  :param labels:
23
23
  :param image_id:
24
24
  :param class_name:
@@ -31,15 +31,15 @@ def save_object_crops(image, out_dir, bboxes, labels, image_id, class_name=None,
31
31
  """
32
32
  image_id = image_id.split(".")[0]
33
33
  if square:
34
- bboxes = image_utils.get_square_boxes(bboxes, use_max=True, baseline=-1)
34
+ boxes = image_utils.get_square_boxes(boxes, use_max=True, baseline=-1)
35
35
  if scale:
36
- bboxes = image_utils.extend_xyxy(bboxes, scale=scale)
36
+ boxes = image_utils.extend_xyxy(boxes, scale=scale)
37
37
  if padding:
38
- crops = image_utils.get_bboxes_crop_padding(image, bboxes)
38
+ crops = image_utils.get_bboxes_crop_padding(image, boxes)
39
39
  else:
40
- crops = image_utils.get_bboxes_crop(image, bboxes)
40
+ crops = image_utils.get_bboxes_crop(image, boxes)
41
41
  if vis:
42
- m = image_utils.draw_image_bboxes_labels(image.copy(), bboxes, labels, class_name=class_name,
42
+ m = image_utils.draw_image_bboxes_labels(image.copy(), boxes, labels, class_name=class_name,
43
43
  thickness=2, fontScale=0.8, drawType="custom")
44
44
  image_utils.cv_show_image("image", m, use_rgb=False, delay=0)
45
45
  for i, img in enumerate(crops):
@@ -0,0 +1,27 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2023-08-25 17:42:55
6
+ @Brief :
7
+ """
8
+ import os
9
+ import cv2
10
+ import numpy as np
11
+ from tqdm import tqdm
12
+ from pybaseutils.cvutils import video_utils
13
+ from pybaseutils import image_utils, file_utils
14
+
15
+
16
+ def video_converter(inp_dir, out_dir):
17
+ files = file_utils.get_files_list(inp_dir, postfix=["*.dav"])
18
+ for video_file in tqdm(files):
19
+ save_video = file_utils.create_dir(out_dir, None, os.path.basename(video_file))
20
+ save_video = save_video.replace(".dav", ".mp4")
21
+ video_utils.video2video(video_file, save_video, interval=1, vis=False)
22
+
23
+
24
+ if __name__ == '__main__':
25
+ inp_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/江门四维数据/江门四维2024-08-06/NVR录像文件"
26
+ out_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/江门四维数据/江门四维2024-08-06/MP4录像文件"
27
+ video_converter(inp_dir, out_dir)
@@ -14,6 +14,8 @@ from pybaseutils.converter import build_voc, build_labelme, convert_cvat2labelme
14
14
  from pybaseutils import file_utils, image_utils, json_utils
15
15
 
16
16
  if __name__ == "__main__":
17
- image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v20/JPEGImages"
18
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v20/xml"
19
- convert_cvat2labelme.convert_cvat2labelme(anno_dir=anno_dir, image_dir=image_dir, thickness=2, fontScale=1.2,vis=True)
17
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/aije-action-train-v02/JPEGImages"
18
+ anno_dir = os.path.join(os.path.dirname(image_dir), "xml")
19
+ json_dir = os.path.join(os.path.dirname(image_dir), "json")
20
+ convert_cvat2labelme.convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, out_dir=json_dir,
21
+ thickness=1, fontScale=2.0, vis=True)
@@ -0,0 +1,57 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-08-24 11:05:52
6
+ @Brief :
7
+ """
8
+ import os
9
+ import numpy as np
10
+ import itertools
11
+ from pybaseutils import file_utils, image_utils
12
+
13
+
14
+ def get_combinations_pair_data(image_dir, pair_num=0):
15
+ """
16
+ 获得图片对数据
17
+ :param image_dir:
18
+ :param pair_num:
19
+ :return:
20
+ """
21
+ max_nums = int(pair_num / 2)
22
+ image_list = file_utils.get_files_lists(image_dir)
23
+ image_list = file_utils.get_sub_list(image_list, dirname=image_dir)
24
+ nums = len(image_list)
25
+ print("have {} images and {} combinations".format(nums, nums * (nums - 1) / 2))
26
+ pairs = []
27
+ for paths in itertools.combinations(image_list, 2):
28
+ file1, file2 = paths
29
+ label1 = file1.split(os.sep)[0]
30
+ label2 = file2.split(os.sep)[0]
31
+ if label1 == label2:
32
+ pairs.append([file1, file2, 1])
33
+ else:
34
+ pairs.append([file1, file2, 0])
35
+ pairs = np.asarray(pairs)
36
+ pairs = pairs[np.lexsort(pairs.T)]
37
+ pair0 = pairs[pairs[:, -1] == "0", :]
38
+ pair1 = pairs[pairs[:, -1] == "1", :]
39
+ nums1 = len(pair1)
40
+ nums0 = len(pair0)
41
+ if pair_num < 0: max_nums = nums1
42
+ if max_nums > nums1:
43
+ raise Exception("pair_nums({}) must be less than num_pair_issame_1({})".format(max_nums, nums1))
44
+ index_0 = np.random.permutation(nums0)[:max_nums] # 打乱后的行号
45
+ index_1 = np.random.permutation(nums1)[:max_nums] # 打乱后的行号
46
+ pair0 = pair0[index_0, :] # 获取打乱后的训练数据
47
+ pair1 = pair1[index_1, :] # 获取打乱后的训练数据
48
+ pairs = np.concatenate([pair0, pair1], axis=0).tolist()
49
+ print("have {} pairs,pair0 nums:{},pair1 nums:{}".format(len(pairs), len(pair0), len(pair1)))
50
+ return pairs
51
+
52
+
53
+ if __name__ == '__main__':
54
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm/test-v2/images"
55
+ pairs_file = os.path.join(image_dir, "pairs.txt")
56
+ pairs = get_combinations_pair_data(image_dir, pair_num=10000)
57
+ file_utils.write_data(pairs_file, pairs)
@@ -9,6 +9,7 @@ import os
9
9
  import cv2
10
10
  import numpy as np
11
11
  import random
12
+ import json
12
13
  from typing import Dict
13
14
  from tqdm import tqdm
14
15
  from pybaseutils import image_utils, file_utils, json_utils, base64_utils, time_utils
@@ -32,14 +33,23 @@ class MultiViewer(object):
32
33
  return "exit"
33
34
 
34
35
 
35
- def demo():
36
- key = "multiview"
37
- frame_info = {"multiview": ["ABCD"]}
38
- with MultiViewer(frame_info=frame_info, key=key) as v:
39
- pass
40
- print("data")
41
- return "Z"
36
+ class Promote():
37
+ def __init__(self, promote):
38
+ self.promote = file_utils.read_data(promote, split=None)
39
+ print("promote:{}".format(self.promote))
40
+
41
+ def __len__(self):
42
+ return len(self.promote)
43
+
44
+ def __getitem__(self, index):
45
+ data: str = self.promote[random.randint(0, len(self.promote) - 1)]
46
+ data = data.format("ddd")
47
+ return data
42
48
 
43
49
 
44
50
  if __name__ == '__main__':
45
- print(demo())
51
+ file = "/home/PKing/nasdata/tmp/tmp/Natural/图片描述.json"
52
+ data = json_utils.read_json_data(file)
53
+ for i in range(len(data)):
54
+ data[i]["result"] = json.loads(data[i]["result"])
55
+ print(data)
@@ -0,0 +1,29 @@
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 cv2
9
+ import random
10
+ import types
11
+ import numpy as np
12
+ from typing import Callable
13
+ from pybaseutils import image_utils, file_utils
14
+ from pybaseutils.cvutils import video_utils
15
+ import cv2
16
+
17
+ if __name__ == '__main__':
18
+ from pybaseutils.converter import convert_voc2yolo
19
+
20
+ # 定义类别数
21
+ class_name = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
22
+ "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
23
+ "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
24
+ # VOC数据目录
25
+ data_root = "/path/to/VOC2007"
26
+ # 保存输出yolo格式数据目录
27
+ out_text_dir = os.path.join(data_root, "labels")
28
+ # 开始转换,vis=True进行可视化
29
+ convert_voc2yolo.convert_voc2yolo(data_root, out_text_dir, class_name=class_name, vis=True)