pybaseutils 2.3.8__tar.gz → 2.4.1__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.3.8 → pybaseutils-2.4.1}/PKG-INFO +10 -6
  2. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/README.md +1 -1
  3. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/__init__.py +1 -1
  4. pybaseutils-2.4.1/pybaseutils/base/list_queue.py +116 -0
  5. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/base64_utils.py +17 -9
  6. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cvutils/video_utils.py +1 -0
  7. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/file_utils.py +34 -23
  8. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/http_utils.py +2 -2
  9. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/image_utils.py +17 -11
  10. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/time_utils.py +19 -0
  11. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils.egg-info/PKG-INFO +10 -6
  12. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/setup.cfg +0 -0
  13. pybaseutils-2.4.1/test_py/demo1.py +9 -0
  14. pybaseutils-2.4.1/test_py/demo4.py +25 -0
  15. pybaseutils-2.3.8/pybaseutils/base/list_queue.py +0 -64
  16. pybaseutils-2.3.8/test_py/demo1.py +0 -13
  17. pybaseutils-2.3.8/test_py/demo4.py +0 -74
  18. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/LICENCE +0 -0
  19. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/audio/__init__.py +0 -0
  20. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/audio/audio_utils.py +0 -0
  21. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/audio/pyaudio_utils.py +0 -0
  22. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/audio/vad_utils.py +0 -0
  23. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/base/__init__.py +0 -0
  24. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/base/dict_queue.py +0 -0
  25. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/batch_utils.py +0 -0
  26. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/build_utils/__init__.py +0 -0
  27. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/build_utils/cython_utils.py +0 -0
  28. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  29. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cluster/__init__.py +0 -0
  30. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cluster/kmean.py +0 -0
  31. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cluster/maxmin_distance.py +0 -0
  32. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cluster/similarity.py +0 -0
  33. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/color_utils.py +0 -0
  34. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/config_utils.py +0 -0
  35. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/__init__.py +0 -0
  36. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/build_coco.py +0 -0
  37. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/build_cvat.py +0 -0
  38. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/build_labelme.py +0 -0
  39. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/build_voc.py +0 -0
  40. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/concat_coco.py +0 -0
  41. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  42. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_coco2voc.py +0 -0
  43. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  44. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  45. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  46. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
  47. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  48. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  49. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_voc2coco.py +0 -0
  50. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  51. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_voc2voc.py +0 -0
  52. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  53. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
  54. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  55. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/converter/prelabelme.py +0 -0
  56. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/coords_utils.py +0 -0
  57. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cvutils/__init__.py +0 -0
  58. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cvutils/corner_utils.py +0 -0
  59. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cvutils/monitor.py +0 -0
  60. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cvutils/mouse_utils.py +0 -0
  61. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/cvutils/nms_utils.py +0 -0
  62. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/data_utils.py +0 -0
  63. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/__init__.py +0 -0
  64. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/balanced_classes.py +0 -0
  65. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/base_coco.py +0 -0
  66. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/base_dataset.py +0 -0
  67. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/data_resample.py +0 -0
  68. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  69. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  70. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  71. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  72. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_image_text.py +0 -0
  73. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_labelme.py +0 -0
  74. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
  75. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_voc.py +0 -0
  76. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/parser_yolo.py +0 -0
  77. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  78. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/dict_uils.py +0 -0
  79. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/QueueTable.py +0 -0
  80. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/__init__.py +0 -0
  81. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/demo.py +0 -0
  82. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/kalman_filter.py +0 -0
  83. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/mean_filter.py +0 -0
  84. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/motion_filter.py +0 -0
  85. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/filter/pose_filter.py +0 -0
  86. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/font_style/__init__.py +0 -0
  87. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/font_utils.py +0 -0
  88. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/geometry_tools.py +0 -0
  89. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/heatmap_utils.py +0 -0
  90. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/json_utils.py +0 -0
  91. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/log.py +0 -0
  92. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/log_utils.py +0 -0
  93. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/media/__init__.py +0 -0
  94. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/media/ffmpeg_utils.py +0 -0
  95. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/metrics/__init__.py +0 -0
  96. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/metrics/accuracy.py +0 -0
  97. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/metrics/average_meter.py +0 -0
  98. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/metrics/class_report.py +0 -0
  99. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/metrics/plot_pr.py +0 -0
  100. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/metrics/plot_roc.py +0 -0
  101. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/numpy_utils.py +0 -0
  102. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pandas_utils.py +0 -0
  103. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/plot_utils.py +0 -0
  104. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pose/__init__.py +0 -0
  105. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pose/bones_utils.py +0 -0
  106. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pose/human_pose.py +0 -0
  107. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pose/pose_utils.py +0 -0
  108. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pycpp/__init__.py +0 -0
  109. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pycpp/demo.py +0 -0
  110. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/pycpp/main.py +0 -0
  111. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/server/__init__.py +0 -0
  112. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/server/apm_server.py +0 -0
  113. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/setup_config.py +0 -0
  114. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/singleton_utils.py +0 -0
  115. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/text_utils.py +0 -0
  116. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/thread_utils.py +0 -0
  117. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracemalloc_utils.py +0 -0
  118. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracemalloc_utils2.py +0 -0
  119. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/QueueTable.py +0 -0
  120. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/__init__.py +0 -0
  121. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/demo.py +0 -0
  122. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/kalman_filter.py +0 -0
  123. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/mean_filter.py +0 -0
  124. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/motion_filter.py +0 -0
  125. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/tracking/pose_filter.py +0 -0
  126. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/transforms/__init__.py +0 -0
  127. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/transforms/affine_transform.py +0 -0
  128. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/transforms/augment_utils.py +0 -0
  129. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/transforms/face_alignment.py +0 -0
  130. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/transforms/transform_utils.py +0 -0
  131. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/web/__init__.py +0 -0
  132. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/web/app_gradio_image.py +0 -0
  133. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/web/app_stweb_image.py +0 -0
  134. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/web/app_webio_image.py +0 -0
  135. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/web/demo.py +0 -0
  136. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/word_utils.py +0 -0
  137. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/worker.py +0 -0
  138. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils/yaml_utils.py +0 -0
  139. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils.egg-info/SOURCES.txt +0 -0
  140. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils.egg-info/dependency_links.txt +0 -0
  141. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils.egg-info/not-zip-safe +0 -0
  142. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/pybaseutils.egg-info/top_level.txt +0 -0
  143. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/setup.py +0 -0
  144. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/Image_enhance/__init__.py +0 -0
  145. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/Image_enhance/dmeo01.py +0 -0
  146. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/WebCrawler/__init__.py +0 -0
  147. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/WebCrawler/search_baidu.py +0 -0
  148. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/WebCrawler/search_biying.py +0 -0
  149. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/__init__.py +0 -0
  150. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/__init__.py +0 -0
  151. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/action_dataset.py +0 -0
  152. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/build_cython.py +0 -0
  153. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/build_pyarmor.py +0 -0
  154. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/build_service.py +0 -0
  155. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/convert_cvat2labelme.py +0 -0
  156. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/convert_labelme2coco.py +0 -0
  157. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/convert_labelme2voc.py +0 -0
  158. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/copy_move.py +0 -0
  159. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/demo_labelme_crop.py +0 -0
  160. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/demo_labelme_shock.py +0 -0
  161. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/demo_video_aije.py +0 -0
  162. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/demo_voc_crop.py +0 -0
  163. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/demo_voc_vis.py +0 -0
  164. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/get_pair_data.py +0 -0
  165. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/aije/video_convertor.py +0 -0
  166. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/__init__.py +0 -0
  167. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/demo.py +0 -0
  168. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/main.py +0 -0
  169. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/main_read.py +0 -0
  170. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/segment.py +0 -0
  171. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  172. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio/speechbrain_demo.py +0 -0
  173. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/audio_demo1.py +0 -0
  174. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/camera/__init__.py +0 -0
  175. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/camera/demo.py +0 -0
  176. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/captcha/__init__.py +0 -0
  177. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/captcha/demo.py +0 -0
  178. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/class_attribute.py +0 -0
  179. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/class_names.py +0 -0
  180. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/AffectNet.py +0 -0
  181. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/AsianMovie.py +0 -0
  182. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/BITVehicle2voc.py +0 -0
  183. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/BSTLD2voc.py +0 -0
  184. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/CCPD.py +0 -0
  185. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/CCPD2voc.py +0 -0
  186. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/FL3D_dataset.py +0 -0
  187. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/FreiHAND2coco.py +0 -0
  188. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/MTFL2voc.py +0 -0
  189. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/TT100K.py +0 -0
  190. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/WaterMeters1.py +0 -0
  191. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/WaterMeters2.py +0 -0
  192. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/__init__.py +0 -0
  193. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/concat_coco.py +0 -0
  194. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_coco2voc.py +0 -0
  195. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_cvat2labelme.py +0 -0
  196. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_gesture2hand.py +0 -0
  197. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_labelme2coco.py +0 -0
  198. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_labelme2cvat.py +0 -0
  199. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_labelme2labelme.py +0 -0
  200. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_labelme2voc.py +0 -0
  201. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/convert_voc2labelme.py +0 -0
  202. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/fatigue_driving.py +0 -0
  203. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/fdd_dataset.py +0 -0
  204. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/get_pair_data.py +0 -0
  205. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/handpose2coco.py +0 -0
  206. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/insects_for_aichallenger.py +0 -0
  207. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/tt100k_utils.py +0 -0
  208. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/ua_detrac2voc.py +0 -0
  209. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/ucf101_dataset.py +0 -0
  210. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/converter/voc_sbd2labelme.py +0 -0
  211. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/__init__.py +0 -0
  212. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/build_cython.py +0 -0
  213. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/build_pyarmor.py +0 -0
  214. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/cryptography_demo.py +0 -0
  215. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/fun_sum.py +0 -0
  216. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/main.py +0 -0
  217. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/model_des_enctypt.py +0 -0
  218. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/cython_build/model_enctypt.py +0 -0
  219. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/date_dataset.py +0 -0
  220. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/date_demo.py +0 -0
  221. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/datedataset_bk.py +0 -0
  222. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo2.py +0 -0
  223. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo3.py +0 -0
  224. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_async_await1.py +0 -0
  225. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_async_await2.py +0 -0
  226. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_coco_vis.py +0 -0
  227. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_copy_files.py +0 -0
  228. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_copy_files_for_voc.py +0 -0
  229. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_ffmpy.py +0 -0
  230. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_for_annular_to_rect.py +0 -0
  231. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_for_pair_file.py +0 -0
  232. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_for_polygon.py +0 -0
  233. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_for_trt.py +0 -0
  234. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_get_file_label.py +0 -0
  235. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_get_file_list.py +0 -0
  236. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_gif.py +0 -0
  237. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_gif_video.py +0 -0
  238. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_image_crop.py +0 -0
  239. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_kpts.py +0 -0
  240. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_labelme.py +0 -0
  241. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_labelme_crop.py +0 -0
  242. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_lableme_vis.py +0 -0
  243. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_metrics.py +0 -0
  244. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_mosaic.py +0 -0
  245. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_mouse.py +0 -0
  246. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_nii.py +0 -0
  247. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_pandas.py +0 -0
  248. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_plot.py +0 -0
  249. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_prelabelme.py +0 -0
  250. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_rename.py +0 -0
  251. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_standard_image .py +0 -0
  252. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_standard_video .py +0 -0
  253. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_taichi.py +0 -0
  254. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_video.py +0 -0
  255. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_video_crop.py +0 -0
  256. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_voc_crop.py +0 -0
  257. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_voc_vis.py +0 -0
  258. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_word_similar.py +0 -0
  259. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_worker1.py +0 -0
  260. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/demo_worker2.py +0 -0
  261. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/detector/__init__.py +0 -0
  262. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/detector/demo.py +0 -0
  263. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/detector/detect_face_person.py +0 -0
  264. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/detector/predet_labelme.py +0 -0
  265. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/edit_distance/__init__.py +0 -0
  266. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/edit_distance/demo.py +0 -0
  267. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/edit_distance/text_matching.py +0 -0
  268. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/flask_demo/__init__.py +0 -0
  269. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/flask_demo/app.py +0 -0
  270. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/flask_demo/utils/__init__.py +0 -0
  271. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/flask_demo/utils/utils.py +0 -0
  272. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/get_file_list.py +0 -0
  273. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/gradio_app.py +0 -0
  274. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/gradio_app_v2.py +0 -0
  275. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/image_correction/__init__.py +0 -0
  276. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/image_correction/demo_correction_v1.py +0 -0
  277. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/image_correction/demo_correction_v2.py +0 -0
  278. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/image_correction/demo_correction_v3.py +0 -0
  279. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/kafka_worker.py +0 -0
  280. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/men_tracemalloc.py +0 -0
  281. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/milvus_demo/__init__.py +0 -0
  282. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/milvus_demo/demo01.py +0 -0
  283. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/milvus_demo/demo02.py +0 -0
  284. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/milvus_demo/hello_milvus.py +0 -0
  285. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/milvus_demo/milvus_client.py +0 -0
  286. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/model_process.py +0 -0
  287. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/performance.py +0 -0
  288. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/pose/__init__.py +0 -0
  289. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/pose/human_pose.py +0 -0
  290. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/redis_py/__init__.py +0 -0
  291. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/redis_py/knn_search.py +0 -0
  292. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/redis_py/redis_client.py +0 -0
  293. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/registry/__init__.py +0 -0
  294. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/registry/base.py +0 -0
  295. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/registry/component.py +0 -0
  296. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/registry/main.py +0 -0
  297. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/registry/register.py +0 -0
  298. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/single_class/GRU.py +0 -0
  299. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/single_class/TCN.py +0 -0
  300. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/single_class/__init__.py +0 -0
  301. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/single_class/demo.py +0 -0
  302. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/slowfastnet.py +0 -0
  303. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/test_fr/__init__.py +0 -0
  304. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/test_fr/demo11.py +0 -0
  305. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/test_fr/idcardocr.py +0 -0
  306. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/web_socket/__init__.py +0 -0
  307. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/web_socket/asr_clients.py +0 -0
  308. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/test_py/web_socket/asr_service.py +0 -0
  309. {pybaseutils-2.3.8 → pybaseutils-2.4.1}/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.3.8
