pybaseutils 2.4.0__tar.gz → 2.4.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 (309) hide show
  1. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/PKG-INFO +10 -6
  2. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/README.md +1 -1
  3. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/__init__.py +1 -1
  4. pybaseutils-2.4.2/pybaseutils/base/list_queue.py +116 -0
  5. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/base64_utils.py +17 -9
  6. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/video_utils.py +7 -2
  7. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_labelme.py +15 -15
  8. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/file_utils.py +43 -17
  9. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/http_utils.py +2 -2
  10. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/image_utils.py +17 -11
  11. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/time_utils.py +19 -0
  12. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/PKG-INFO +10 -6
  13. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/setup.cfg +0 -0
  14. pybaseutils-2.4.2/test_py/demo1.py +9 -0
  15. pybaseutils-2.4.2/test_py/demo4.py +19 -0
  16. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_lableme_vis.py +4 -4
  17. pybaseutils-2.4.0/pybaseutils/base/list_queue.py +0 -64
  18. pybaseutils-2.4.0/test_py/demo1.py +0 -13
  19. pybaseutils-2.4.0/test_py/demo4.py +0 -74
  20. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/LICENCE +0 -0
  21. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/__init__.py +0 -0
  22. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/audio_utils.py +0 -0
  23. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/pyaudio_utils.py +0 -0
  24. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/vad_utils.py +0 -0
  25. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/base/__init__.py +0 -0
  26. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/base/dict_queue.py +0 -0
  27. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/batch_utils.py +0 -0
  28. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/build_utils/__init__.py +0 -0
  29. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/build_utils/cython_utils.py +0 -0
  30. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  31. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/__init__.py +0 -0
  32. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/kmean.py +0 -0
  33. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/maxmin_distance.py +0 -0
  34. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/similarity.py +0 -0
  35. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/color_utils.py +0 -0
  36. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/config_utils.py +0 -0
  37. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/__init__.py +0 -0
  38. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_coco.py +0 -0
  39. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_cvat.py +0 -0
  40. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_labelme.py +0 -0
  41. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_voc.py +0 -0
  42. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/concat_coco.py +0 -0
  43. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  44. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_coco2voc.py +0 -0
  45. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  46. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  47. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  48. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
  49. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  50. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  51. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2coco.py +0 -0
  52. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  53. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2voc.py +0 -0
  54. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  55. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
  56. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  57. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/prelabelme.py +0 -0
  58. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/coords_utils.py +0 -0
  59. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/__init__.py +0 -0
  60. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/corner_utils.py +0 -0
  61. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/monitor.py +0 -0
  62. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/mouse_utils.py +0 -0
  63. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/nms_utils.py +0 -0
  64. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/data_utils.py +0 -0
  65. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/__init__.py +0 -0
  66. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/balanced_classes.py +0 -0
  67. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/base_coco.py +0 -0
  68. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/base_dataset.py +0 -0
  69. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/data_resample.py +0 -0
  70. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  71. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  72. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  73. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  74. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_image_text.py +0 -0
  75. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
  76. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_voc.py +0 -0
  77. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_yolo.py +0 -0
  78. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  79. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dict_uils.py +0 -0
  80. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/QueueTable.py +0 -0
  81. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/__init__.py +0 -0
  82. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/demo.py +0 -0
  83. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/kalman_filter.py +0 -0
  84. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/mean_filter.py +0 -0
  85. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/motion_filter.py +0 -0
  86. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/pose_filter.py +0 -0
  87. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/font_style/__init__.py +0 -0
  88. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/font_utils.py +0 -0
  89. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/geometry_tools.py +0 -0
  90. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/heatmap_utils.py +0 -0
  91. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/json_utils.py +0 -0
  92. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/log.py +0 -0
  93. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/log_utils.py +0 -0
  94. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/media/__init__.py +0 -0
  95. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/media/ffmpeg_utils.py +0 -0
  96. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/__init__.py +0 -0
  97. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/accuracy.py +0 -0
  98. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/average_meter.py +0 -0
  99. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/class_report.py +0 -0
  100. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/plot_pr.py +0 -0
  101. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/plot_roc.py +0 -0
  102. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/numpy_utils.py +0 -0
  103. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pandas_utils.py +0 -0
  104. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/plot_utils.py +0 -0
  105. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/__init__.py +0 -0
  106. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/bones_utils.py +0 -0
  107. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/human_pose.py +0 -0
  108. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/pose_utils.py +0 -0
  109. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pycpp/__init__.py +0 -0
  110. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pycpp/demo.py +0 -0
  111. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pycpp/main.py +0 -0
  112. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/server/__init__.py +0 -0
  113. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/server/apm_server.py +0 -0
  114. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/setup_config.py +0 -0
  115. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/singleton_utils.py +0 -0
  116. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/text_utils.py +0 -0
  117. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/thread_utils.py +0 -0
  118. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracemalloc_utils.py +0 -0
  119. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracemalloc_utils2.py +0 -0
  120. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/QueueTable.py +0 -0
  121. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/__init__.py +0 -0
  122. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/demo.py +0 -0
  123. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/kalman_filter.py +0 -0
  124. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/mean_filter.py +0 -0
  125. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/motion_filter.py +0 -0
  126. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/pose_filter.py +0 -0
  127. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/__init__.py +0 -0
  128. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/affine_transform.py +0 -0
  129. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/augment_utils.py +0 -0
  130. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/face_alignment.py +0 -0
  131. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/transform_utils.py +0 -0
  132. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/__init__.py +0 -0
  133. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/app_gradio_image.py +0 -0
  134. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/app_stweb_image.py +0 -0
  135. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/app_webio_image.py +0 -0
  136. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/demo.py +0 -0
  137. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/word_utils.py +0 -0
  138. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/worker.py +0 -0
  139. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/yaml_utils.py +0 -0
  140. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/SOURCES.txt +0 -0
  141. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/dependency_links.txt +0 -0
  142. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/not-zip-safe +0 -0
  143. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/top_level.txt +0 -0
  144. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/setup.py +0 -0
  145. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/Image_enhance/__init__.py +0 -0
  146. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/Image_enhance/dmeo01.py +0 -0
  147. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/WebCrawler/__init__.py +0 -0
  148. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/WebCrawler/search_baidu.py +0 -0
  149. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/WebCrawler/search_biying.py +0 -0
  150. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/__init__.py +0 -0
  151. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/__init__.py +0 -0
  152. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/action_dataset.py +0 -0
  153. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/build_cython.py +0 -0
  154. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/build_pyarmor.py +0 -0
  155. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/build_service.py +0 -0
  156. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/convert_cvat2labelme.py +0 -0
  157. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/convert_labelme2coco.py +0 -0
  158. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/convert_labelme2voc.py +0 -0
  159. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/copy_move.py +0 -0
  160. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_labelme_crop.py +0 -0
  161. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_labelme_shock.py +0 -0
  162. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_video_aije.py +0 -0
  163. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_voc_crop.py +0 -0
  164. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_voc_vis.py +0 -0
  165. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/get_pair_data.py +0 -0
  166. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/video_convertor.py +0 -0
  167. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/__init__.py +0 -0
  168. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/demo.py +0 -0
  169. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/main.py +0 -0
  170. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/main_read.py +0 -0
  171. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/segment.py +0 -0
  172. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  173. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/speechbrain_demo.py +0 -0
  174. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio_demo1.py +0 -0
  175. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/camera/__init__.py +0 -0
  176. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/camera/demo.py +0 -0
  177. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/captcha/__init__.py +0 -0
  178. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/captcha/demo.py +0 -0
  179. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/class_attribute.py +0 -0
  180. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/class_names.py +0 -0
  181. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/AffectNet.py +0 -0
  182. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/AsianMovie.py +0 -0
  183. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/BITVehicle2voc.py +0 -0
  184. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/BSTLD2voc.py +0 -0
  185. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/CCPD.py +0 -0
  186. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/CCPD2voc.py +0 -0
  187. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/FL3D_dataset.py +0 -0
  188. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/FreiHAND2coco.py +0 -0
  189. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/MTFL2voc.py +0 -0
  190. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/TT100K.py +0 -0
  191. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/WaterMeters1.py +0 -0
  192. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/WaterMeters2.py +0 -0
  193. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/__init__.py +0 -0
  194. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/concat_coco.py +0 -0
  195. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_coco2voc.py +0 -0
  196. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_cvat2labelme.py +0 -0
  197. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_gesture2hand.py +0 -0
  198. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2coco.py +0 -0
  199. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2cvat.py +0 -0
  200. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2labelme.py +0 -0
  201. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2voc.py +0 -0
  202. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_voc2labelme.py +0 -0
  203. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/fatigue_driving.py +0 -0
  204. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/fdd_dataset.py +0 -0
  205. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/get_pair_data.py +0 -0
  206. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/handpose2coco.py +0 -0
  207. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/insects_for_aichallenger.py +0 -0
  208. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/tt100k_utils.py +0 -0
  209. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/ua_detrac2voc.py +0 -0
  210. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/ucf101_dataset.py +0 -0
  211. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/voc_sbd2labelme.py +0 -0
  212. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/__init__.py +0 -0
  213. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/build_cython.py +0 -0
  214. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/build_pyarmor.py +0 -0
  215. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/cryptography_demo.py +0 -0
  216. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/fun_sum.py +0 -0
  217. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/main.py +0 -0
  218. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/model_des_enctypt.py +0 -0
  219. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/model_enctypt.py +0 -0
  220. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/date_dataset.py +0 -0
  221. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/date_demo.py +0 -0
  222. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/datedataset_bk.py +0 -0
  223. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo2.py +0 -0
  224. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo3.py +0 -0
  225. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_async_await1.py +0 -0
  226. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_async_await2.py +0 -0
  227. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_coco_vis.py +0 -0
  228. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_copy_files.py +0 -0
  229. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_copy_files_for_voc.py +0 -0
  230. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_ffmpy.py +0 -0
  231. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_annular_to_rect.py +0 -0
  232. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_pair_file.py +0 -0
  233. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_polygon.py +0 -0
  234. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_trt.py +0 -0
  235. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_get_file_label.py +0 -0
  236. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_get_file_list.py +0 -0
  237. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_gif.py +0 -0
  238. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_gif_video.py +0 -0
  239. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_image_crop.py +0 -0
  240. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_kpts.py +0 -0
  241. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_labelme.py +0 -0
  242. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_labelme_crop.py +0 -0
  243. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_metrics.py +0 -0
  244. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_mosaic.py +0 -0
  245. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_mouse.py +0 -0
  246. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_nii.py +0 -0
  247. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_pandas.py +0 -0
  248. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_plot.py +0 -0
  249. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_prelabelme.py +0 -0
  250. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_rename.py +0 -0
  251. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_standard_image .py +0 -0
  252. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_standard_video .py +0 -0
  253. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_taichi.py +0 -0
  254. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_video.py +0 -0
  255. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_video_crop.py +0 -0
  256. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_voc_crop.py +0 -0
  257. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_voc_vis.py +0 -0
  258. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_word_similar.py +0 -0
  259. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_worker1.py +0 -0
  260. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_worker2.py +0 -0
  261. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/__init__.py +0 -0
  262. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/demo.py +0 -0
  263. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/detect_face_person.py +0 -0
  264. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/predet_labelme.py +0 -0
  265. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/edit_distance/__init__.py +0 -0
  266. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/edit_distance/demo.py +0 -0
  267. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/edit_distance/text_matching.py +0 -0
  268. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/__init__.py +0 -0
  269. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/app.py +0 -0
  270. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/utils/__init__.py +0 -0
  271. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/utils/utils.py +0 -0
  272. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/get_file_list.py +0 -0
  273. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/gradio_app.py +0 -0
  274. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/gradio_app_v2.py +0 -0
  275. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/__init__.py +0 -0
  276. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/demo_correction_v1.py +0 -0
  277. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/demo_correction_v2.py +0 -0
  278. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/demo_correction_v3.py +0 -0
  279. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/kafka_worker.py +0 -0
  280. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/men_tracemalloc.py +0 -0
  281. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/__init__.py +0 -0
  282. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/demo01.py +0 -0
  283. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/demo02.py +0 -0
  284. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/hello_milvus.py +0 -0
  285. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/milvus_client.py +0 -0
  286. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/model_process.py +0 -0
  287. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/performance.py +0 -0
  288. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/pose/__init__.py +0 -0
  289. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/pose/human_pose.py +0 -0
  290. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/redis_py/__init__.py +0 -0
  291. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/redis_py/knn_search.py +0 -0
  292. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/redis_py/redis_client.py +0 -0
  293. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/__init__.py +0 -0
  294. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/base.py +0 -0
  295. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/component.py +0 -0
  296. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/main.py +0 -0
  297. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/register.py +0 -0
  298. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/GRU.py +0 -0
  299. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/TCN.py +0 -0
  300. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/__init__.py +0 -0
  301. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/demo.py +0 -0
  302. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/slowfastnet.py +0 -0
  303. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/test_fr/__init__.py +0 -0
  304. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/test_fr/demo11.py +0 -0
  305. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/test_fr/idcardocr.py +0 -0
  306. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/__init__.py +0 -0
  307. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/asr_clients.py +0 -0
  308. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/asr_service.py +0 -0
  309. {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/chat_service.py +0 -0
@@ -1,13 +1,19 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pybaseutils
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
7
7
  Author-email: 390737991@qq.com
8
8
  License: MIT
9
- Platform: UNKNOWN
10
9
  License-File: LICENCE
10
+ Dynamic: author
11
+ Dynamic: author-email
12
+ Dynamic: description
13
+ Dynamic: home-page
14
+ Dynamic: license
15
+ Dynamic: license-file
16
+ Dynamic: summary
11
17
 
12
18
  base-utils
13
19
  ==========
@@ -37,7 +43,7 @@ pybaseutils是个人开发常用的python库,集成了python等常用的算法
37
43
  - 安装方法2:pip install –upgrade -i https://pypi.org/simple
38
44
  pybaseutils (从pypi源下载最新版本)
39
45
  - 设置默认的镜像源:pip config set global.index-url
40
- https://pypi.tuna.tsinghua.edu.cn/simple)
46
+ https://pypi.tuna.tsinghua.edu.cn/simple
41
47
  - 超时异常:pip –default-timeout=1000000000
42
48
 
43
49
  一些问题修复说明
@@ -142,5 +148,3 @@ base_utils(C++)
142
148
  DEBUG_IMSHOW("image", image);
143
149
  return 0;
144
150
  }
