pybaseutils 2.4.35__tar.gz → 2.5.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/PKG-INFO +1 -1
  2. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/audio_utils.py +8 -4
  4. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/color_utils.py +2 -3
  5. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_coco.py +10 -12
  6. pybaseutils-2.5.2/pybaseutils/converter/convert_labelme2coco.py +122 -0
  7. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme.py +40 -2
  8. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_voc.py +1 -1
  9. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dict_uils.py +1 -0
  10. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dict_utils.py +8 -5
  11. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/font_style/__init__.py +1 -0
  12. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/font_utils.py +24 -0
  13. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/geometry_tools.py +43 -0
  14. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/image_utils.py +133 -135
  15. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/bones_utils.py +8 -0
  16. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/thread_utils.py +31 -0
  17. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/PKG-INFO +1 -1
  18. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/SOURCES.txt +3 -0
  19. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/setup.py +1 -0
  20. pybaseutils-2.5.2/test_py/aije/demo_labelme_class_counts.py +20 -0
  21. pybaseutils-2.5.2/test_py/aije/demo_labelme_crop_aicq.py +138 -0
  22. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_aije.py +1 -1
  23. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_ailt.py +23 -17
  24. pybaseutils-2.5.2/test_py/converter/convert_labelme2coco.py +48 -0
  25. pybaseutils-2.5.2/test_py/demo1.py +10 -0
  26. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo2.py +6 -4
  27. pybaseutils-2.5.2/test_py/demo3.py +35 -0
  28. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo4.py +1 -1
  29. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_coco_vis.py +9 -8
  30. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_gif_video.py +4 -4
  31. pybaseutils-2.4.35/pybaseutils/converter/convert_labelme2coco.py +0 -195
  32. pybaseutils-2.4.35/test_py/demo1.py +0 -43
  33. pybaseutils-2.4.35/test_py/demo3.py +0 -21
  34. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/LICENCE +0 -0
  35. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/README.md +0 -0
  36. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/__init__.py +0 -0
  37. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/pyaudio_utils.py +0 -0
  38. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/vad_utils.py +0 -0
  39. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/__init__.py +0 -0
  40. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/dict_queue.py +0 -0
  41. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/list_queue.py +0 -0
  42. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/producer_consumer.py +0 -0
  43. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base64_utils.py +0 -0
  44. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/batch_utils.py +0 -0
  45. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/build_utils/__init__.py +0 -0
  46. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/build_utils/cython_utils.py +0 -0
  47. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  48. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/__init__.py +0 -0
  49. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/kmean.py +0 -0
  50. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/maxmin_distance.py +0 -0
  51. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/similarity.py +0 -0
  52. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/config_utils.py +0 -0
  53. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/__init__.py +0 -0
  54. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_cvat.py +0 -0
  55. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_labelme.py +0 -0
  56. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_voc.py +0 -0
  57. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/concat_coco.py +0 -0
  58. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  59. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_coco2voc.py +0 -0
  60. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  61. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  62. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
  63. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  64. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  65. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2coco.py +0 -0
  66. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  67. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2voc.py +0 -0
  68. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  69. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
  70. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  71. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/prelabelme.py +0 -0
  72. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/coords_utils.py +0 -0
  73. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/__init__.py +0 -0
  74. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/camera.py +0 -0
  75. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/corner_utils.py +0 -0
  76. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/frame_record.py +0 -0
  77. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/mouse_utils.py +0 -0
  78. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/nms_utils.py +0 -0
  79. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/video_utils.py +0 -0
  80. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/data_utils.py +0 -0
  81. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/__init__.py +0 -0
  82. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/balanced_classes.py +0 -0
  83. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/base_coco.py +0 -0
  84. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/base_dataset.py +0 -0
  85. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/data_resample.py +0 -0
  86. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  87. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  88. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  89. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  90. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_image_text.py +0 -0
  91. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
  92. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme_line.py +0 -0
  93. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_video_folder.py +0 -0
  94. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_video_text.py +0 -0
  95. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_yolo.py +0 -0
  96. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  97. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/file_utils.py +0 -0
  98. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/QueueTable.py +0 -0
  99. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/__init__.py +0 -0
  100. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/demo.py +0 -0
  101. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/kalman_filter.py +0 -0
  102. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/mean_filter.py +0 -0
  103. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/motion_filter.py +0 -0
  104. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/pose_filter.py +0 -0
  105. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/heatmap_utils.py +0 -0
  106. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/http_utils.py +0 -0
  107. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/json_utils.py +0 -0
  108. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/log.py +0 -0
  109. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/log_utils.py +0 -0
  110. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/media/__init__.py +0 -0
  111. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/media/ffmpeg_utils.py +0 -0
  112. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/__init__.py +0 -0
  113. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/accuracy.py +0 -0
  114. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/average_meter.py +0 -0
  115. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/class_report.py +0 -0
  116. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/plot_pr.py +0 -0
  117. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/plot_roc.py +0 -0
  118. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/nets_utils.py +0 -0
  119. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/numpy_utils.py +0 -0
  120. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pandas_utils.py +0 -0
  121. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/plot_utils.py +0 -0
  122. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/__init__.py +0 -0
  123. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/human_pose.py +0 -0
  124. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/pose_utils.py +0 -0
  125. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pycpp/__init__.py +0 -0
  126. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pycpp/demo.py +0 -0
  127. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pycpp/main.py +0 -0
  128. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/server/__init__.py +0 -0
  129. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/server/apm_server.py +0 -0
  130. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/setup_config.py +0 -0
  131. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/singleton_utils.py +0 -0
  132. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/text_utils.py +0 -0
  133. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/time_utils.py +0 -0
  134. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracemalloc_utils.py +0 -0
  135. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracemalloc_utils2.py +0 -0
  136. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/QueueTable.py +0 -0
  137. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/__init__.py +0 -0
  138. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/demo.py +0 -0
  139. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/kalman_filter.py +0 -0
  140. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/mean_filter.py +0 -0
  141. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/motion_filter.py +0 -0
  142. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/pose_filter.py +0 -0
  143. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/__init__.py +0 -0
  144. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/affine_transform.py +0 -0
  145. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/build_transform.py +0 -0
  146. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/face_alignment.py +0 -0
  147. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/imgaug_utils.py +0 -0
  148. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/transform_utils.py +0 -0
  149. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/__init__.py +0 -0
  150. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/app_gradio_image.py +0 -0
  151. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/app_stweb_image.py +0 -0
  152. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/app_webio_image.py +0 -0
  153. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/demo.py +0 -0
  154. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/word_utils.py +0 -0
  155. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/worker.py +0 -0
  156. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/yaml_utils.py +0 -0
  157. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/dependency_links.txt +0 -0
  158. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/not-zip-safe +0 -0
  159. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/top_level.txt +0 -0
  160. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/setup.cfg +0 -0
  161. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/Image_enhance/__init__.py +0 -0
  162. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/Image_enhance/dmeo01.py +0 -0
  163. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/__init__.py +0 -0
  164. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/download_pdf.py +0 -0
  165. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/search_baidu.py +0 -0
  166. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/search_biying.py +0 -0
  167. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/__init__.py +0 -0
  168. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/__init__.py +0 -0
  169. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/action_dataset.py +0 -0
  170. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/build_cython.py +0 -0
  171. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/build_pyarmor.py +0 -0
  172. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/build_service.py +0 -0
  173. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/convert_cvat2labelme.py +0 -0
  174. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/convert_labelme2coco.py +0 -0
  175. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/convert_labelme2voc.py +0 -0
  176. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/copy_move.py +0 -0
  177. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_shock.py +0 -0
  178. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_motion_blur.py +0 -0
  179. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_video_aije.py +0 -0
  180. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_voc_crop.py +0 -0
  181. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_voc_vis.py +0 -0
  182. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/get_pair_data.py +0 -0
  183. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/mask_image.py +0 -0
  184. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/video_convertor.py +0 -0
  185. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/__init__.py +0 -0
  186. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/demo.py +0 -0
  187. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/main.py +0 -0
  188. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/main_read.py +0 -0
  189. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/segment.py +0 -0
  190. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  191. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/speechbrain_demo.py +0 -0
  192. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio_demo1.py +0 -0
  193. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/camera/__init__.py +0 -0
  194. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/camera/demo.py +0 -0
  195. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/camera.py +0 -0
  196. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/captcha/__init__.py +0 -0
  197. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/captcha/demo.py +0 -0
  198. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/class_attribute.py +0 -0
  199. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/class_names.py +0 -0
  200. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/AffectNet.py +0 -0
  201. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/AsianMovie.py +0 -0
  202. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/BITVehicle2voc.py +0 -0
  203. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/BSTLD2voc.py +0 -0
  204. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/CCPD.py +0 -0
  205. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/CCPD2voc.py +0 -0
  206. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/FL3D_dataset.py +0 -0
  207. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/FreiHAND2coco.py +0 -0
  208. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/MTFL2voc.py +0 -0
  209. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/TT100K.py +0 -0
  210. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/WaterMeters1.py +0 -0
  211. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/WaterMeters2.py +0 -0
  212. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/__init__.py +0 -0
  213. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/car_accident.py +0 -0
  214. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/concat_coco.py +0 -0
  215. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_coco2voc.py +0 -0
  216. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_cvat2labelme.py +0 -0
  217. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_gesture2hand.py +0 -0
  218. /pybaseutils-2.4.35/test_py/converter/convert_labelme2coco.py → /pybaseutils-2.5.2/test_py/converter/convert_labelme2coco_pen.py +0 -0
  219. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2cvat.py +0 -0
  220. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2labelme.py +0 -0
  221. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2voc.py +0 -0
  222. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_voc2labelme.py +0 -0
  223. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_yolo2labelme.py +0 -0
  224. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/fall_dataset.py +0 -0
  225. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/fatigue_driving.py +0 -0
  226. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/fdd_dataset.py +0 -0
  227. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/get_pair_data.py +0 -0
  228. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/handpose2coco.py +0 -0
  229. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/insects_for_aichallenger.py +0 -0
  230. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/parking_rois_gopro.py +0 -0
  231. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/tt100k_utils.py +0 -0
  232. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/ua_detrac2voc.py +0 -0
  233. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/ucf101_dataset.py +0 -0
  234. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/voc_sbd2labelme.py +0 -0
  235. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/__init__.py +0 -0
  236. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/build_cython.py +0 -0
  237. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/build_pyarmor.py +0 -0
  238. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/cryptography_demo.py +0 -0
  239. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/fun_sum.py +0 -0
  240. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/main.py +0 -0
  241. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/model_des_enctypt.py +0 -0
  242. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/model_enctypt.py +0 -0
  243. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/date_dataset.py +0 -0
  244. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/date_demo.py +0 -0
  245. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/datedataset_bk.py +0 -0
  246. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_async_await1.py +0 -0
  247. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_async_await2.py +0 -0
  248. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_copy_files.py +0 -0
  249. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_copy_files_for_voc.py +0 -0
  250. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_ffmpy.py +0 -0
  251. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_annular_to_rect.py +0 -0
  252. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_pair_file.py +0 -0
  253. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_polygon.py +0 -0
  254. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_trt.py +0 -0
  255. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_get_file_label.py +0 -0
  256. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_get_file_list.py +0 -0
  257. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_gif.py +0 -0
  258. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_image_crop.py +0 -0
  259. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_kpts.py +0 -0
  260. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_labelme.py +0 -0
  261. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_labelme_crop.py +0 -0
  262. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_lableme_vis.py +0 -0
  263. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_letterbox.py +0 -0
  264. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_metrics.py +0 -0
  265. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_mosaic.py +0 -0
  266. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_mouse.py +0 -0
  267. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_nii.py +0 -0
  268. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_pandas.py +0 -0
  269. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_plot.py +0 -0
  270. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_prelabelme.py +0 -0
  271. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_rename.py +0 -0
  272. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_standard_image .py +0 -0
  273. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_standard_video .py +0 -0
  274. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_taichi.py +0 -0
  275. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_video2frame.py +0 -0
  276. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_video_crop.py +0 -0
  277. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_video_segm.py +0 -0
  278. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_voc_crop.py +0 -0
  279. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_voc_vis.py +0 -0
  280. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_word_similar.py +0 -0
  281. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_worker1.py +0 -0
  282. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_worker2.py +0 -0
  283. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/__init__.py +0 -0
  284. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/demo.py +0 -0
  285. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/detect_face_person.py +0 -0
  286. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/predet_labelme.py +0 -0
  287. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/edit_distance/__init__.py +0 -0
  288. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/edit_distance/demo.py +0 -0
  289. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/edit_distance/text_matching.py +0 -0
  290. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/fast_api/__init__.py +0 -0
  291. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/fast_api/create_image_url.py +0 -0
  292. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/fast_api/get_image_url.py +0 -0
  293. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/__init__.py +0 -0
  294. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/app.py +0 -0
  295. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/utils/__init__.py +0 -0
  296. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/utils/utils.py +0 -0
  297. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/get_file_list.py +0 -0
  298. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/gradio_app.py +0 -0
  299. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/gradio_app_v2.py +0 -0
  300. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/__init__.py +0 -0
  301. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v1.py +0 -0
  302. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v2.py +0 -0
  303. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v3.py +0 -0
  304. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/kafka_worker.py +0 -0
  305. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/men_tracemalloc.py +0 -0
  306. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/__init__.py +0 -0
  307. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/demo01.py +0 -0
  308. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/demo02.py +0 -0
  309. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/hello_milvus.py +0 -0
  310. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/milvus_client.py +0 -0
  311. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/model_process.py +0 -0
  312. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/performance.py +0 -0
  313. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/pose/__init__.py +0 -0
  314. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/pose/human_pose.py +0 -0
  315. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/qrcode/__init__.py +0 -0
  316. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/qrcode/demo.py +0 -0
  317. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/redis_py/__init__.py +0 -0
  318. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/redis_py/knn_search.py +0 -0
  319. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/redis_py/redis_client.py +0 -0
  320. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/__init__.py +0 -0
  321. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/base.py +0 -0
  322. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/component.py +0 -0
  323. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/main.py +0 -0
  324. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/register.py +0 -0
  325. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/GRU.py +0 -0
  326. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/TCN.py +0 -0
  327. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/__init__.py +0 -0
  328. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/demo.py +0 -0
  329. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/slowfastnet.py +0 -0
  330. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_camera.py +0 -0
  331. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_fr/__init__.py +0 -0
  332. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_fr/demo11.py +0 -0
  333. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_fr/idcardocr.py +0 -0
  334. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/__init__.py +0 -0
  335. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/asr_clients.py +0 -0
  336. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/asr_service.py +0 -0
  337. {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/chat_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybaseutils
3
- Version: 2.4.35
3
+ Version: 2.5.2
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -8,4 +8,4 @@
8
8
  # --------------------------------------------------------
9
9
  """
10
10
 
11
- __version__ = '2.4.35'
11
+ __version__ = '2.5.2'
@@ -19,7 +19,6 @@ from ffmpy import FFmpeg
19
19
  import matplotlib.pyplot as plt
20
20
  from scipy.fft import fft
21
21
  from IPython.display import Audio, display
22
- from playsound import playsound
23
22
  from scipy.io import wavfile
24
23
 
25
24
  import numpy as np
@@ -267,6 +266,8 @@ def sound_audio(audio, sr=16000):
267
266
 
268
267
  def sound_audio_file(audio_file, jupyter=False):
269
268
  """
269
+ sudo apt-get install libasound2-dev
270
+ pip install simpleaudio==1.0.4
270
271
  :param audio_file:
271
272
  :param jupyter:
272
273
  :return:
@@ -274,7 +275,10 @@ def sound_audio_file(audio_file, jupyter=False):
274
275
  if jupyter:
275
276
  display(Audio(audio_file))
276
277
  else:
277
- playsound(audio_file)
278
+ import simpleaudio as sa
279
+ wave_obj = sa.WaveObject.from_wave_file(audio_file)
280
+ play_obj = wave_obj.play() # 播放
281
+ play_obj.wait_done() # 等待播放结束(可选,但推荐)
278
282
 
279
283
 
280
284
  def sound_audio_buffer(audio_buffer, tmp_audio="./tmp.wav"):
@@ -470,8 +474,8 @@ if __name__ == '__main__':
470
474
  video_out = "../../data/video/test-video-result.mp4"
471
475
  audio_file = "../../data/audio/bus_chinese.wav"
472
476
 
473
- test_time(audio_file)
474
- # playsound(audio_file)
477
+ # test_time(audio_file)
478
+ sound_audio_file(audio_file,jupyter=False)
475
479
  # playsound(audio_file)
476
480
  # display_time_domain(audio_file)
477
481
  # display_freq_domain(audio_file)
@@ -11,7 +11,6 @@ import cv2
11
11
  import matplotlib.pyplot as plt
12
12
  import numpy as np
13
13
  from collections import defaultdict, Counter
14
- from pybaseutils import file_utils
15
14
 
16
15
  VOC_NAMES = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
17
16
  "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
@@ -38,7 +37,7 @@ color_table = [(0, 0, 0), (0, 255, 0), (255, 0, 0), (0, 0, 255), (0, 255, 255),
38
37
  (0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128)] * 100
39
38
 
40
39
 
41
- class ColorHash():
40
+ class ColorLabel():
42
41
  def __init__(self):
43
42
  self.color = dict()
44
43
  self.cnums = len(color_table)
@@ -48,7 +47,7 @@ class ColorHash():
48
47
  :param label: str or list
49
48
  :return:
50
49
  """
51
- h = file_utils.get_hash(texts=[str(label)])
50
+ h = str(label)
52
51
  if h not in self.color:
53
52
  i = len(self.color) + 1
54
53
  self.color[h] = color_table[i % self.cnums]
@@ -211,6 +211,7 @@ class COCOBuilder():
211
211
  keypoints[1::3] = np.clip(keypoints[1::3], 1, height - 1)
212
212
  :return:
213
213
  """
214
+ if isinstance(keypoints, np.ndarray): keypoints = keypoints.tolist()
214
215
  self.annotation_id += 1
215
216
  annotation_item = dict()
216
217
  annotation_item['segmentation'] = seg
@@ -274,24 +275,21 @@ class COCOBuilder():
274
275
  if area < min_area: segs, area = [], []
275
276
  return segs, area
276
277
 
277
- def addObjects(self, filename, objects: dict, width, height, num_joints, ignore_tiny=False):
278
+ def addObjects(self, filename, objects: dict, width, height, ignore_tiny=False):
278
279
  """
279
280
  :param filename: os.path.basename(filename)
280
281
  :param objects:
281
- boxes is [[xmin,ymin,xmax,ymax],[xmin,ymin,xmax,ymax],...]
282
- labels is [目标1,目标2,...]
283
- contours is [目标1的轮廓,目标2的轮廓,...]
284
- keypoints is [目标1的关键点,目标2的关键点,...],格式:
285
- keypoints=num_joints*3,x,y,visibility
286
- keypoints关节点的格式 : [x_1, y_1, v_1,...,x_k, y_k, v_k]
287
- 其中x,y为Keypoint的坐标,v为可见标志
288
- v = 0 : 未标注点
289
- v = 1 : 标注了但是图像中不可见(例如遮挡)
290
- v = 2 : 标注了并图像可见
282
+ boxes [[xmin,ymin,xmax,ymax],[xmin,ymin,xmax,ymax],...]
283
+ labels [目标1,目标2,...]
284
+ contours [目标1[seg1,seg2,...],目标2[seg1,seg2,...],...]
285
+ keypoints [目标1[x1, y1, v1,x2, y2, v2,...],目标1[x1, y1, v1,x2, y2, v2,...],...]
286
+ 其中x,y为Keypoint的坐标,v为可见标志
287
+ v = 0 : 未标注点
288
+ v = 1 : 标注了但是图像中不可见(例如遮挡)
289
+ v = 2 : 标注了并图像可见
291
290
  实际预测时,不要求预测每个关节点的可见性
292
291
  :param width:
293
292
  :param height:
294
- :param num_joints:
295
293
  :param ignore_tiny: 是否去除segment很细小的目标
296
294
  :return:
297
295
  """
@@ -0,0 +1,122 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Project:
5
+ # @Author : panjq
6
+ # @Date : 2020-02-12 18:28:16
7
+ # @url :
8
+ # --------------------------------------------------------
9
+ """
10
+
11
+ import argparse
12
+ import sys
13
+ import os
14
+ import numpy as np
15
+ import json
16
+ import cv2
17
+ import time
18
+ from tqdm import tqdm
19
+ from pybaseutils.dataloader import parser_labelme
20
+ from pybaseutils.converter import build_coco
21
+
22
+
23
+ class Labelme2COCO(build_coco.COCOBuilder):
24
+ """Convert Labelme to COCO dataset format"""
25
+
26
+ def __init__(self, anno_dir, image_dir, class_name=[], init_id=None, use_kpt=False, kpt_names=[],
27
+ kpt_shape=[]):
28
+ """
29
+ :param anno_dir:
30
+ :param image_dir:
31
+ :param class_name:
32
+ :param init_id:
33
+ :param use_kpt:
34
+ :param kpt_names: 关键点名称列表,
35
+ 当kpt_names.ndim=1时,要求所有类别且所有目标的关键点名称必须一致
36
+ 当kpt_names.ndim=2时,仅要求相同类别目标的关键点名称必须一致,且len(kpt_names)==len(self.class_name)
37
+ :param kpt_shape: 关键点的维度,默认是(17, 3),对于coco-person,有17个关键点,3表示(x,y,v))
38
+ """
39
+ super(Labelme2COCO, self).__init__(init_id=init_id)
40
+ print(anno_dir)
41
+ print(image_dir)
42
+ self.anno_dir = anno_dir
43
+ self.image_dir = image_dir
44
+ self.kpt_names = kpt_names
45
+ self.kpt_shape = kpt_shape
46
+ self.labelme = parser_labelme.LabelMeDataset(anno_dir=anno_dir,
47
+ image_dir=image_dir,
48
+ class_name=class_name,
49
+ check_kpt=True,
50
+ use_kpt=use_kpt,
51
+ kpt_names=kpt_names,
52
+ kpt_shape=kpt_shape,
53
+ use_rgb=False,
54
+ shuffle=False,
55
+ check=False
56
+ )
57
+
58
+ def build_instances_dataset(self, save_file, ):
59
+ """
60
+ 构建COCO的目标检测和实例分割数据集
61
+ :param save_file: 输出COCO格式的文件
62
+ :return:
63
+ """
64
+ for index in tqdm(range(len(self.labelme))):
65
+ data_info = self.labelme.__getitem__(index)
66
+ contours = [[c] for c in data_info["points"]]
67
+ info = {"boxes": data_info["boxes"], "labels": data_info["names"],
68
+ "contours": contours}
69
+ width, height = data_info["size"]
70
+ filename = data_info["image_file"]
71
+ self.addObjects(filename, info, width, height, num_joints=0)
72
+ build_coco.COCOTools.check_coco(self.coco)
73
+ self.save_coco(save_file)
74
+
75
+ def build_keypoints_dataset(self, save_file, skeleton=[]):
76
+ """
77
+ 构建COCO的目标检测和实例分割数据集
78
+ :param save_file: 输出COCO格式的文件
79
+ :return:
80
+ """
81
+ for index in tqdm(range(len(self.labelme))):
82
+ data_info = self.labelme.__getitem__(index)
83
+ contours = [[c] for c in data_info["points"]]
84
+ keypoints = [c.reshape(-1) for c in data_info["keypoints"]]
85
+ info = {"boxes": data_info["boxes"], "labels": data_info["names"],
86
+ "contours": contours, "keypoints": keypoints}
87
+ width, height = data_info["size"]
88
+ filename = data_info["image_file"]
89
+ self.addObjects(filename, info, width, height)
90
+ # 设置关键点的名称和skeleton
91
+ self.set_keypoints_category(kps_name=self.kpt_names[0], skeleton=skeleton, cat_id=0)
92
+ build_coco.COCOTools.check_coco(self.coco)
93
+ self.save_coco(save_file)
94
+
95
+ def save_coco(self, json_file):
96
+ """保存COCO数据集"""
97
+ super(Labelme2COCO, self).save_coco(json_file)
98
+
99
+
100
+ def demo():
101
+ class_name = ["person"]
102
+ kpt_names = [["p0", "p1", "p2", "p3", "p4"]]
103
+ skeleton = [[0, 2], [2, 1], [2, 3], [3, 4]]
104
+ kpt_shape = [5, 3]
105
+ anno_dir = "/media/PKing/dev2/SDK/base-utils/data/labelme/images"
106
+ coco_ins_file = os.path.join(os.path.dirname(anno_dir), "coco_ins.json")
107
+ coco_kps_file = os.path.join(os.path.dirname(anno_dir), "coco_kps.json")
108
+ build = Labelme2COCO(image_dir=anno_dir,
109
+ anno_dir=anno_dir,
110
+ class_name=class_name,
111
+ use_kpt=True,
112
+ kpt_names=kpt_names,
113
+ kpt_shape=kpt_shape
114
+ )
115
+ # TODO 构建关键点检测数据集
116
+ build.build_keypoints_dataset(coco_kps_file, skeleton=skeleton)
117
+ # TODO 构建实例分割数据集
118
+ # build.build_instances_dataset(coco_ins_file)
119
+
120
+
121
+ if __name__ == '__main__':
122
+ demo()
@@ -53,6 +53,10 @@ class LabelMeDataset(Dataset):
53
53
  :param check: 当class_name=None且check=True,将自动获取所有class
54
54
  :param check_kpt: True会检查关键点的完整性,图像中仅当所有目标都标注和对应的关键点(无漏标注),才返回数据
55
55
  False不会检查关键点的完整性,,图像中只要标注的目标和对应的关键点(漏标注),会返回数据
56
+ :param kpt_names: 关键点名称列表,
57
+ 当kpt_names.ndim=1时,要求所有类别且所有目标的关键点名称必须一致
58
+ 当kpt_names.ndim=2时,仅要求相同类别目标的关键点名称必须一致,且len(kpt_names)==len(self.class_name)
59
+ :param kpt_shape: 关键点的维度,默认是(17, 3),对于coco-person,有17个关键点,3表示(x,y,v)
56
60
  :param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
57
61
  :param kwargs: read_image: 是否读取图片,否则image=None
58
62
  """
