pybaseutils 2.4.35__tar.gz → 2.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/PKG-INFO +1 -1
  2. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/audio/audio_utils.py +8 -4
  4. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/color_utils.py +2 -3
  5. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_labelme.py +35 -1
  6. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_voc.py +1 -1
  7. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/font_style/__init__.py +1 -0
  8. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/font_utils.py +24 -0
  9. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/image_utils.py +66 -101
  10. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/thread_utils.py +31 -0
  11. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils.egg-info/PKG-INFO +1 -1
  12. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils.egg-info/SOURCES.txt +2 -0
  13. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/setup.py +1 -0
  14. pybaseutils-2.5.0/test_py/aije/demo_labelme_class_counts.py +20 -0
  15. pybaseutils-2.5.0/test_py/aije/demo_labelme_crop_aicq.py +138 -0
  16. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_labelme_crop_aije.py +1 -1
  17. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_labelme_crop_ailt.py +23 -17
  18. pybaseutils-2.5.0/test_py/demo1.py +10 -0
  19. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo2.py +6 -4
  20. pybaseutils-2.5.0/test_py/demo3.py +35 -0
  21. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo4.py +1 -1
  22. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_gif_video.py +4 -4
  23. pybaseutils-2.4.35/test_py/demo1.py +0 -43
  24. pybaseutils-2.4.35/test_py/demo3.py +0 -21
  25. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/LICENCE +0 -0
  26. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/README.md +0 -0
  27. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/audio/__init__.py +0 -0
  28. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/audio/pyaudio_utils.py +0 -0
  29. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/audio/vad_utils.py +0 -0
  30. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/base/__init__.py +0 -0
  31. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/base/dict_queue.py +0 -0
  32. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/base/list_queue.py +0 -0
  33. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/base/producer_consumer.py +0 -0
  34. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/base64_utils.py +0 -0
  35. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/batch_utils.py +0 -0
  36. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/build_utils/__init__.py +0 -0
  37. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/build_utils/cython_utils.py +0 -0
  38. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  39. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cluster/__init__.py +0 -0
  40. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cluster/kmean.py +0 -0
  41. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cluster/maxmin_distance.py +0 -0
  42. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cluster/similarity.py +0 -0
  43. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/config_utils.py +0 -0
  44. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/__init__.py +0 -0
  45. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/build_coco.py +0 -0
  46. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/build_cvat.py +0 -0
  47. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/build_labelme.py +0 -0
  48. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/build_voc.py +0 -0
  49. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/concat_coco.py +0 -0
  50. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  51. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_coco2voc.py +0 -0
  52. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  53. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  54. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  55. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
  56. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  57. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  58. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_voc2coco.py +0 -0
  59. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  60. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_voc2voc.py +0 -0
  61. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  62. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
  63. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  64. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/converter/prelabelme.py +0 -0
  65. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/coords_utils.py +0 -0
  66. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/__init__.py +0 -0
  67. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/camera.py +0 -0
  68. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/corner_utils.py +0 -0
  69. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/frame_record.py +0 -0
  70. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/mouse_utils.py +0 -0
  71. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/nms_utils.py +0 -0
  72. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/cvutils/video_utils.py +0 -0
  73. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/data_utils.py +0 -0
  74. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/__init__.py +0 -0
  75. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/balanced_classes.py +0 -0
  76. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/base_coco.py +0 -0
  77. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/base_dataset.py +0 -0
  78. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/data_resample.py +0 -0
  79. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  80. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  81. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  82. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  83. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_image_text.py +0 -0
  84. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
  85. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_labelme_line.py +0 -0
  86. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_video_folder.py +0 -0
  87. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_video_text.py +0 -0
  88. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/parser_yolo.py +0 -0
  89. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  90. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dict_uils.py +0 -0
  91. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/dict_utils.py +0 -0
  92. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/file_utils.py +0 -0
  93. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/QueueTable.py +0 -0
  94. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/__init__.py +0 -0
  95. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/demo.py +0 -0
  96. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/kalman_filter.py +0 -0
  97. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/mean_filter.py +0 -0
  98. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/motion_filter.py +0 -0
  99. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/filter/pose_filter.py +0 -0
  100. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/geometry_tools.py +0 -0
  101. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/heatmap_utils.py +0 -0
  102. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/http_utils.py +0 -0
  103. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/json_utils.py +0 -0
  104. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/log.py +0 -0
  105. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/log_utils.py +0 -0
  106. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/media/__init__.py +0 -0
  107. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/media/ffmpeg_utils.py +0 -0
  108. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/metrics/__init__.py +0 -0
  109. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/metrics/accuracy.py +0 -0
  110. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/metrics/average_meter.py +0 -0
  111. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/metrics/class_report.py +0 -0
  112. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/metrics/plot_pr.py +0 -0
  113. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/metrics/plot_roc.py +0 -0
  114. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/nets_utils.py +0 -0
  115. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/numpy_utils.py +0 -0
  116. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pandas_utils.py +0 -0
  117. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/plot_utils.py +0 -0
  118. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pose/__init__.py +0 -0
  119. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pose/bones_utils.py +0 -0
  120. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pose/human_pose.py +0 -0
  121. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pose/pose_utils.py +0 -0
  122. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pycpp/__init__.py +0 -0
  123. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pycpp/demo.py +0 -0
  124. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/pycpp/main.py +0 -0
  125. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/server/__init__.py +0 -0
  126. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/server/apm_server.py +0 -0
  127. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/setup_config.py +0 -0
  128. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/singleton_utils.py +0 -0
  129. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/text_utils.py +0 -0
  130. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/time_utils.py +0 -0
  131. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracemalloc_utils.py +0 -0
  132. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracemalloc_utils2.py +0 -0
  133. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/QueueTable.py +0 -0
  134. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/__init__.py +0 -0
  135. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/demo.py +0 -0
  136. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/kalman_filter.py +0 -0
  137. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/mean_filter.py +0 -0
  138. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/motion_filter.py +0 -0
  139. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/tracking/pose_filter.py +0 -0
  140. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/transforms/__init__.py +0 -0
  141. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/transforms/affine_transform.py +0 -0
  142. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/transforms/build_transform.py +0 -0
  143. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/transforms/face_alignment.py +0 -0
  144. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/transforms/imgaug_utils.py +0 -0
  145. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/transforms/transform_utils.py +0 -0
  146. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/web/__init__.py +0 -0
  147. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/web/app_gradio_image.py +0 -0
  148. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/web/app_stweb_image.py +0 -0
  149. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/web/app_webio_image.py +0 -0
  150. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/web/demo.py +0 -0
  151. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/word_utils.py +0 -0
  152. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/worker.py +0 -0
  153. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils/yaml_utils.py +0 -0
  154. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils.egg-info/dependency_links.txt +0 -0
  155. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils.egg-info/not-zip-safe +0 -0
  156. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/pybaseutils.egg-info/top_level.txt +0 -0
  157. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/setup.cfg +0 -0
  158. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/Image_enhance/__init__.py +0 -0
  159. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/Image_enhance/dmeo01.py +0 -0
  160. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/WebCrawler/__init__.py +0 -0
  161. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/WebCrawler/download_pdf.py +0 -0
  162. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/WebCrawler/search_baidu.py +0 -0
  163. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/WebCrawler/search_biying.py +0 -0
  164. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/__init__.py +0 -0
  165. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/__init__.py +0 -0
  166. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/action_dataset.py +0 -0
  167. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/build_cython.py +0 -0
  168. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/build_pyarmor.py +0 -0
  169. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/build_service.py +0 -0
  170. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/convert_cvat2labelme.py +0 -0
  171. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/convert_labelme2coco.py +0 -0
  172. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/convert_labelme2voc.py +0 -0
  173. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/copy_move.py +0 -0
  174. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_labelme_shock.py +0 -0
  175. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_motion_blur.py +0 -0
  176. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_video_aije.py +0 -0
  177. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_voc_crop.py +0 -0
  178. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/demo_voc_vis.py +0 -0
  179. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/get_pair_data.py +0 -0
  180. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/mask_image.py +0 -0
  181. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/aije/video_convertor.py +0 -0
  182. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/__init__.py +0 -0
  183. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/demo.py +0 -0
  184. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/main.py +0 -0
  185. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/main_read.py +0 -0
  186. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/segment.py +0 -0
  187. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  188. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio/speechbrain_demo.py +0 -0
  189. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/audio_demo1.py +0 -0
  190. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/camera/__init__.py +0 -0
  191. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/camera/demo.py +0 -0
  192. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/camera.py +0 -0
  193. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/captcha/__init__.py +0 -0
  194. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/captcha/demo.py +0 -0
  195. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/class_attribute.py +0 -0
  196. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/class_names.py +0 -0
  197. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/AffectNet.py +0 -0
  198. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/AsianMovie.py +0 -0
  199. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/BITVehicle2voc.py +0 -0
  200. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/BSTLD2voc.py +0 -0
  201. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/CCPD.py +0 -0
  202. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/CCPD2voc.py +0 -0
  203. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/FL3D_dataset.py +0 -0
  204. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/FreiHAND2coco.py +0 -0
  205. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/MTFL2voc.py +0 -0
  206. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/TT100K.py +0 -0
  207. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/WaterMeters1.py +0 -0
  208. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/WaterMeters2.py +0 -0
  209. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/__init__.py +0 -0
  210. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/car_accident.py +0 -0
  211. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/concat_coco.py +0 -0
  212. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_coco2voc.py +0 -0
  213. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_cvat2labelme.py +0 -0
  214. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_gesture2hand.py +0 -0
  215. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_labelme2coco.py +0 -0
  216. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_labelme2cvat.py +0 -0
  217. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_labelme2labelme.py +0 -0
  218. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_labelme2voc.py +0 -0
  219. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_voc2labelme.py +0 -0
  220. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/convert_yolo2labelme.py +0 -0
  221. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/fall_dataset.py +0 -0
  222. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/fatigue_driving.py +0 -0
  223. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/fdd_dataset.py +0 -0
  224. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/get_pair_data.py +0 -0
  225. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/handpose2coco.py +0 -0
  226. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/insects_for_aichallenger.py +0 -0
  227. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/parking_rois_gopro.py +0 -0
  228. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/tt100k_utils.py +0 -0
  229. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/ua_detrac2voc.py +0 -0
  230. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/ucf101_dataset.py +0 -0
  231. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/converter/voc_sbd2labelme.py +0 -0
  232. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/__init__.py +0 -0
  233. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/build_cython.py +0 -0
  234. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/build_pyarmor.py +0 -0
  235. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/cryptography_demo.py +0 -0
  236. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/fun_sum.py +0 -0
  237. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/main.py +0 -0
  238. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/model_des_enctypt.py +0 -0
  239. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/cython_build/model_enctypt.py +0 -0
  240. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/date_dataset.py +0 -0
  241. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/date_demo.py +0 -0
  242. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/datedataset_bk.py +0 -0
  243. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_async_await1.py +0 -0
  244. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_async_await2.py +0 -0
  245. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_coco_vis.py +0 -0
  246. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_copy_files.py +0 -0
  247. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_copy_files_for_voc.py +0 -0
  248. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_ffmpy.py +0 -0
  249. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_for_annular_to_rect.py +0 -0
  250. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_for_pair_file.py +0 -0
  251. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_for_polygon.py +0 -0
  252. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_for_trt.py +0 -0
  253. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_get_file_label.py +0 -0
  254. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_get_file_list.py +0 -0
  255. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_gif.py +0 -0
  256. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_image_crop.py +0 -0
  257. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_kpts.py +0 -0
  258. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_labelme.py +0 -0
  259. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_labelme_crop.py +0 -0
  260. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_lableme_vis.py +0 -0
  261. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_letterbox.py +0 -0
  262. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_metrics.py +0 -0
  263. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_mosaic.py +0 -0
  264. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_mouse.py +0 -0
  265. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_nii.py +0 -0
  266. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_pandas.py +0 -0
  267. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_plot.py +0 -0
  268. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_prelabelme.py +0 -0
  269. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_rename.py +0 -0
  270. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_standard_image .py +0 -0
  271. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_standard_video .py +0 -0
  272. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_taichi.py +0 -0
  273. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_video2frame.py +0 -0
  274. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_video_crop.py +0 -0
  275. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_video_segm.py +0 -0
  276. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_voc_crop.py +0 -0
  277. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_voc_vis.py +0 -0
  278. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_word_similar.py +0 -0
  279. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_worker1.py +0 -0
  280. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/demo_worker2.py +0 -0
  281. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/detector/__init__.py +0 -0
  282. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/detector/demo.py +0 -0
  283. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/detector/detect_face_person.py +0 -0
  284. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/detector/predet_labelme.py +0 -0
  285. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/edit_distance/__init__.py +0 -0
  286. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/edit_distance/demo.py +0 -0
  287. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/edit_distance/text_matching.py +0 -0
  288. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/fast_api/__init__.py +0 -0
  289. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/fast_api/create_image_url.py +0 -0
  290. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/fast_api/get_image_url.py +0 -0
  291. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/flask_demo/__init__.py +0 -0
  292. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/flask_demo/app.py +0 -0
  293. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/flask_demo/utils/__init__.py +0 -0
  294. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/flask_demo/utils/utils.py +0 -0
  295. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/get_file_list.py +0 -0
  296. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/gradio_app.py +0 -0
  297. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/gradio_app_v2.py +0 -0
  298. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/image_correction/__init__.py +0 -0
  299. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/image_correction/demo_correction_v1.py +0 -0
  300. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/image_correction/demo_correction_v2.py +0 -0
  301. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/image_correction/demo_correction_v3.py +0 -0
  302. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/kafka_worker.py +0 -0
  303. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/men_tracemalloc.py +0 -0
  304. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/milvus_demo/__init__.py +0 -0
  305. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/milvus_demo/demo01.py +0 -0
  306. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/milvus_demo/demo02.py +0 -0
  307. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/milvus_demo/hello_milvus.py +0 -0
  308. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/milvus_demo/milvus_client.py +0 -0
  309. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/model_process.py +0 -0
  310. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/performance.py +0 -0
  311. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/pose/__init__.py +0 -0
  312. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/pose/human_pose.py +0 -0
  313. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/qrcode/__init__.py +0 -0
  314. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/qrcode/demo.py +0 -0
  315. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/redis_py/__init__.py +0 -0
  316. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/redis_py/knn_search.py +0 -0
  317. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/redis_py/redis_client.py +0 -0
  318. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/registry/__init__.py +0 -0
  319. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/registry/base.py +0 -0
  320. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/registry/component.py +0 -0
  321. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/registry/main.py +0 -0
  322. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/registry/register.py +0 -0
  323. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/single_class/GRU.py +0 -0
  324. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/single_class/TCN.py +0 -0
  325. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/single_class/__init__.py +0 -0
  326. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/single_class/demo.py +0 -0
  327. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/slowfastnet.py +0 -0
  328. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/test_camera.py +0 -0
  329. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/test_fr/__init__.py +0 -0
  330. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/test_fr/demo11.py +0 -0
  331. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/test_fr/idcardocr.py +0 -0
  332. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/web_socket/__init__.py +0 -0
  333. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/web_socket/asr_clients.py +0 -0
  334. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/test_py/web_socket/asr_service.py +0 -0
  335. {pybaseutils-2.4.35 → pybaseutils-2.5.0}/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.0
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.0'
@@ -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]
@@ -537,6 +537,34 @@ def LabelMeDatasets(filename=None,
537
537
  return datasets
538
538
 
539
539
 
540
+ def get_class_counts(datasets, save=""):
541
+ """
542
+ 统计每个类别的样本数量
543
+ :param datasets: List[str] or ConcatDataset
544
+ :param save: 保存路径
545
+ :return: 每个类别的样本数量
546
+ """
547
+ from pybaseutils import dict_utils
548
+ if isinstance(datasets, list):
549
+ datasets = LabelMeDatasets(filename=None,
550
+ data_root=None,
551
+ anno_dir=datasets,
552
+ image_dir=None,
553
+ class_name=[],
554
+ check=False,
555
+ phase='val',
556
+ shuffle=False)
557
+ counts = {}
558
+ for i in tqdm(range(len(datasets))):
559
+ info = datasets.__getitem__(i)
560
+ for n in info["names"]:
561
+ counts[n] = counts.get(n, 0) + 1
562
+ counts = dict_utils.dict_sort(counts,use_key=False)
563
+ if save:
564
+ json_utils.save_json(os.path.join(save, "counts.json"), counts)
565
+ return counts
566
+
567
+
540
568
  def parser_labelme(anno_file, class_dict={}, size=()):
541
569
  """
542
570
  :param annotation: labelme标注的数据
@@ -633,4 +661,10 @@ def example_for_segment():
633
661
 
634
662
  if __name__ == "__main__":
635
663
  # example_for_segment()
636
- example_for_keypoints()
664
+ # example_for_keypoints()
665
+ datasets = [
666
+ '/home/PKing/edudata/dataset/AICQ/dataset/data-2026-10-06/images',
667
+ '/home/PKing/edudata/dataset/AICQ/dataset/data-2026-09-30/images',
668
+ ]
669
+ counts = get_class_counts(datasets)
670
+ 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)
@@ -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()
@@ -43,7 +43,7 @@ color_map = [(0, 0, 0), (56, 56, 255), (151, 157, 255), (31, 112, 255), (29, 178
43
43
  (168, 153, 44), (255, 194, 0), (147, 69, 52), (255, 115, 100),
44
44
  (236, 24, 0), (255, 56, 132), (133, 0, 82), (255, 56, 203), (200, 149, 255), (199, 55, 255)] * 100
45
45
 
46
- color_hash = color_utils.ColorHash()
46
+ color_label = color_utils.ColorLabel()
47
47
 
48
48
  root = os.path.dirname(__file__)
49
49
  coco_skeleton = [[1, 3], [1, 0], [2, 4], [2, 0], [0, 5], [0, 6], [5, 7], [7, 9], [6, 8],
@@ -1126,13 +1126,14 @@ def draw_image_bboxes_text(image, boxes, boxes_name, color=(), thickness=0, font
1126
1126
  return image
1127
1127
 
1128
1128
 
1129
- def draw_image_boxes_texts(image, boxes, texts, color=(), thickness=0, fontScale=0, alpha=0, drawType="custom",
1130
- top=True):
1129
+ def draw_image_boxes_texts(image, boxes, texts, color=(), thickness=0, fontScale=0, alpha=0,
1130
+ drawType="custom", color_type="class", top=True):
1131
1131
  """
1132
1132
  :param image:
1133
1133
  :param boxes:
1134
1134
  :param texts:
1135
1135
  :param color:
1136
+ :param kColor:
1136
1137
  :param thickness:
1137
1138
  :param fontScale:
1138
1139
  :param drawType:
@@ -1140,8 +1141,10 @@ def draw_image_boxes_texts(image, boxes, texts, color=(), thickness=0, fontScale
1140
1141
  :return:
1141
1142
  """
1142
1143
  for i, (bbox, text) in enumerate(zip(boxes, texts)):
1143
- bbox = [int(b) for b in bbox]
1144
- c = color if color else color_table[(i + 1) % 20]
1144
+ if color_type == "class":
1145
+ c = color if color else color_label.get_color(text) # 相同类别相同颜色
1146
+ else:
1147
+ c = color if color else color_table[(i + 1) % len(color_table)] # 每个实例不同颜色
1145
1148
  draw_image_bbox_text(image, bbox, text, color=c, thickness=thickness, fontScale=fontScale, alpha=alpha,
1146
1149
  drawType=drawType, top=top)
1147
1150
  return image
@@ -1163,16 +1166,14 @@ def draw_image_bboxes_labels_text(image, boxes, labels, boxes_name=None, color=N
1163
1166
 
1164
1167
  def draw_image_boxes_labels_texts(image, boxes, labels, texts, color=None, thickness=2, fontScale=0.8,
1165
1168
  drawType="custom", top=True, colors=None, color_type="class"):
1166
- if isinstance(labels, np.ndarray):
1167
- labels = labels.reshape(-1).tolist()
1169
+ if isinstance(labels, np.ndarray): labels = labels.reshape(-1).tolist()
1168
1170
  colors = [(0, 0, 0)] + colors if colors else color_table
1169
- for i, (label, bbox, name) in enumerate(zip(labels, boxes, texts)):
1170
- bbox = [int(b) for b in bbox]
1171
+ for i, (label, bbox, text) in enumerate(zip(labels, boxes, texts)):
1171
1172
  if color_type == "class":
1172
- c = color if color else color_hash.get_color(label) # 相同类别相同颜色
1173
+ c = color if color else color_label.get_color(label) # 相同类别相同颜色
1173
1174
  else:
1174
- c = color if color else colors[(i + 1) % 20] # 每个实例不同颜色
1175
- image = draw_image_bbox_text(image, bbox, str(name), color=c, thickness=thickness, fontScale=fontScale,
1175
+ c = color if color else colors[(i + 1) % len(colors)] # 每个实例不同颜色
1176
+ image = draw_image_bbox_text(image, bbox, str(text), color=c, thickness=thickness, fontScale=fontScale,
1176
1177
  drawType=drawType, top=top)
1177
1178
  return image
1178
1179
 
@@ -1255,28 +1256,34 @@ def show_image_rects_texts(title, image, rects, texts, color=None, thickness=0,
1255
1256
  return image
1256
1257
 
1257
1258
 
1258
- def draw_image_bboxes_labels(image, boxes, labels, class_name=None, color=None, thickness=0, fontScale=0,
1259
- drawType="custom", top=True):
1259
+ def draw_image_boxes_labels(image, boxes, labels, class_name=None, color=None, kColor=True, thickness=0, fontScale=0,
1260
+ alpha=0, drawType="custom", top=True):
1260
1261
  """
1261
- :param image:
1262
- :param boxes: [[x1,y1,x2,y2],[x1,y1,x2,y2]]
1263
- :param labels:
1262
+ 绘制框和标签
1263
+ :param image: 图像
1264
+ :param boxes: 框坐标
1265
+ :param labels: 标签index
1266
+ :param class_name: 类别名称
1267
+ :param color:
1268
+ :param kColor: True 相同类别颜色相同,每个类别颜色不同; False 每个实例颜色不同
1269
+ :param thickness:
1270
+ :param fontScale:
1271
+ :param alpha:
1272
+ :param drawType:
1273
+ :param top:
1264
1274
  :return:
1265
1275
  """
1266
1276
  if isinstance(labels, np.ndarray): labels = labels.astype(np.int32).reshape(-1).tolist()
1267
- for label, bbox in zip(labels, boxes):
1268
- bbox = [int(b) for b in bbox]
1269
- c = color
1270
- if isinstance(label, numbers.Number) and class_name:
1271
- c = color_table[(int(label) + 1) % 20]
1272
- label = class_name[int(label)]
1273
- if not c: c = color_table[1]
1277
+ if class_name: labels = [class_name[i] for i in labels]
1278
+ for i, (label, bbox) in enumerate(zip(labels, boxes)):
1279
+ c = color if color else color_label.get_color(label) # 相同类别相同颜色
1280
+ if not kColor: c = color_table[(i + 1) % len(color_table)]
1274
1281
  image = draw_image_bbox_text(image, bbox, str(label), color=c, thickness=thickness, fontScale=fontScale,
1275
- drawType=drawType, top=top)
1282
+ alpha=alpha, drawType=drawType, top=top)
1276
1283
  return image
1277
1284
 
1278
1285
 
1279
- draw_image_boxes_labels = draw_image_bboxes_labels
1286
+ draw_image_bboxes_labels = draw_image_boxes_labels
1280
1287
 
1281
1288
 
1282
1289
  def draw_image_rects_labels(image, rects, labels, class_name=None, color=None, thickness=0, fontScale=0):
@@ -1469,71 +1476,22 @@ def draw_text(image, point, text, color=(255, 0, 0), fontScale=0, thickness=0, d
1469
1476
  :param image:
1470
1477
  :param point:
1471
1478
  :param text:
1472
- :param drawType: custom or simple
1479
+ :param drawType: en/ch/simple
1473
1480
  :return:
1474
1481
  """
1475
1482
  point = (int(point[0]), int(point[1]))
1476
1483
  thickness, fontScale = get_linesize(max(image.shape), thickness=thickness, fontScale=fontScale)
1477
1484
  fontFace = cv2.FONT_HERSHEY_COMPLEX
1478
1485
  if drawType == "custom" or drawType == "en":
1479
- text_wh, baseline = cv2.getTextSize(str(text), fontFace, fontScale, abs(thickness))
1480
- text_loc = (point[0], point[1] + text_wh[1])
1481
- cv2.rectangle(image, (text_loc[0] - 2 // 2, text_loc[1] - 2 - baseline),
1482
- (text_loc[0] + text_wh[0], text_loc[1] + text_wh[1]), color=color, thickness=-1)
1483
- # draw score value
1484
- cv2.putText(image, str(text), (text_loc[0], text_loc[1] + baseline), fontFace, fontScale, (255, 255, 255),
1485
- abs(thickness), 2)
1486
+ bbox = [point[0], point[1]]
1487
+ image = draw_bbox_text_en(image, bbox, text, color=color, thickness=thickness, fontScale=fontScale)
1488
+ elif drawType == "chinese" or drawType == "ch":
1489
+ bbox = [point[0], point[1]]
1490
+ image = draw_bbox_text_ch(image, bbox, text, color=color, thickness=thickness, fontScale=fontScale)
1486
1491
  elif drawType == "simple":
1487
1492
  cv2.putText(image, str(text), (point[0], point[1]), fontFace, fontScale, color=color, thickness=abs(thickness))
1488
- if drawType == "chinese" or drawType == "ch":
1489
- cv2_putText(image, str(text), point, color=color, fontScale=fontScale, thickness=abs(thickness))
1490
- return image
1491
-
1492
-
1493
- def draw_image_bbox_text_bk(image, bbox, text, color, thickness=2, fontScale=0.8, alpha=0, drawType="custom", top=True):
1494
- """
1495
- :param image:
1496
- :param bbox:
1497
- :param color:
1498
- :param text:
1499
- :param drawType:
1500
- :param top:
1501
- :return:
1502
- """
1503
- text = str(text)
1504
- if alpha > 0:
1505
- bgimg = draw_image_bbox_text(image.copy(), bbox, text=text, color=color, thickness=thickness,
1506
- fontScale=fontScale, drawType=drawType, top=top, alpha=0)
1507
- image[:] = cv2.addWeighted(bgimg, 1 - alpha, image, alpha, 0)
1508
- return image
1509
- thickness, fontScale = get_linesize(max(image.shape), thickness=thickness, fontScale=fontScale)
1510
- # text_loc = (bbox[0], bbox[1]) if top else (bbox[0], bbox[3])
1511
- if not text: drawType = "simple"
1512
- text_wh, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_COMPLEX, fontScale, abs(thickness))
1513
- if top:
1514
- # text_loc = (bbox[0], bbox[1] + text_wh[1]) # 在左上角下方绘制文字
1515
- text_loc = (bbox[0], bbox[1] - baseline // 2) # 在左上角上方绘制文字
1516
1493
  else:
1517
- text_loc = (bbox[0], bbox[3] + text_wh[1] + baseline // 2)
1518
- if drawType == "chinese" or drawType == "ch":
1519
- if not top: text_loc = (text_loc[0], text_loc[1] - baseline)
1520
- cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness)
1521
- cv2_putText(image, str(text), text_loc, color=color, fontScale=fontScale, thickness=abs(thickness))
1522
- elif drawType == "simple" or drawType == "en":
1523
- cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness, 8, 0)
1524
- cv2.putText(image, str(text), text_loc, cv2.FONT_HERSHEY_COMPLEX, fontScale, color, abs(thickness))
1525
- elif drawType == "custom":
1526
- text_loc = (bbox[0], bbox[1] + text_wh[1] + baseline // 2) # 在左上角下方绘制文字
1527
- # text_loc = (bbox[0], bbox[1] + baseline) # 在左上角上方绘制文字
1528
- cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness)
1529
- bg1 = (text_loc[0], text_loc[1] - text_wh[1] - baseline // 2)
1530
- bg2 = (text_loc[0] + text_wh[0], text_loc[1] + baseline // 2) # 底纹等于字体的宽度
1531
- # bg2 = (max(bbox[2], text_loc[0] + text_wh[0]), text_loc[1] + baseline // 2) # 底纹等于box的宽度
1532
- cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,再填充
1533
- cv2.rectangle(image, bg1, bg2, color, -1)
1534
- # draw score value
1535
- cv2.putText(image, str(text), (text_loc[0], text_loc[1]), cv2.FONT_HERSHEY_COMPLEX, fontScale,
1536
- (255, 255, 255), abs(thickness))
1494
+ cv2.putText(image, str(text), (point[0], point[1]), fontFace, fontScale, color=color, thickness=abs(thickness))
1537
1495
  return image
1538
1496
 
1539
1497
 
@@ -1547,6 +1505,7 @@ def draw_image_bbox_text(image, bbox, text, color, thickness=2, fontScale=0.8, a
1547
1505
  :param top:
1548
1506
  :return:
1549
1507
  """
1508
+ bbox = [int(b) for b in bbox]
1550
1509
  text = str(text)
1551
1510
  if alpha > 0:
1552
1511
  bgimg = draw_image_bbox_text(image.copy(), bbox, text=text, color=color, thickness=thickness,
@@ -1554,52 +1513,54 @@ def draw_image_bbox_text(image, bbox, text, color, thickness=2, fontScale=0.8, a
1554
1513
  image[:] = cv2.addWeighted(bgimg, 1 - alpha, image, alpha, 0)
1555
1514
  return image
1556
1515
  if drawType == "ch" or drawType == "chinese":
1557
- image = draw_ch_text(image, bbox, text, color, thickness=thickness, fontScale=fontScale)
1516
+ image = draw_bbox_text_ch(image, bbox, text, color, thickness=thickness, fontScale=fontScale)
1558
1517
  elif drawType == "simple":
1559
1518
  text_wh, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_COMPLEX, fontScale, abs(thickness))
1560
1519
  text_loc = (bbox[0], bbox[1] - baseline // 2) # 在左上角上方绘制文字
1561
1520
  cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness, 8, 0)
1562
1521
  cv2.putText(image, str(text), text_loc, cv2.FONT_HERSHEY_COMPLEX, fontScale, color, abs(thickness))
1563
1522
  else: # custom ,en
1564
- image = draw_en_text(image, bbox, text, color, thickness=thickness, fontScale=fontScale)
1523
+ image = draw_bbox_text_en(image, bbox, text, color, thickness=thickness, fontScale=fontScale)
1565
1524
  return image
1566
1525
 
1567
1526
 
1568
- def draw_ch_text(image, bbox, text, color, thickness=2, fontScale=0.8):
1527
+ def draw_bbox_text_ch(image, bbox, text, color, thickness=2, fontScale=0.8):
1569
1528
  thickness, fontScale = get_linesize(max(image.shape), thickness=thickness, fontScale=fontScale)
1570
1529
  text_wh, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_COMPLEX, fontScale, abs(thickness))
1571
- text_wh = (text_wh[0], int(text_wh[1] * 0.7)) # 与draw_en_text区别,底纹缩小80%
1530
+ baseline = baseline + 1
1531
+ text_wh = (text_wh[0], int(text_wh[1] * 0.8)) # 与draw_bbox_text_en区别,底纹缩小80%
1572
1532
  text_loc = (bbox[0], bbox[1] - baseline // 2) # 在左上角上方绘制文字
1573
1533
  text_bgy = text_loc[1] - text_wh[1] - baseline // 2
1574
1534
  if text_bgy < 0: # 如果文字超出图片范围,切换到下方绘制
1575
1535
  text_loc = (bbox[0], bbox[1] + text_wh[1] + baseline // 2) # 在左上角下方绘制文字
1576
- cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness)
1577
1536
  bg1 = (text_loc[0], text_loc[1] - text_wh[1] - baseline // 2)
1578
1537
  bg2 = (text_loc[0] + text_wh[0], text_loc[1] + baseline // 2) # 底纹等于字体的宽度
1579
1538
  # bg2 = (max(bbox[2], text_loc[0] + text_wh[0]), text_loc[1] + baseline // 2) # 底纹等于box的宽度
1580
- cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,再填充
1581
- cv2.rectangle(image, bg1, bg2, color, -1)
1582
- # draw score value
1539
+ cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,避免断裂
1540
+ cv2.rectangle(image, bg1, bg2, color, -1) # 绘制底纹
1541
+ if len(bbox) == 4: cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness) # 绘制bbox
1542
+ text_loc = (text_loc[0], int(text_loc[1] * 1.0)) # 调整字体位置
1583
1543
  cv2_putText(image, str(text), text_loc, color=(255, 255, 255), fontScale=fontScale, thickness=abs(thickness))
1584
1544
  return image
1585
1545
 
1586
1546
 
1587
- def draw_en_text(image, bbox, text, color, thickness=2, fontScale=0.8):
1547
+ def draw_bbox_text_en(image, bbox, text, color, thickness=2, fontScale=0.8):
1588
1548
  thickness, fontScale = get_linesize(max(image.shape), thickness=thickness, fontScale=fontScale)
1589
- text_wh, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_COMPLEX, fontScale, abs(thickness))
1549
+ text_wh, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_SIMPLEX, fontScale, abs(thickness))
1550
+ baseline = baseline + 1
1590
1551
  text_loc = (bbox[0], bbox[1] - baseline // 2) # 在左上角上方绘制文字
1591
1552
  text_bgy = text_loc[1] - text_wh[1] - baseline // 2
1592
1553
  if text_bgy < 0: # 如果文字超出图片范围,切换到下方绘制
1593
1554
  text_loc = (bbox[0], bbox[1] + text_wh[1] + baseline // 2) # 在左上角下方绘制文字
1594
- cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness)
1595
1555
  bg1 = (text_loc[0], text_loc[1] - text_wh[1] - baseline // 2)
1596
1556
  bg2 = (text_loc[0] + text_wh[0], text_loc[1] + baseline // 2) # 底纹等于字体的宽度
1597
1557
  # bg2 = (max(bbox[2], text_loc[0] + text_wh[0]), text_loc[1] + baseline // 2) # 底纹等于box的宽度
1598
- cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,再填充
1599
- cv2.rectangle(image, bg1, bg2, color, -1)
1600
- # draw score value
1601
- cv2.putText(image, str(text), (text_loc[0], text_loc[1]), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=fontScale,
1602
- color=(255, 255, 255), thickness=abs(thickness))
1558
+ cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,避免断裂
1559
+ cv2.rectangle(image, bg1, bg2, color, -1) # 绘制底纹
1560
+ if len(bbox) == 4: cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness) # 绘制bbox
1561
+ text_loc = (text_loc[0], int(text_loc[1] * 0.95)) # 调整字体位置
1562
+ cv2.putText(image, str(text), (text_loc[0], text_loc[1]), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
1563
+ fontScale=fontScale, color=(255, 255, 255), thickness=abs(thickness))
1603
1564
  return image
1604
1565
 
1605
1566
 
@@ -2769,7 +2730,9 @@ def draw_image_contours(image, contours: List[np.ndarray], texts=[], color=(), a
2769
2730
  """
2770
2731
  colors = [(0, 0, 0)] + colors if colors else color_table
2771
2732
  for i in range(0, len(contours)):
2772
- c = color if color else colors[(i + 1) % 20]
2733
+ c = color
2734
+ if not color:
2735
+ c = color_label.get_color(texts[i]) if texts else colors[(i + 1) % len(colors)] # 相同类别相同颜色
2773
2736
  t = str(texts[i]) if texts else ""
2774
2737
  p = np.asarray(contours[i], dtype=np.int32)
2775
2738
  b = (min(p[:, 0]), min(p[:, 1]), max(p[:, 0]), max(p[:, 1]))
@@ -2783,6 +2746,9 @@ def draw_image_contours(image, contours: List[np.ndarray], texts=[], color=(), a
2783
2746
  return image
2784
2747
 
2785
2748
 
2749
+ draw_image_contours_texts = draw_image_contours
2750
+
2751
+
2786
2752
  def draw_image_contours_labels_texts(image, contours: List[np.ndarray], labels=[], texts=[], color=(), alpha=0.5,
2787
2753
  thickness=1, fontScale=0.8, drawType="ch", colors=None):
2788
2754
  """
@@ -2795,9 +2761,8 @@ def draw_image_contours_labels_texts(image, contours: List[np.ndarray], labels=[
2795
2761
  :param thickness:轮廓线宽
2796
2762
  :return:
2797
2763
  """
2798
- colors = [(0, 0, 0)] + colors if colors else color_table
2799
2764
  for i in range(0, len(contours)):
2800
- c = color if color else color_hash.get_color(labels[i]) # 相同类别相同颜色
2765
+ c = color if color else color_label.get_color(labels[i]) # 相同类别相同颜色
2801
2766
  t = str(texts[i]) if texts else ""
2802
2767
  p = np.asarray(contours[i], dtype=np.int32)
2803
2768
  b = (min(p[:, 0]), min(p[:, 1]), max(p[:, 0]), max(p[:, 1]))
@@ -24,6 +24,37 @@ from multiprocessing import Pool, Process
24
24
  thread_lock = threading.Lock()
25
25
 
26
26
 
27
+ class ThreadLock:
28
+ """A decorator class for ensuring thread-safe execution of a function or method.
29
+ This class can be used as a decorator to make sure that if the decorated function is called from multiple threads,
30
+ only one thread at a time will be able to execute the function.
31
+
32
+ Attributes:
33
+ lock (threading.Lock): A lock object used to manage access to the decorated function.
34
+
35
+ Examples:
36
+ >>> from ultralytics.utils import ThreadingLocked
37
+ >>> @ThreadLock()
38
+ ... def my_function():
39
+ ... # Your code here
40
+ """
41
+
42
+ def __init__(self):
43
+ """Initialize the decorator class with a threading lock."""
44
+ self.lock = threading.Lock()
45
+
46
+ def __call__(self, f):
47
+ """Run thread-safe execution of function or method."""
48
+ from functools import wraps
49
+
50
+ @wraps(f)
51
+ def decorated(*args, **kwargs):
52
+ """Apply thread-safety to the decorated function or method."""
53
+ with self.lock:
54
+ return f(*args, **kwargs)
55
+
56
+ return decorated
57
+
27
58
  def thread_safety(func, *args, **kwargs):
28
59
  """
29
60
  使用以下加锁方式
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybaseutils
3
- Version: 2.4.35
3
+ Version: 2.5.0
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -217,6 +217,8 @@ test_py/aije/convert_cvat2labelme.py
217
217
  test_py/aije/convert_labelme2coco.py
218
218
  test_py/aije/convert_labelme2voc.py
219
219
  test_py/aije/copy_move.py
220
+ test_py/aije/demo_labelme_class_counts.py
221
+ test_py/aije/demo_labelme_crop_aicq.py
220
222
  test_py/aije/demo_labelme_crop_aije.py
221
223
  test_py/aije/demo_labelme_crop_ailt.py
222
224
  test_py/aije/demo_labelme_shock.py
@@ -71,6 +71,7 @@ def readme2rst(in_file='README.md'):
71
71
  encoding:指定编码集
72
72
  outputfile:目标文件,比如test.html(注意outputfile的后缀要和to一致)
73
73
  """
74
+ import pypandoc
74
75
  # 修复中文乱码问题: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
75
76
  pypandoc.convert_file(in_file, 'html', format='md', outputfile="README.html", encoding='utf-8')
76
77
  pypandoc.convert_file(in_file, 'rst', format='md', outputfile="README.rst", encoding='utf-8')
@@ -0,0 +1,20 @@
1
+ """
2
+ # --------------------------------------------------------
3
+ # @Author : Pan
4
+ # @E-mail :
5
+ # @Date : 2026-10-09 20:29:58
6
+ # @Brief :
7
+ # --------------------------------------------------------
8
+ """
9
+ from pybaseutils.dataloader import parser_labelme
10
+
11
+ if __name__ == "__main__":
12
+ # TODO 统计labelme数据集每个类别的样本数量
13
+ # example_for_segment()
14
+ # example_for_keypoints()
15
+ datasets = [
16
+ '/home/PKing/edudata/dataset/AICQ/dataset/data-2026-10-06/images',
17
+ '/home/PKing/edudata/dataset/AICQ/dataset/data-2026-09-30/images',
18
+ ]
19
+ counts = parser_labelme.get_class_counts(datasets)
20
+ print(counts)