145
-
146
-
@@ -20,7 +20,7 @@ pybaseutils是个人开发常用的python库,集成了python等常用的算法
20
20
 
21
21
  - 安装方法1:pip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple pybaseutils (有延时,可能不是最新版本)
22
22
  - 安装方法2:pip install --upgrade -i https://pypi.org/simple pybaseutils (从pypi源下载最新版本)
23
- - 设置默认的镜像源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple)
23
+ - 设置默认的镜像源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
24
24
  - 超时异常:pip --default-timeout=1000000000
25
25
 
26
26
  ## 一些问题修复说明
@@ -8,4 +8,4 @@
8
8
  # --------------------------------------------------------
9
9
  """
10
10
 
11
- __version__ = '2.4.0'
11
+ __version__ = '2.4.2'
@@ -0,0 +1,116 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Author : Pan
5
+ # @E-mail :
6
+ # @Date : 2025-07-15 10:56:37
7
+ # @Brief : 列表队列
8
+ # --------------------------------------------------------
9
+ """
10
+ import math
11
+ import queue
12
+
13
+
14
+ class Queue():
15
+ """普通队列,多个POD请求时,无法实现同步数据"""
16
+
17
+ def __init__(self, name="defaultlist", maxsize=10, **kwargs):
18
+ """
19
+ queue是一个列表队列,队列大小由maxsize指定
20
+ :param name: 队列名称
21
+ :param maxsize:
22
+ """
23
+ self.name = name
24
+ self.maxsize = maxsize
25
+ self.queue = queue.Queue(maxsize=maxsize)
26
+
27
+ def empty(self, ):
28
+ return self.queue.empty()
29
+
30
+ def __del__(self):
31
+ if not self.queue.empty(): self.queue.queue.clear()
32
+
33
+ def get_queue(self, ):
34
+ return self.queue.queue
35
+
36
+ def set_queue(self, queue):
37
+ self.queue = queue
38
+
39
+ def qsize(self) -> int:
40
+ return self.queue.qsize()
41
+
42
+ def pop(self, block=True, timeout=None):
43
+ """
44
+ Remove and return an item from the queue,index=0
45
+ :param block: 是否阻塞等待
46
+ :param timeout: 超时时间
47
+ :return: 弹出的队列数据
48
+ """
49
+ out = self.queue.get(block=block, timeout=timeout)
50
+ return out
51
+
52
+ def pop_items(self, nums=1, block=True, timeout=None):
53
+ """
54
+ 弹出队列的多个项
55
+ :param nums: 弹出队列的数量
56
+ :param block: 是否阻塞等待
57
+ :param timeout: 超时时间
58
+ :return: 弹出的队列数据
59
+ """
60
+ items = [self.pop(block=block, timeout=timeout) for i in range(nums)]
61
+ return items
62
+
63
+ def get(self, index=0):
64
+ """get an item from the queue,index=0"""
65
+ return self.queue.queue[index]
66
+
67
+ def get_items(self, nums=1, index: list = []):
68
+ """
69
+ 获取队列的多个项
70
+ :param nums: 获取队列的数量
71
+ :param index: 获取队列的索引
72
+ :return: 获取的队列数据
73
+ """
74
+ if index:
75
+ items = [self.queue.queue[i] for i in index]
76
+ else:
77
+ items = [self.queue.queue[i] for i in range(nums)]
78
+ return items
79
+
80
+ def put(self, item, block=False, timeout=None):
81
+ """
82
+ Put an item into the queue,index=n
83
+ :param item: 要放入队列的项
84
+ :param block: True当队列满了,阻塞等待插入数据; False,不等待,直接弹出队头数据再插入数据
85
+ :param timeout: 超时时间
86
+ :return:
87
+ """
88
+ while self.qsize() >= self.maxsize and not block: self.pop()
89
+ return self.queue.put(item, block=block, timeout=timeout)
90
+
91
+ def get_window(self, winsize=1, overlap=0.0, block=True, timeout=None):
92
+ """
93
+ 获取队列的窗口数据
94
+ :param winsize: 窗口大小
95
+ :param overlap: 窗口重叠率
96
+ :return: 队列窗口数据
97
+ """
98
+ size = int(winsize * overlap)
99
+ data1 = self.pop_items(nums=winsize - size, block=block, timeout=timeout)
100
+ data2 = self.get_items(nums=size)
101
+ return data1 + data2
102
+
103
+
104
+ if __name__ == '__main__':
105
+ q = Queue(maxsize=3)
106
+ q.put({"file": "1.jpg"})
107
+ q.put({"file": "2.jpg"})
108
+ q.put({"file": "3.jpg"})
109
+ q.put({"file": "4.jpg"})
110
+ q.put({"file": "5.jpg"})
111
+ print(q.get_queue())
112
+ print(q.get(0))
113
+ print(q.get_queue())
114
+ print(q.pop(3))
115
+ print(q.get_queue())
116
+ print(1 / 2)
@@ -14,7 +14,7 @@ import base64
14
14
  import numpy as np