@@ -537,6 +541,34 @@ def LabelMeDatasets(filename=None,
537
541
  return datasets
538
542
 
539
543
 
544
+ def get_class_counts(datasets, save=""):
545
+ """
546
+ 统计每个类别的样本数量
547
+ :param datasets: List[str] or ConcatDataset
548
+ :param save: 保存路径
549
+ :return: 每个类别的样本数量
550
+ """
551
+ from pybaseutils import dict_utils
552
+ if isinstance(datasets, list):
553
+ datasets = LabelMeDatasets(filename=None,
554
+ data_root=None,
555
+ anno_dir=datasets,
556
+ image_dir=None,
557
+ class_name=[],
558
+ check=False,
559
+ phase='val',
560
+ shuffle=False)
561
+ counts = {}
562
+ for i in tqdm(range(len(datasets))):
563
+ info = datasets.__getitem__(i)
564
+ for n in info["names"]:
565
+ counts[n] = counts.get(n, 0) + 1
566
+ counts = dict_utils.dict_sort(counts,use_key=False)
567
+ if save:
568
+ json_utils.save_json(os.path.join(save, "counts.json"), counts)
569
+ return counts
570
+
571
+
540
572
  def parser_labelme(anno_file, class_dict={}, size=()):
541
573
  """
542
574
  :param annotation: labelme标注的数据
@@ -591,9 +623,9 @@ def example_for_keypoints():
591
623
  image_dir=None,
592
624
  class_name=class_name,
593
625
  use_kpt=True,
626
+ check_kpt=True,
594
627
  kpt_names=kpt_names,
595
628
  kpt_shape=kpt_shape,
596
- check_kpt=False,
597
629
  check=False,
598
630
  phase="val",
599
631
  shuffle=False)
@@ -633,4 +665,10 @@ def example_for_segment():
633
665
 
634
666
  if __name__ == "__main__":
635
667
  # example_for_segment()
636
- example_for_keypoints()
668
+ # example_for_keypoints()
669
+ datasets = [
670
+ '/home/PKing/edudata/dataset/AICQ/dataset/data-2026-10-06/images',
671
+ '/home/PKing/edudata/dataset/AICQ/dataset/data-2026-09-30/images',
672
+ ]
673
+ counts = get_class_counts(datasets)
674
+ print(counts)
@@ -119,7 +119,7 @@ class VOCDataset(Dataset):
119
119
  class_set = labels.reshape(-1).tolist() + class_set
120
120
  class_set = list(set(class_set))
121
121
  if ignore_empty and (len(boxes) == 0 or len(labels) == 0):
122
- print("empty annotation:{}".format(annotation_file))
122
+ # print("empty annotation:{}".format(annotation_file))
123
123
  continue
124
124
  dst_ids.append(image_id)
125
125
  class_set = sorted(class_set)
@@ -7,4 +7,5 @@
7
7
  # @Brief :
8
8
  # --------------------------------------------------------
9
9
  """
10
+ # TODO 兼容之前dict_uils.py的异常
10
11
  from pybaseutils.dict_utils import *
@@ -14,8 +14,9 @@ from collections import defaultdict
14
14
 
15
15
 
16
16
  class Objects(object):
17
- def __init__(self, boxes, label, score, names=[], size=[], segms=None, masks=None, keypt=None,
18
- traid=None, trace=None, color=[], image=None, file=""):
17
+ def __init__(self, boxes, label, score, names=[], size=[],
18
+ segms=[], masks=None, keypt=[], value=[],
19
+ traid=[], trace: defaultdict = None, color=[], image=None, file=""):
19
20
  self.boxes = boxes # 目标框(xmin,ymin,xmax,ymax)
20
21
  self.score = score # 目标框置信度
21
22
  self.label = label # 目标框类别
@@ -25,12 +26,14 @@ class Objects(object):
25
26
  self.masks = masks # 目标轮廓掩码
26
27
  self.segms = segms # 目标轮廓[np.shape(n,2)]
27
28
  self.traid = traid # 轨迹ID
28
- self.trace = trace # 轨迹的历史boxes
29
+ self.trace = trace # 轨迹的历史数据
30
+ self.value = value # 一些数值
31
+ self.depth = None # 深度图
32
+ self.dists = [] # 深度值(segms/boxes区域)
29
33
  self.color = [(255, 0, 0)] * len(boxes) # 目标框颜色
34
+ self.metas = defaultdict() # 其他信息
30
35
  self.size = size # 原始图像大小
31
36
  self.file = file # 文件路径
32
- self.depth = None # 深度图
33
- self.metas = defaultdict() # 其他信息
34
37
 
35
38
  def update(self, **kwargs):
36
39
  """更新属性值"""
@@ -19,6 +19,7 @@ FONT_ROOT = [
19
19
  os.path.expanduser("~/.fonts"), # 用户字体目录
20
20
  BASE_FONT, # 用户字体目录
21
21
  "/usr/share/fonts",
22
+ "./data/fonts",
22
23
  "/usr/share/fonts/truetype",
23
24
  "/usr/share/fonts/opentype",
24
25
  ]
@@ -243,6 +243,30 @@ def re_example():
243
243
  print(out)
244
244
 
245
245
 
246
+ def align_display(s, align='C', width=20, pchar=" "):
247
+ """
248
+ 对齐显示字符串
249
+ print("[{}] 下载进度".format(align_display(item, 'C')))
250
+ :param s: 要显示的字符串
251
+ :param align: 对齐方式,'L' 左对齐,'C' 居中对齐,'R' 右对齐
252
+ :param width: 目标显示宽度
253
+ :param pchar: 对齐字符,默认空格
254
+ :return: 对齐后的字符串
255
+ """
256
+ w = sum(2 if ord(c) > 127 else 1 for c in s) # 计算字符串的显示宽度(中文等宽字符算2,英文算1)
257
+ total_pad = max(width - w, 0)
258
+ if align == 'L':
259
+ L = 0
260
+ R = total_pad
261
+ elif align == 'R':
262
+ L = total_pad
263
+ R = 0
264
+ else: # 默认居中对齐
265
+ L = total_pad // 2
266
+ R = total_pad - L
267
+ return pchar * L + s + pchar * R
268
+
269
+
246
270
  if __name__ == "__main__":
247
271
  draw_font_example()
248
272
  # get_system_fonts()
@@ -7,6 +7,7 @@
7
7
  # @Brief :
8
8
  # --------------------------------------------------------
9
9
  """
10
+ import math
10
11
  import numpy as np
11
12
  from scipy.spatial.distance import cdist
12
13
 
@@ -221,6 +222,48 @@ def compute_vector_angle(a, b, minangle=True):
221
222
  return angle
222
223
 
223
224
 
225
+ def image2math_coord(pts, height=None):
226
+ """
227
+ 将图像坐标系(x 向右,y 向下)转换为数学坐标系(x 向右,y 向上)笛卡尔坐标系。
228
+ :param pts: 形如 (N, 2) 的数组/列表,图像坐标点
229
+ :param height: 可选,图像高度。给出时按 (x, height - y) 翻转,
230
+ 结果仍落在图像矩形范围内;不给出时按 (x, -y) 翻转。
231
+ :return: (N, 2) 的 numpy 数组,数学坐标点
232
+ """
233
+ pts = np.asarray(pts, dtype=float)
234
+ if pts.ndim != 2 or pts.shape[1] != 2: raise ValueError("pts 必须是形如 (N, 2) 的数组")
235
+ out = pts.copy()
236
+ if height is None:
237
+ out[:, 1] = -out[:, 1] # y 取反,原点不变
238
+ else:
239
+ out[:, 1] = height - out[:, 1] # 以图像底边为 y=0
240
+ return out
241
+
242
+
243
+ def get_vector_angle(v1, v2, clockwise=True):
244
+ """
245
+ 坐标系约定: 标准的数学坐标系(x 轴向右,y 轴向上)
246
+ 计算从向量 v1 旋转到向量 v2 的角度。
247
+ :param v1: 形如 (x, y) 的元组/列表,表示平面向量
248
+ :param v2: 形如 (x, y) 的元组/列表,表示平面向量
249
+ :param clockwise: True 顺时针角度,False 逆时针角度
250
+ :return: 角度(度),范围 [0, 360)
251
+ 注意: 0 和 360 是同一个方向,函数统一返回 0
252
+ """
253
+ x1, y1 = v1
254
+ x2, y2 = v2
255
+ # 零向量无法定义方向
256
+ if (x1 == 0 and y1 == 0) or (x2 == 0 and y2 == 0): return 0
257
+ dot = x1 * x2 + y1 * y2 # 点积
258
+ cross = x1 * y2 - y1 * x2 # 叉积(z 分量)
259
+ # 叉积 > 0 表示 v2 在 v1 的逆时针方向
260
+ # 顺时针:用 -cross;逆时针:用 +cross
261
+ signed_cross = -cross if clockwise else cross
262
+ angle = math.degrees(math.atan2(signed_cross, dot))
263
+ # 把 (-180, 180] 映射到 [0, 360)
264
+ return angle % 360
265
+
266
+
224
267
  def line_test():
225
268
  '''
226
269
  angle: 56.789092174788685