3
+ Version: 2.4.1
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.3.8'
11
+ __version__ = '2.4.1'
@@ -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())
@@ -279,6 +279,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
279
279
  speed: 播放速度
280
280
  :return: frame, count, w, h, fps =data_info['frame'],data_info['count'],data_info['w'],data_info['h'],data_info['fps']
281
281
  """
282
+ if isinstance(video_file, str) and len(video_file) == 1: video_file = int(video_file)
282
283
  if isinstance(video_file, str): assert os.path.exists(video_file), f"video_file={video_file}"
283
284
  video_cap = image_utils.get_video_capture(video_file, fps=None)
284
285
  w, h, num_frames, fps = image_utils.get_video_info(video_cap)
@@ -31,6 +31,31 @@ 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
+ return any(file.endswith(p[1:]) for p in postfix)
42
+
43
+
44
+ def is_image(file):
45
+ """判断文件是否是图片"""
46
+ return check_postfix(file, postfix=IMG_POSTFIX)
47
+
48
+
49
+ def is_video(file):
50
+ """判断文件是否是视频"""
51
+ return check_postfix(file, postfix=VIDEO_POSTFIX)
52
+
53
+
54
+ def is_audio(file):
55
+ """判断文件是否是音频"""
56
+ return check_postfix(file, postfix=AUDIO_POSTFIX)
57
+
58
+
34
59
  def str2bool(v):
35
60
  if v.lower() in ('yes', 'true', 't', 'y', '1'):
36
61
  return True
@@ -188,31 +213,19 @@ class WriterTXT(object):
188
213
 
189
214
  def parser_classes(class_name):
190
215
  """