15
15
  from typing import Any
16
16
 
17
- IMG_PREFIX = "image/png" # 图片base64字符串前缀
17
+ IMG_PREFIX = "image/jpg" # 图片base64字符串前缀
18
18
  precision = 6 # 小数点精度
19
19
 
20
20
 
@@ -35,7 +35,7 @@ def base642image(bs64, prefix=IMG_PREFIX, use_rgb=False) -> np.ndarray:
35
35
  bs64 = bs64[len(prefix):]
36
36
  bs64 = bytes(bs64, 'utf-8')
37
37
  image = base64.b64decode(bs64)
38
- image = np.fromstring(image, np.uint8)
38
+ image = np.frombuffer(image, np.uint8)
39
39
  image = cv2.imdecode(image, flags=cv2.IMREAD_UNCHANGED)
40
40
  # image = cv2.imdecode(image, cv2.IMREAD_COLOR)
41
41
  if use_rgb:
@@ -63,7 +63,8 @@ def image2base64(image: np.ndarray, prefix=IMG_PREFIX, use_rgb=False) -> str:
63
63
  if len(img.shape) == 3 and use_rgb:
64
64
  img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
65
65
  ext = prefix.split("/")
66
- ext = "." + ext[1] if len(ext) == 2 else ".png"
66
+ # ext = "." + ext[1] if len(ext) == 2 else ".png" # TODO libpng error: bad parameters to zlib
67
+ ext = "." + ext[1] if len(ext) == 2 else ".jpg"
67
68
  img = cv2.imencode(ext, img)[1]
