pybaseutils 2.0.4__tar.gz → 2.0.5__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 (245) hide show
  1. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/PKG-INFO +1 -1
  2. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_cvat2labelme.py +7 -4
  4. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_voc2yolo.py +3 -3
  5. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_yolo2voc.py +1 -1
  6. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/image_utils.py +23 -0
  7. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/metrics/plot_roc.py +57 -5
  8. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils.egg-info/PKG-INFO +1 -1
  9. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils.egg-info/SOURCES.txt +3 -1
  10. pybaseutils-2.0.5/test_py/aije/action_dataset.py +86 -0
  11. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/demo_voc_crop.py +7 -7
  12. pybaseutils-2.0.5/test_py/aije/video_convertor.py +27 -0
  13. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_cvat2labelme.py +4 -3
  14. pybaseutils-2.0.5/test_py/converter/get_pair_data.py +58 -0
  15. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo1.py +17 -8
  16. pybaseutils-2.0.5/test_py/demo2.py +29 -0
  17. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_lableme_vis.py +1 -1
  18. pybaseutils-2.0.4/test_py/aije/video_demo.py +0 -47
  19. pybaseutils-2.0.4/test_py/demo2.py +0 -25
  20. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/LICENCE +0 -0
  21. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/README.md +0 -0
  22. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/audio/__init__.py +0 -0
  23. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/audio/audio_utils.py +0 -0
  24. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/audio/pyaudio_utils.py +0 -0
  25. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/audio/vad_utils.py +0 -0
  26. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/base64_utils.py +0 -0
  27. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/batch_utils.py +0 -0
  28. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/build_utils/__init__.py +0 -0
  29. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/build_utils/cython_utils.py +0 -0
  30. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  31. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cluster/__init__.py +0 -0
  32. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cluster/kmean.py +0 -0
  33. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cluster/maxmin_distance.py +0 -0
  34. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cluster/similarity.py +0 -0
  35. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/color_utils.py +0 -0
  36. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/config_utils.py +0 -0
  37. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/__init__.py +0 -0
  38. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/build_coco.py +0 -0
  39. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/build_cvat.py +0 -0
  40. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/build_labelme.py +0 -0
  41. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/build_voc.py +0 -0
  42. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/concat_coco.py +0 -0
  43. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  44. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_coco2voc.py +0 -0
  45. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  46. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  47. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  48. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  49. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_voc2coco.py +0 -0
  50. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  51. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/converter/convert_voc2voc.py +0 -0
  52. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/coords_utils.py +0 -0
  53. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cvutils/__init__.py +0 -0
  54. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cvutils/corner_utils.py +0 -0
  55. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cvutils/monitor.py +0 -0
  56. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cvutils/mouse_utils.py +0 -0
  57. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/cvutils/video_utils.py +0 -0
  58. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/__init__.py +0 -0
  59. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/base_coco.py +0 -0
  60. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/base_dataset.py +0 -0
  61. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  62. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  63. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  64. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/parser_labelme.py +0 -0
  65. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/parser_voc.py +0 -0
  66. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/parser_yolo.py +0 -0
  67. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  68. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/file_utils.py +0 -0
  69. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/QueueTable.py +0 -0
  70. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/__init__.py +0 -0
  71. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/demo.py +0 -0
  72. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/kalman_filter.py +0 -0
  73. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/mean_filter.py +0 -0
  74. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/motion_filter.py +0 -0
  75. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/filter/pose_filter.py +0 -0
  76. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/font_style/__init__.py +0 -0
  77. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/font_utils.py +0 -0
  78. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/geometry_tools.py +0 -0
  79. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/heatmap_utils.py +0 -0
  80. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/json_utils.py +0 -0
  81. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/log.py +0 -0
  82. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/logger.py +0 -0
  83. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/metrics/__init__.py +0 -0
  84. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/metrics/accuracy.py +0 -0
  85. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/metrics/average_meter.py +0 -0
  86. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/metrics/class_report.py +0 -0
  87. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/metrics/plot_pr.py +0 -0
  88. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/numpy_utils.py +0 -0
  89. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pandas_utils.py +0 -0
  90. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/plot_utils.py +0 -0
  91. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pose/__init__.py +0 -0
  92. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pose/bones_utils.py +0 -0
  93. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pose/human_pose.py +0 -0
  94. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pose/pose_utils.py +0 -0
  95. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pycpp/__init__.py +0 -0
  96. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pycpp/demo.py +0 -0
  97. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/pycpp/main.py +0 -0
  98. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/server/__init__.py +0 -0
  99. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/server/apm_server.py +0 -0
  100. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/setup_config.py +0 -0
  101. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/singleton_utils.py +0 -0
  102. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/thread_utils.py +0 -0
  103. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/time_utils.py +0 -0
  104. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracemalloc_utils.py +0 -0
  105. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracemalloc_utils2.py +0 -0
  106. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/QueueTable.py +0 -0
  107. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/__init__.py +0 -0
  108. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/demo.py +0 -0
  109. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/kalman_filter.py +0 -0
  110. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/mean_filter.py +0 -0
  111. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/motion_filter.py +0 -0
  112. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/tracking/pose_filter.py +0 -0
  113. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/transforms/__init__.py +0 -0
  114. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/transforms/affine_transform.py +0 -0
  115. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/transforms/augment_utils.py +0 -0
  116. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/transforms/face_alignment.py +0 -0
  117. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/transforms/transform_utils.py +0 -0
  118. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/word_utils.py +0 -0
  119. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/worker.py +0 -0
  120. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils/yaml_utils.py +0 -0
  121. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils.egg-info/dependency_links.txt +0 -0
  122. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils.egg-info/not-zip-safe +0 -0
  123. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/pybaseutils.egg-info/top_level.txt +0 -0
  124. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/setup.cfg +0 -0
  125. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/setup.py +0 -0
  126. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/WebCrawler/__init__.py +0 -0
  127. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/WebCrawler/search_image.py +0 -0
  128. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  129. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/__init__.py +0 -0
  130. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/__init__.py +0 -0
  131. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/build_cython.py +0 -0
  132. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/build_pyarmor.py +0 -0
  133. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/build_service.py +0 -0
  134. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/convert_labelme2coco.py +0 -0
  135. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/convert_labelme2voc.py +0 -0
  136. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/copy_move.py +0 -0
  137. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/demo_labelme_crop.py +0 -0
  138. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/demo_video_aije.py +0 -0
  139. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/aije/demo_voc_vis.py +0 -0
  140. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/__init__.py +0 -0
  141. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/demo.py +0 -0
  142. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/main.py +0 -0
  143. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/main_read.py +0 -0
  144. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/segment.py +0 -0
  145. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  146. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/audio/speechbrain_demo.py +0 -0
  147. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/captcha/__init__.py +0 -0
  148. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/captcha/demo.py +0 -0
  149. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/class_attribute.py +0 -0
  150. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/class_names.py +0 -0
  151. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/AffectNet.py +0 -0
  152. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/AsianMovie.py +0 -0
  153. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/BITVehicle2voc.py +0 -0
  154. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/BSTLD2voc.py +0 -0
  155. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/CCPD.py +0 -0
  156. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/CCPD2voc.py +0 -0
  157. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/FL3D_dataset.py +0 -0
  158. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/FreiHAND2coco.py +0 -0
  159. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/MTFL2voc.py +0 -0
  160. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/TT100K.py +0 -0
  161. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/WaterMeters1.py +0 -0
  162. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/WaterMeters2.py +0 -0
  163. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/__init__.py +0 -0
  164. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/concat_coco.py +0 -0
  165. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_coco2voc.py +0 -0
  166. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_gesture2hand.py +0 -0
  167. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_labelme2coco.py +0 -0
  168. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_labelme2cvat.py +0 -0
  169. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_labelme2voc.py +0 -0
  170. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/convert_voc2labelme.py +0 -0
  171. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/fatigue_driving.py +0 -0
  172. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/fdd_dataset.py +0 -0
  173. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/handpose2coco.py +0 -0
  174. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/insects_for_aichallenger.py +0 -0
  175. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/tt100k_utils.py +0 -0
  176. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/ua_detrac2voc.py +0 -0
  177. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/ucf101_dataset.py +0 -0
  178. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/converter/voc_sbd2labelme.py +0 -0
  179. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/__init__.py +0 -0
  180. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/build_cython.py +0 -0
  181. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/build_pyarmor.py +0 -0
  182. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/cryptography_demo.py +0 -0
  183. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/fun_sum.py +0 -0
  184. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/main.py +0 -0
  185. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/model_des_enctypt.py +0 -0
  186. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/cython_build/model_enctypt.py +0 -0
  187. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo3.py +0 -0
  188. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_async_await1.py +0 -0
  189. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_async_await2.py +0 -0
  190. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_coco_vis.py +0 -0
  191. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_copy_files.py +0 -0
  192. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_copy_files_for_voc.py +0 -0
  193. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_ffmpy.py +0 -0
  194. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_for_pair_file.py +0 -0
  195. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_for_polygon.py +0 -0
  196. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_for_trt.py +0 -0
  197. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_get_file_list.py +0 -0
  198. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_gif.py +0 -0
  199. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_gif_video.py +0 -0
  200. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_image_crop.py +0 -0
  201. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_labelme.py +0 -0
  202. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_labelme_crop.py +0 -0
  203. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_metrics.py +0 -0
  204. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_mouse.py +0 -0
  205. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_nii.py +0 -0
  206. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_pandas.py +0 -0
  207. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_plot.py +0 -0
  208. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_rename.py +0 -0
  209. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_standard_image .py +0 -0
  210. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_standard_video .py +0 -0
  211. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_taichi.py +0 -0
  212. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_video.py +0 -0
  213. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_voc_crop.py +0 -0
  214. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_voc_vis.py +0 -0
  215. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_word_similar.py +0 -0
  216. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_worker1.py +0 -0
  217. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/demo_worker2.py +0 -0
  218. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/detector/__init__.py +0 -0
  219. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/detector/demo.py +0 -0
  220. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/detector/detect_face_person.py +0 -0
  221. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/detector/predet_labelme.py +0 -0
  222. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/edit_distance/__init__.py +0 -0
  223. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/edit_distance/demo.py +0 -0
  224. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/edit_distance/text_matching.py +0 -0
  225. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/edit_distance/text_utils.py +0 -0
  226. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/flask_demo/__init__.py +0 -0
  227. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/flask_demo/func.py +0 -0
  228. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/flask_demo/server.py +0 -0
  229. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/image_correction/__init__.py +0 -0
  230. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/image_correction/demo_correction_v1.py +0 -0
  231. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/image_correction/demo_correction_v2.py +0 -0
  232. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/image_correction/demo_correction_v3.py +0 -0
  233. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/kafka_worker.py +0 -0
  234. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/men_tracemalloc.py +0 -0
  235. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/performance.py +0 -0
  236. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/pose/__init__.py +0 -0
  237. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/pose/human_pose.py +0 -0
  238. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/registry/__init__.py +0 -0
  239. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/registry/base.py +0 -0
  240. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/registry/component.py +0 -0
  241. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/registry/main.py +0 -0
  242. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/registry/register.py +0 -0
  243. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/test_fr/__init__.py +0 -0
  244. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/test_py/test_fr/demo11.py +0 -0
  245. {pybaseutils-2.0.4 → pybaseutils-2.0.5}/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.5
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.5'
@@ -38,14 +38,15 @@ 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
46
  :param vis:
47
47
  :return:
48
48
  """
49
+ if not out_dir: out_dir = os.path.join(os.path.dirname(anno_dir), "json")
49
50
  xml_list = file_utils.get_files_lists(anno_dir, postfix=["*.xml"])
50
51
  for xml_file in tqdm(xml_list):
51
52
  image_name, annos, w, h = parser_annotations(xml_file)
@@ -56,13 +57,15 @@ def convert_cvat2labelme(anno_dir, image_dir="", thickness=1, fontScale=1.0, vis
56
57
  continue
57
58
  if image_dir or vis:
58
59
  image_file = os.path.join(image_dir, image_name)
60
+ print(image_file, "labels:{}".format(labels))
59
61
  image = cv2.imread(image_file)
60
62
  h, w = image.shape[:2]
61
63
  if vis:
62
- image = image_utils.draw_image_contours(image, points, texts=labels, thickness=thickness, fontScale=fontScale)
64
+ image = image_utils.draw_image_contours(image, points, texts=labels, thickness=thickness,
65
+ fontScale=fontScale)
63
66
  image_utils.cv_show_image("det", image)
64
67
  image_id = image_name.split(".")[0]
65
- json_file = os.path.join(anno_dir, f"{image_id}.json")
68
+ json_file = os.path.join(out_dir, f"{image_id}.json")
66
69
  build_labelme.maker_labelme(json_file, points, labels, image_name, image_size=[w, h], image_bs64=None)
67
70
 
68
71
 
@@ -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:
@@ -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,60 @@ 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, xtitle="threshold", ytitle="Accuracy", title="", grid=True)
159
+ return best_acc, best_th
160
+
161
+
162
+ def plt_curve(X, Y, xtitle="", ytitle="", title="", grid=True):
163
+ """
164
+ 绘制PR-threshold曲线
165
+ :param X: Precision
166
+ :param recall: Recall
167
+ :param Y
168
+ :param title:曲线名称
169
+ :return:
170
+ """
171
+ lw = 2
172
+ plt.figure(figsize=(10, 10))
173
+ colors = ["b", "r", "c", "m", "g", "y", "k", "w"]
174
+ plt.plot(X, Y, color=colors[0], lw=lw, label=ytitle)
175
+ plt.xlim([0.0, 1.05])
176
+ plt.ylim([0.0, 1.05])
177
+ # 设置横纵坐标的名称以及对应字体格式
178
+ font = {'weight': 'normal', 'size': 20}
179
+ plt.xlabel(xtitle, font)
180
+ plt.ylabel('', font)
181
+ plt.title(title, font)
182
+ plt.legend(loc="lower right") # "upper right"
183
+ # plt.legend(loc="upper right")#"upper right"
184
+ plt.grid(grid) # 显示网格;
185
+ plt.show()
186
+
187
+
137
188
  if __name__ == "__main__":
138
189
  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] # 预测类别分数
190
+ pred_scores = [0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] # 预测类别分数
140
191
  # 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)
192
+ # plot_roc_curve(true_labels, pred_scores)
193
+ 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.5
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -155,6 +155,7 @@ test_py/WebCrawler/__init__.py
155
155
  test_py/WebCrawler/search_image.py
156
156
  test_py/WebCrawler/search_image_for_baidu.py
157
157
  test_py/aije/__init__.py
158
+ test_py/aije/action_dataset.py
158
159
  test_py/aije/build_cython.py
159
160
  test_py/aije/build_pyarmor.py
160
161
  test_py/aije/build_service.py
@@ -165,7 +166,7 @@ test_py/aije/demo_labelme_crop.py
165
166
  test_py/aije/demo_video_aije.py
166
167
  test_py/aije/demo_voc_crop.py
167
168
  test_py/aije/demo_voc_vis.py
168
- test_py/aije/video_demo.py
169
+ test_py/aije/video_convertor.py
169
170
  test_py/audio/__init__.py
170
171
  test_py/audio/demo.py
171
172
  test_py/audio/main.py
@@ -198,6 +199,7 @@ test_py/converter/convert_labelme2voc.py
198
199
  test_py/converter/convert_voc2labelme.py
199
200
  test_py/converter/fatigue_driving.py
200
201
  test_py/converter/fdd_dataset.py
202
+ test_py/converter/get_pair_data.py
201
203
  test_py/converter/handpose2coco.py
202
204
  test_py/converter/insects_for_aichallenger.py
203
205
  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)
@@ -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,7 @@ 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-det/aije-action-train-v20/JPEGImages"
18
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-det/aije-action-train-v20/xml"
19
+ convert_cvat2labelme.convert_cvat2labelme(anno_dir=anno_dir, image_dir=image_dir,
20
+ thickness=2, fontScale=1.2, vis=False)
@@ -0,0 +1,58 @@
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
+ :param image_dir:
17
+ :param pair_num:
18
+ :return:
19
+ """
20
+ max_nums = int(pair_num / 2)
21
+ image_list = file_utils.get_files_lists(image_dir)
22
+ image_list = file_utils.get_sub_list(image_list, dirname=image_dir)
23
+ nums = len(image_list)
24
+ print("have {} images and {} combinations".format(nums, nums * (nums - 1) / 2))
25
+ pairs = []
26
+ for paths in itertools.combinations(image_list, 2):
27
+ file1, file2 = paths
28
+ label1 = file1.split(os.sep)[0]
29
+ label2 = file2.split(os.sep)[0]
30
+ if label1 == label2:
31
+ pairs.append([file1, file2, 1])
32
+ else:
33
+ pairs.append([file1, file2, 0])
34
+ pairs = np.asarray(pairs)
35
+ pairs = pairs[np.lexsort(pairs.T)]
36
+ pair0 = pairs[pairs[:, -1] == "0", :]
37
+ pair1 = pairs[pairs[:, -1] == "1", :]
38
+ nums1 = len(pair1)
39
+ nums0 = len(pair0)
40
+ if pair_num < 0: max_nums = nums1
41
+ if max_nums > nums1:
42
+ raise Exception("pair_nums({}) must be less than num_pair_issame_1({})".format(max_nums, nums1))
43
+ index_0 = np.random.permutation(nums0)[:max_nums] # 打乱后的行号
44
+ index_1 = np.random.permutation(nums1)[:max_nums] # 打乱后的行号
45
+ pair0 = pair0[index_0, :] # 获取打乱后的训练数据
46
+ pair1 = pair1[index_1, :] # 获取打乱后的训练数据
47
+ pairs = np.concatenate([pair0, pair1], axis=0).tolist()
48
+ print("pair0 nums:{}".format(len(pair0)))
49
+ print("pair1 nums:{}".format(len(pair1)))
50
+ print("have {} pairs".format(len(pairs)))
51
+ return pairs
52
+
53
+
54
+ if __name__ == '__main__':
55
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm/test/images"
56
+ pairs_file = os.path.join(image_dir,"pairs.txt")
57
+ pairs = get_combinations_pair_data(image_dir, pair_num=10000)
58
+ file_utils.write_data(pairs_file, pairs)
@@ -32,14 +32,23 @@ class MultiViewer(object):
32
32
  return "exit"