191
- class_dict = {class_name: i for i, class_name in enumerate(class_name)}
192
- :param class_name:
193
- str : class file
194
- list: ["face","person"]
195
- dict: 可以自定义label的id{'BACKGROUND': 0, 'person': 1, 'person_up': 1, 'person_down': 1}
216
+ TODO 很多模型使用parser_classes,不要做任何修改!!!
196
217
  :return:
197
218
  """
198
219
  if isinstance(class_name, str):
199
220
  class_name = read_data(class_name, split=None)
200
- if isinstance(class_name, list) and len(class_name) > 0:
201
- class_dict = {}
202
- for i, name in enumerate(class_name):
203
- name = name.split(",")
204
- for n in name: class_dict[n] = i
205
- elif isinstance(class_name, dict) and len(class_name) > 0:
221
+ elif isinstance(class_name, numbers.Number):
222
+ class_name = [i for i in range(int(class_name))]
223
+ if isinstance(class_name, list):
224
+ class_dict = {class_name: i for i, class_name in enumerate(class_name)}
225
+ elif isinstance(class_name, dict):
206
226
  class_dict = class_name
207
- class_name = list(class_dict.keys())
208
227
  else:
209
228
  class_dict = None
210
- if class_dict and not class_name:
211
- # class_dict = json_utils.dict_sort(class_dict, reverse=False)
212
- class_name = {}
213
- for n, i in class_dict.items():
214
- class_name[i] = "{},{}".format(class_name[i], n) if i in class_name else n
215
- class_name = list(class_name.values())
216
229
  return class_name, class_dict
217
230
 
218
231
 
@@ -1546,8 +1559,6 @@ def zip_file(src, dst=None, s=None):
1546
1559
  if __name__ == '__main__':
1547
1560
  from pybaseutils import time_utils
1548
1561
 
1549
- path = ["/home/PKing/Downloads/image_2022_00001.jpg",
1550
- "/home/PKing/Downloads/image_2022_00002.jpg"]
1551
- dirname = "/home/PKing"
1552
- p = get_files_name(path, dirname=None)
1553
- print(p)
1562
+ path = '/tmp/gradio/b988f43f2c87669461bbb6c831c5b3801017bc02cf6076c57ad1f4d581f76b35/image01.j'
1563
+ print(is_image(path))
1564
+
@@ -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.3.8
3
+ Version: 2.4.1
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,25 @@
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"
18
+ image_list = file_utils.get_images_list(image_dir)
19
+ for image_file in image_list:
20
+ src = image_utils.read_image(image_file, use_rgb=True)
21
+ image_utils.show_image("src", src, delay=10)
22
+ src = cv2.cvtColor(src, cv2.COLOR_BGR2RGB) # 将BGR转为RGB
23
+ bs6 = image_utils.image2base64(src, use_rgb=True)
24
+ out = image_utils.base642image(bs6, use_rgb=True)
25
+ image_utils.show_image("out", out)
@@ -1,64 +0,0 @@
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 queue
11
-
12
-
13
- class Queue():
14
- """普通队列,多个POD请求时,无法实现同步数据"""
15
-
16
- def __init__(self, name="defaultlist", maxsize=10, **kwargs):
17
- """
18
- queue是一个列表队列,队列大小由maxsize指定
19
- :param name: 队列名称
20
- :param maxsize:
21
- """
22
- self.name = name
23
- self.maxsize = maxsize
24
- self.queue = queue.Queue(maxsize=maxsize)
25
-
26
- def empty(self, ):
27
- return self.queue.empty()
28
-
29
- def __del__(self):
30
- if not self.queue.empty(): self.queue.queue.clear()
31
-
32
- def get_queue(self, ):
33
- return self.queue.queue
34
-
35
- def set_queue(self, queue):
36
- self.queue = queue
37
-
38
- def qsize(self) -> int:
39
- return self.queue.qsize()
40
-
41
- def pop(self, block=True, timeout=None):
42
- """Remove and return an item from the queue,index=0"""
43
- return self.queue.get(block=block, timeout=timeout)
44
-
45
- def get(self, index):
46
- """Remove and return an item from the queue,index=0"""
47
- return self.queue.queue[index]
48
-
49
- def put(self, item, block=True, timeout=None):
50
- """Put an item into the queue,index=n"""
51
- while self.qsize() >= self.maxsize: self.pop()
52
- return self.queue.put(item, block=block, timeout=timeout)
53
-
54
-
55
- if __name__ == '__main__':
56
- q = Queue(maxsize=3)
57
- q.put(10)
58
- q.put(11)
59
- q.put(12)
60
- q.put(13)
61
- q.put(14)
62
- print(q.get_queue())
63
- print(q.get(0))
64
- print(q.get_queue())
@@ -1,13 +0,0 @@
1
- import numpy as np
2
- from pybaseutils import file_utils, image_utils
3
- from collections import defaultdict
4
-
5
-
6
- if __name__ == "__main__":
7
- inp_tensor = np.random.random(size=(10, 3, 224, 224))
8
- out_tensor = defaultdict(list) # TODO CPU模式逐个推理,比批量推理快
9
- for i in range(len(inp_tensor)):
10
- out = [np.mean()]
11
- for k in range(len(out)):
12
- out_tensor[k].append(out[k])
13
- out_tensor = [np.concatenate(v, axis=0) for k, v in out_tensor.items()]
@@ -1,74 +0,0 @@
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
- from pybaseutils.converter import convert_labelme2voc
13
- from pybaseutils import time_utils
14
-
15
- import numpy as np
16
- from collections import deque
17
- from scipy.signal import convolve
18
-
19
-
20
- def get_valid_range(data, v=0):
21
- """
22
- 获得值大于v的最大区间
23
- :param data:
24
- :param v:
25
- :return: [index0,index1) 左包含,右不包含
26
- """
27
- if not isinstance(data, np.ndarray): data = np.array(data)
28
- index = np.where(data > v)[0]
29
- ranges = (0, 0)
30
- if len(index) > 0:
31
- ranges = (index[0], index[-1] + 1)
32
- return ranges
33
-
34
-
35
- def get_window_sum(score, times, stage_time, ksize=5):
36
- """
37
- :param score:
38
- :param ksize:
39
- :return:
40
- """
41
- score = np.array(score)
42
- # i1, i2 = get_valid_range(score, v=0)
43
- ksize = np.ones(ksize) # 创建滑动窗口核
44
- # 使用卷积计算滑动窗口和,'same'模式保持输出长度与输入相同
45
- result = convolve(score, ksize, mode='same')
46
- # result = result * (score != 0) # 只有当data[i]不为0时才保留窗口和
47
- n = len(result)
48
- area = 0
49
- time = stage_time
50
- i = 0
51
- while i < n:
52
- if result[i] > 0:
53
- c0 = i
54
- while i < n and result[i] > 0: # 找到事件的开始和结束
55
- i += 1
56
- c1 = i
57
- wsum = sum(result[c0:c1]) # [c0,c1), 左包含,右不包含
58
- print(wsum, (c0, c1))
59
- if wsum > area:
60
- time = (times[c0], times[c1 - 1])
61
- area = wsum
62
- i += 1
63
- print("time={}".format(time))
64
- return time, result
65
-
66
-
67
- if __name__ == "__main__":
68
- score = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, 1]
69
- score = np.asarray(score, dtype=np.float32)
70
- times = np.arange(len(score))
71
- stage_time = (0, len(score) - 1)
72
- ksize = 2
73
- print("function:", get_window_sum(score, times, stage_time=stage_time, ksize=ksize))
74
- print("原始数据 :", score)
File without changes