68
69
  bs64 = prefix + base64.b64encode(img).decode()
69
70
  return bs64
@@ -142,10 +143,17 @@ def base642array(data: Any, prefix=IMG_PREFIX, use_rgb=False) -> Any:
142
143
 
143
144
  serialization = array2base64 # 序列化
144
145
  deserialization = base642array # 反序列化
145
-
146
146
  if __name__ == "__main__":
147
- file = "/home/dm/project/python-learning-notes/utils/test.jpg"
148
- bgr1 = cv2.imread(file)
149
- image_base64 = image2base64(bgr1)
150
- image_base64 = file2base64(file)
151
- bgr2 = base642image(image_base64, use_rgb=False)
147
+ from pybaseutils import file_utils, image_utils
148
+
149
+ image_dir = "/home/PKing/Downloads/image"
150
+ image_dir = "/media/PKing/dev1/SDK/base-utils/data/labelme/JPEGImages"
151
+ image_list = file_utils.get_images_list(image_dir)
152
+ for image_file in image_list:
153
+ print(image_file)
154
+ src = image_utils.read_image(image_file, use_rgb=True)
155
+ image_utils.show_image("src", src, delay=10)
156
+ data = {"image": src, "file": image_file}
157
+ data = serialization(data)
158
+ data = deserialization(data)
159
+ print(data.keys())
@@ -222,7 +222,8 @@ def video_capture(video_file: int or str, save_video: str or int = None, interva
222
222
  title: 控制显示窗口名
223
223
  :return:
224
224
  """
225
- assert os.path.exists(video_file), f"video_file={video_file}"
225
+ video_file = file_utils.str2number(video_file)
226
+ if isinstance(video_file, str): assert os.path.exists(video_file), f"video_file={video_file}"
226
227
  video_cap = image_utils.get_video_capture(video_file)
227
228
  w, h, num_frames, fps = image_utils.get_video_info(video_cap)
228
229
  start = int(kwargs.get("start", 0) * fps)
@@ -279,6 +280,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
279
280
  speed: 播放速度
280
281
  :return: frame, count, w, h, fps =data_info['frame'],data_info['count'],data_info['w'],data_info['h'],data_info['fps']
281
282
  """
283
+ video_file = file_utils.str2number(video_file)
282
284
  if isinstance(video_file, str): assert os.path.exists(video_file), f"video_file={video_file}"
283
285
  video_cap = image_utils.get_video_capture(video_file, fps=None)
284
286
  w, h, num_frames, fps = image_utils.get_video_info(video_cap)
@@ -291,6 +293,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
291
293
  count = 0
292
294
  video_writer = None
293
295
  use_fast = kwargs.get("use_fast", False)
296
+ data_info = {}
294
297
  while True:
295
298
  ret, frame = (False, None) if use_fast else video_cap.read()
296
299
  if count % interval == 0 and count >= start:
@@ -301,7 +304,8 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
301
304
  if not ret or 0 < end < count or frame is None: break
302
305
  if size: frame = image_utils.resize_image(frame, size=size)
303
306
  if task: frame = task(frame, **kwargs)
304
- data_info = {"frame": frame, "count": count, "w": w, "h": h, "fps": fps}
307
+ t = round(count / fps, 3)
308
+ data_info = {"count": count, "time": t, "frame": frame, "w": w, "h": h, "fps": fps, "offset": count}
305
309
  # TODO 返回data_info
306
310
  yield data_info
307
311
  frame = data_info["frame"]
@@ -315,6 +319,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
315
319
  if video_writer:
316
320
  print("save video:{}".format(save_video))
317
321
  video_writer.release()
322
+ # yield data_info # TODO FIX 最后一帧数据重复返回
318
323
 
319
324
 
320
325
  def resize_task(frame, **kwargs):
@@ -152,7 +152,8 @@ class LabelMeDataset(Dataset):
152
152
  if not os.path.exists(image_file):
153
153
  continue
154
154
  annotation, width, height = self.load_annotations(anno_file)
155
- data_info = self.parser_annotation(annotation, self.total_names, min_points=self.min_points,
155
+ data_info = self.parser_annotation(annotation, self.total_names, size=(width, height),
156
+ min_points=self.min_points,
156
157
  unique=self.unique)
157
158
  if self.use_kpt:
158
159
  data_info = self.get_kpts_info(data_info, anno_file=anno_file, check_kpt=self.check_kpt, disp=True)
@@ -210,12 +211,12 @@ class LabelMeDataset(Dataset):
210
211
  annotation, width, height = self.load_annotations(anno_file)
211
212
  if self.kwargs.get("read_image", True): # 是否读取图片
212
213
  image = self.read_image(image_file, use_rgb=self.use_rgb)
213
- shape = image.shape
214
- size = (shape[1], shape[0])
214
+ height, width = image.shape[:2]
215
+ size = (width, height)
215
216
  else:
216
- image, shape, size = None, None, (width, height)
217
- data_info = self.parser_annotation(annotation, self.total_names, shape=shape,
218
- min_points=self.min_points, unique=self.unique)
217
+ image, size = None, (width, height)
218
+ data_info = self.parser_annotation(annotation, self.total_names, size=size, min_points=self.min_points,
219
+ unique=self.unique)
219
220
  if self.use_kpt:
220
221
  data_info = self.get_kpts_info(data_info, anno_file=anno_file, check_kpt=self.check_kpt)
221
222
  # TODO dict(boxes, labels, points, groups, names, keypoints)
@@ -319,11 +320,11 @@ class LabelMeDataset(Dataset):
319
320
  return image
320
321
 
321
322
  @staticmethod
322
- def parser_annotation(annotation: dict, class_dict={}, shape=None, min_points=-1, unique=False):
323
+ def parser_annotation(annotation: dict, class_dict={}, size=(), min_points=-1, unique=False):
323
324
  """
324
325
  :param annotation: labelme标注的数据
325
326
  :param class_dict: label映射,如{"person":0,"car":1}
326
- :param shape: 图片shape(H,W,C),可进行坐标点的维度检查,避免越界
327
+ :param size: 图片(W,H),可进行坐标点的维度检查,避免越界
327
328
  :param min_points: 当标注的轮廓点的个数小于等于min_points,会被剔除;负数不剔除
328
329
  :return:
329
330
  """
@@ -344,10 +345,9 @@ class LabelMeDataset(Dataset):
344
345
  continue
345
346
  gid = anno.get("group_id", gid_index) or gid_index
346
347
  kpt = anno.get("keypoints", [])
347
- if shape:
348
- h, w = shape[:2]
349
- pts[:, 0] = np.clip(pts[:, 0], 0, w - 1)
350
- pts[:, 1] = np.clip(pts[:, 1], 0, h - 1)
348
+ if size:
349
+ pts[:, 0] = np.clip(pts[:, 0], 0, size[0] - 1)
350
+ pts[:, 1] = np.clip(pts[:, 1], 0, size[1] - 1)
351
351
  box = image_utils.polygons2boxes([pts])[0]
352
352
  if shape_type == "rectangle":
353
353
  pts = image_utils.boxes2polygons([box])[0]
@@ -533,15 +533,15 @@ def LabelMeDatasets(filename=None,
533
533
  return datasets
534
534
 
535
535
 
536
- def parser_labelme(anno_file, class_dict={}, shape=None):
536
+ def parser_labelme(anno_file, class_dict={}, size=()):
537
537
  """
538
538
  :param annotation: labelme标注的数据
539
539
  :param class_dict: label映射
540
- :param shape: 图片shape(H,W,C),可进行坐标点的维度检查,避免越界
540
+ :param size: 图片shape(W,H),可进行坐标点的维度检查,避免越界
541
541
  :return:
542
542
  """
543
543
  annotation, width, height = LabelMeDataset.load_annotations(anno_file)
544
- data_info = LabelMeDataset.parser_annotation(annotation, class_dict, shape)
544
+ data_info = LabelMeDataset.parser_annotation(annotation, class_dict, size=size)
545
545
  return data_info
546
546
 
547
547
 
@@ -31,6 +31,32 @@ VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv", "*.dav"]
31
31
  AUDIO_POSTFIX = ['*.mp3', '*.wav']
32
32
 
33
33
 
34
+ def check_postfix(file, postfix=IMG_POSTFIX):
35
+ """
36
+ 判断文件是否是指定的后缀名
37
+ :param file:
38
+ :param postfix:
39
+ :return:
40
+ """
41
+ if not isinstance(file, str): return False
42
+ return any(file.endswith(p[1:]) for p in postfix)
43
+
44
+
45
+ def is_image(file):
46
+ """判断文件是否是图片"""
47
+ return check_postfix(file, postfix=IMG_POSTFIX)
48
+
49
+
50
+ def is_video(file):
51
+ """判断文件是否是视频"""
52
+ return check_postfix(file, postfix=VIDEO_POSTFIX)
53
+
54
+
55
+ def is_audio(file):
56
+ """判断文件是否是音频"""
57
+ return check_postfix(file, postfix=AUDIO_POSTFIX)
58
+
59
+
34
60
  def str2bool(v):
35
61
  if v.lower() in ('yes', 'true', 't', 'y', '1'):
36
62
  return True
@@ -47,7 +73,7 @@ def get_time(format="p"):
47
73
  """
48
74
  if format.lower() == "s": # 精确到秒
49
75
  # time = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
50
- time = datetime.now().strftime("%Y%m%d%H%M%S")
76
+ time = datetime.now().strftime("%Y%m%d%H%M%S") # 20200508143059
51
77
  elif format.lower() == "p": # 精确到微妙
52
78
  # time = datetime.strftime(datetime.now(), '%Y%m%d_%H%M%S_%f') # 20200508_143059_379116
53
79
  time = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
@@ -55,6 +81,9 @@ def get_time(format="p"):
55
81
  elif format.lower() == "y": # 2025-06-18 11:02:05
56
82
  # time = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S") #
57
83
  time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
84
+ elif format.lower() == "id": #
85
+ # time = datetime.strftime(datetime.now(), '%Y%m%d_%H%M%S_%f') # 20200508-14-30-59-379116
86
+ time = datetime.now().strftime("%Y%m%d-%H-%M-%S-%f")
58
87
  else:
59
88
  time = (str(datetime.now())[:-10]).replace(' ', '-').replace(':', '-')
60
89
  return time
@@ -277,15 +306,17 @@ class WriterTXT(object):
277
306
  self.f.close()
278
307
 
279
308
 
280
- def write_file(file, data, mode='wb'):
281
- """写二进制数据"""
309
+ def write_file(file, data, mode='w'):
310
+ """写数据"""
282
311
  with open(file, mode) as f: f.write(data)
283
312
 
284
313
 
285
- def read_file(file, mode='rb'):
286
- """读取二进制数据"""
287
- with open(file, mode) as f: key = f.read()
288
- return key
314
+ def read_file(file, mode='r'):
315
+ """读取数据"""
316
+ with open(file, mode) as f: data = f.read()
317
+ if mode == 'r':
318
+ data = data.strip().strip('\ufeff').strip('\xef\xbb\xbf')
319
+ return data
289
320
 
290
321
 
291
322
  def write_data(file, data, split=",", mode='w'):
@@ -323,13 +354,11 @@ def read_data(filename, split=",", convertNum=True):
323
354
  with open(filename, mode="r", encoding='utf-8') as f:
324
355
  lines = f.readlines()
325
356
  lines = [line.strip().strip('\ufeff').strip('\xef\xbb\xbf') for line in lines]
326
- if split is None:
327
- return lines
328
- else:
357
+ if split:
329
358
  lines = [line.split(split) for line in lines]
330
359
  if convertNum:
331
360
  for i, line in enumerate(lines):
332
- line = [str2number(l) for l in line]
361
+ line = [str2number(l) for l in line] if isinstance(line, list) else str2number(line)
333
362
  lines[i] = line
334
363
  return lines
335
364
 
@@ -337,7 +366,7 @@ def read_data(filename, split=",", convertNum=True):
337
366
  def str2number(x):
338
367
  """
339
368
  :param x:
340
- :return:
369
+ :return: 数值类型(int, float)或原始字符串
341
370
  """
342
371
  # 如果已经是数值类型,直接处理
343
372
  if isinstance(x, (int, float)):
@@ -1534,8 +1563,5 @@ def zip_file(src, dst=None, s=None):
1534
1563
  if __name__ == '__main__':
1535
1564
  from pybaseutils import time_utils
1536
1565
 
1537
- path = ["/home/PKing/Downloads/image_2022_00001.jpg",
1538
- "/home/PKing/Downloads/image_2022_00002.jpg"]
1539
- dirname = "/home/PKing"
1540
- p = get_files_name(path, dirname=None)
1541
- print(p)
1566
+ path = '/tmp/gradio/b988f43f2c87669461bbb6c831c5b3801017bc02cf6076c57ad1f4d581f76b35/image01.j'
1567
+ print(is_image(path))
@@ -21,7 +21,7 @@ extensions = {"application/json": "json",
21
21
  }
22
22
 
23
23
 
24
- def post(url, params=None, headers=None, timeout=6, max_retries=1, **kwargs):
24
+ def post(url, params=None, headers=None, timeout=None, max_retries=1, **kwargs):
25
25
  """
26
26
  :param url: 请求URL
27
27
  :param params: 请求参数
@@ -52,7 +52,7 @@ def post(url, params=None, headers=None, timeout=6, max_retries=1, **kwargs):
52
52
  return result
53
53
 
54
54
 
55
- def get(url, params=None, headers=None, timeout=6, max_retries=1, **kwargs):
55
+ def get(url, params=None, headers=None, timeout=None, max_retries=1, **kwargs):
56
56
  """
57
57
  type = r.headers.get('Content-Type', '').lower() # 数据类型
58
58
  :param url: 请求URL
@@ -1916,7 +1916,8 @@ def image2base64(image: np.ndarray, prefix="", use_rgb=False) -> str:
1916
1916
  if len(img.shape) == 3 and use_rgb:
1917
1917
  img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
1918
1918
  ext = prefix.split("/")
1919
- ext = "." + ext[1] if len(ext) == 2 else ".png"
1919
+ # ext = "." + ext[1] if len(ext) == 2 else ".png" # TODO libpng error: bad parameters to zlib
1920
+ ext = "." + ext[1] if len(ext) == 2 else ".jpg"
1920
1921
  img = cv2.imencode(ext, img)[1]
1921
1922
  bs64 = prefix + base64.b64encode(img).decode()
1922
1923
  return bs64
@@ -1931,21 +1932,26 @@ def base642image(image_bs64, use_rgb=False) -> np.ndarray:
1931
1932
  """
1932
1933
  image_bs64 = bytes(image_bs64, 'utf-8')
1933
1934
  image = base64.b64decode(image_bs64)
1934
- image = np.fromstring(image, np.uint8)
1935
+ image = np.frombuffer(image, np.uint8)
1935
1936
  image = cv2.imdecode(image, cv2.IMREAD_COLOR)
1936
1937
  if use_rgb:
1937
1938
  image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
1938
1939
  return image
1939
1940
 
1940
1941
 
1941
- def read_image_base64(image_file, size=None):
1942
- if not size:
1943
- with open(image_file, 'rb') as f_in:
1944
- image_base64 = base64.b64encode(f_in.read())
1945
- image_base64 = str(image_base64, encoding='utf-8')
1942
+ def read_image_base64(image_file: str, size=None):
1943
+ """
1944
+ 读取图片并转换为base64编码
1945
+ :param image_file: 图片文件路径
1946
+ :param size: 图片大小, (width,height)
1947
+ :return: base64编码字符串
1948
+ """
1949
+ if size:
1950
+ bgr = read_image(image_file, size=size, use_rgb=False)
1951
+ image_base64 = image2base64(bgr)
1946
1952
  else:
1947
- bgr_image = read_image(image_file, size=size, use_rgb=False)
1948
- image_base64 = image2base64(bgr_image)
1953
+ with open(image_file, 'rb') as f:
1954
+ image_base64 = base64.b64encode(f.read()).decode('utf-8')
1949
1955
  return image_base64
1950
1956
 
1951
1957
 
@@ -2871,7 +2877,7 @@ def fig2data(fig):
2871
2877
 
2872
2878
  # Get the RGBA buffer from the figure
2873
2879
  w, h = fig.canvas.get_width_height()
2874
- buf = np.fromstring(fig.canvas.tostring_argb(), dtype=np.uint8)
2880
+ buf = np.frombuffer(fig.canvas.tostring_argb(), dtype=np.uint8)
2875
2881
  buf.shape = (w, h, 4)
2876
2882
 
2877
2883
  # canvas.tostring_argb give pixmap in ARGB mode. Roll the ALPHA channel to have it in RGBA mode
@@ -3132,7 +3138,7 @@ def get_video_info(video_cap: cv2.VideoCapture, vis=True):
3132
3138
  :param video_cap:视频对象 或者视频文件路径
3133
3139
  :return:
3134
3140
  """
3135
- isfile = isinstance(video_cap, str)
3141
+ isfile = isinstance(video_cap, str) or isinstance(video_cap, int)
3136
3142
  if isfile: video_cap = get_video_capture(video_cap)
3137
3143
  width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
3138
3144
  height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
@@ -13,6 +13,25 @@ import numpy as np
13
13
  from typing import Dict, List
14
14
 
15
15
 
16
+ def get_time(format="p"):
17
+ """
18
+ :param format:
19
+ :return:
20
+ """
21
+ if format.lower() == "s": # 精确到秒
22
+ # time = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
23
+ time = datetime.now().strftime("%Y%m%d%H%M%S")
24
+ elif format.lower() == "p": # 精确到微妙
25
+ # time = datetime.strftime(datetime.now(), '%Y%m%d_%H%M%S_%f') # 20200508_143059_379116
26
+ time = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
27
+ time = time[:-2]
28
+ elif format.lower() == "y": # 2025-06-18 11:02:05
29
+ # time = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S") #
30
+ time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
31
+ else:
32
+ time = (str(datetime.now())[:-10]).replace(' ', '-').replace(':', '-')
33
+ return time
34
+
16
35
  def date2stamp(date, format='%Y-%m-%d %H:%M:%S') -> float:
17
36
  """
18
37
  将日期格式转换为时间戳
@@ -1,13 +1,19 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pybaseutils
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
7
7
  Author-email: 390737991@qq.com
8
8
  License: MIT
9
- Platform: UNKNOWN
10
9
  License-File: LICENCE
10
+ Dynamic: author
11
+ Dynamic: author-email
12
+ Dynamic: description
13
+ Dynamic: home-page
14
+ Dynamic: license
15
+ Dynamic: license-file
16
+ Dynamic: summary
11
17
 
12
18
  base-utils
13
19
  ==========
@@ -37,7 +43,7 @@ pybaseutils是个人开发常用的python库,集成了python等常用的算法
37
43
  - 安装方法2:pip install –upgrade -i https://pypi.org/simple
38
44
  pybaseutils (从pypi源下载最新版本)
39
45
  - 设置默认的镜像源:pip config set global.index-url
40
- https://pypi.tuna.tsinghua.edu.cn/simple)
46
+ https://pypi.tuna.tsinghua.edu.cn/simple
41
47
  - 超时异常:pip –default-timeout=1000000000
42
48
 
43
49
  一些问题修复说明
@@ -142,5 +148,3 @@ base_utils(C++)
142
148
  DEBUG_IMSHOW("image", image);
143
149
  return 0;
144
150
  }
145
-
146
-
File without changes
@@ -0,0 +1,9 @@
1
+ import numpy as np
2
+ from pybaseutils import file_utils, image_utils, yaml_utils
3
+ from collections import defaultdict
4
+
5
+ if __name__ == "__main__":
6
+ data={"content": "123"}
7
+ print(data.pop("content"))
8
+ print(data.pop("content","DAta"))
9
+
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Author : Pan
5
+ # @E-mail :
6
+ # @Date : 2025-07-08 14:10:15
7
+ # @Brief : 转换labelme标注数据为voc格式
8
+ # --------------------------------------------------------
9
+ """
10
+ import os
11
+ import numpy as np
12
+ import cv2
13
+ from pybaseutils.converter import convert_labelme2voc
14
+ from pybaseutils import time_utils, image_utils, file_utils
15
+
16
+ if __name__ == "__main__":
17
+ image_dir = "/home/PKing/Downloads/image/摄像头ID.txt"
18
+ lines = file_utils.read_file(image_dir)
19
+ print(lines)
@@ -37,16 +37,16 @@ if __name__ == "__main__":
37
37
  names = None
38
38
  # names = ['person,身穿工作服,未穿工作服']
39
39
  # names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
40
- anno_dir = ["/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/01-东莞-投退重合闸操作/dataset-v01/images"]
40
+ anno_dir = ["/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/23-更换绝缘子/dataset-v14-special/images"]
41
41
 
42
- anno_dir = ["/media/PKing/新加卷/project/smart-dinner/dataset/smart-dinner-01/images"]
43
- names = [ '人体', '转盘' ]
42
+ # anno_dir = ["/media/PKing/新加卷/project/smart-dinner/dataset/smart-dinner-01/images"]
43
+ # names = [ '人体', '转盘' ]
44
44
  dataset = parser_labelme.LabelMeDatasets(filename=None,
45
45
  data_root=None,
46
46
  anno_dir=anno_dir,
47
47
  image_dir=None,
48
48
  class_name=names,
49
- check=False,
49
+ check=True ,
50
50
  phase="val",
51
51
  shuffle=False)
52
52
  class_name = dataset.class_name