33
33
 
34
34
 
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"
35
+ class Promote():
36
+ def __init__(self, promote):
37
+ self.promote = file_utils.read_data(promote, split=None)
38
+ print("promote:{}".format(self.promote))
39
+
40
+ def __len__(self):
41
+ return len(self.promote)
42
+
43
+ def __getitem__(self, index):
44
+ data: str = self.promote[random.randint(0, len(self.promote)-1)]
45
+ data = data.format("ddd")
46
+ return data
42
47
 
43
48
 
44
49
  if __name__ == '__main__':
45
- print(demo())
50
+ file = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm/promote.txt"
51
+ p = Promote(promote=file)
52
+ for index in range(len(p)):
53
+ data = p.__getitem__(index)
54
+ 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)
@@ -20,7 +20,7 @@ if __name__ == "__main__":
20
20
  # anno_dir = "/home/PKing/nasdata/tmp/tmp/WaterMeter/水表数据集/Water-Meter-Det3/train/json"
21
21
  # names = ["BG", "unique"]
22
22
  anno_dir = "/home/PKing/nasdata/tmp/tmp/WaterMeter/水表数据集/Water-Meter-Det1/val/json"
23
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v01/json"
23
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v20/json"
24
24
  names = None
25
25
  dataset = parser_labelme.LabelMeDatasets(filename=None,
26
26
  data_root=None,
@@ -1,47 +0,0 @@
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 import image_utils, file_utils
13
-
14
-
15
- def rename_image_file(video_file, image_dir, filename, output, prefix="", vis=True):
16
- video_cap = image_utils.get_video_capture(video_file)
17
- width, height, num_frames, fps = image_utils.get_video_info(video_cap)
18
- file_list = file_utils.read_data(filename, split=None)
19
- file_utils.create_dir(output)
20
- for i, file in tqdm(enumerate(file_list)):
21
- image_file = os.path.join(image_dir, file)
22
- image_id = os.path.basename(file).split(".")[0]
23
- count = int(image_id.split("_")[-1])
24
- # 设置抽帧的位置
25
- video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
26
- isSuccess, frame = video_cap.read()
27
- if isSuccess and os.path.exists(image_file):
28
- srcfile = os.path.join(output, f"{image_id}_1x.jpg")
29
- outfile = os.path.join(output, f"{image_id}_6x.jpg")
30
- image = cv2.imread(image_file)
31
- cv2.imwrite(outfile, frame)
32
- file_utils.copy_file(image_file, srcfile)
33
- diff = np.asarray(image, dtype=np.float32) - np.asarray(frame, dtype=np.float32)
34
- diff = np.asarray(np.abs(diff), dtype=np.uint8)
35
- # com = image_utils.image_vstack([image, frame, diff])
36
- com = image_utils.image_hstack([image, frame])
37
- # image_utils.cv_show_image("image-frame", com, delay=0)
38
-
39
-
40
- if __name__ == '__main__':
41
- image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-det-dataset/video-compress/JPEGImages"
42
- filename = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-det-dataset/video-compress/camera3.txt"
43
- # video_file = "/home/PKing/nasdata/dataset-dmai/AIJE/POC/南方电网视频/我的文件/室内/平视-3号位.mp4"
44
- video_file = "/home/PKing/nasdata/dataset-dmai/AIJE/岗评项目数据/东莞视频/室内/20231027_第二场"
45
- output = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-det-dataset/video-compress/compress/camera3"
46
-
47
- rename_image_file(video_file, image_dir, filename, output)
@@ -1,25 +0,0 @@
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
- video_file = "/home/PKing/Downloads/kunkun_cut.mp4"
19
- saves_file = "/home/PKing/Downloads/kunkun_res.mp4"
20
- video_cap = video_utils.video_iterator(video_file, saves_file, start=4, end=10)
21
- for data_info in video_cap:
22
- frame = data_info["frame"]
23
- frame = cv2.resize(frame, dsize=(100, 100))
24
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
25
- data_info["frame"] = frame
File without changes
File without changes