pybaseutils 2.4.26__tar.gz → 2.4.33__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 (332) hide show
  1. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/PKG-INFO +5 -9
  2. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/producer_consumer.py +0 -0
  4. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/camera.py +1 -0
  5. pybaseutils-2.4.26/pybaseutils/cvutils/monitor.py → pybaseutils-2.4.33/pybaseutils/cvutils/frame_record.py +1 -1
  6. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/video_utils.py +66 -17
  7. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_labelme_line.py +0 -0
  8. pybaseutils-2.4.33/pybaseutils/dict_uils.py +10 -0
  9. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/file_utils.py +43 -0
  10. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/json_utils.py +3 -2
  11. pybaseutils-2.4.33/pybaseutils/log.py +91 -0
  12. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/build_transform.py +0 -0
  13. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/PKG-INFO +5 -9
  14. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/SOURCES.txt +5 -1
  15. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/dependency_links.txt +0 -0
  16. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/not-zip-safe +0 -0
  17. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/top_level.txt +0 -0
  18. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/setup.cfg +0 -0
  19. pybaseutils-2.4.33/test_py/WebCrawler/download_pdf.py +9 -0
  20. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_video_aije.py +1 -1
  21. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/mask_image.py +0 -0
  22. pybaseutils-2.4.33/test_py/converter/car_accident.py +74 -0
  23. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/fall_dataset.py +0 -0
  24. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/parking_rois_gopro.py +0 -0
  25. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_rename.py +2 -2
  26. pybaseutils-2.4.33/test_py/demo_video_segm.py +26 -0
  27. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/qrcode/__init__.py +0 -0
  28. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/qrcode/demo.py +0 -0
  29. pybaseutils-2.4.26/pybaseutils/log.py +0 -118
  30. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/LICENCE +0 -0
  31. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/README.md +0 -0
  32. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/__init__.py +0 -0
  33. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/audio_utils.py +0 -0
  34. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/pyaudio_utils.py +0 -0
  35. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/vad_utils.py +0 -0
  36. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/__init__.py +0 -0
  37. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/dict_queue.py +0 -0
  38. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/list_queue.py +0 -0
  39. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base64_utils.py +0 -0
  40. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/batch_utils.py +0 -0
  41. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/build_utils/__init__.py +0 -0
  42. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/build_utils/cython_utils.py +0 -0
  43. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  44. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/__init__.py +0 -0
  45. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/kmean.py +0 -0
  46. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/maxmin_distance.py +0 -0
  47. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/similarity.py +0 -0
  48. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/color_utils.py +0 -0
  49. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/config_utils.py +0 -0
  50. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/__init__.py +0 -0
  51. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_coco.py +0 -0
  52. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_cvat.py +0 -0
  53. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_labelme.py +0 -0
  54. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_voc.py +0 -0
  55. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/concat_coco.py +0 -0
  56. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  57. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_coco2voc.py +0 -0
  58. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  59. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  60. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  61. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
  62. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  63. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  64. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2coco.py +0 -0
  65. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  66. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2voc.py +0 -0
  67. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  68. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
  69. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  70. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/prelabelme.py +0 -0
  71. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/coords_utils.py +0 -0
  72. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/__init__.py +0 -0
  73. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/corner_utils.py +0 -0
  74. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/mouse_utils.py +0 -0
  75. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/nms_utils.py +0 -0
  76. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/data_utils.py +0 -0
  77. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/__init__.py +0 -0
  78. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/balanced_classes.py +0 -0
  79. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/base_coco.py +0 -0
  80. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/base_dataset.py +0 -0
  81. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/data_resample.py +0 -0
  82. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  83. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  84. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  85. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  86. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_image_text.py +0 -0
  87. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_labelme.py +0 -0
  88. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
  89. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_video_folder.py +0 -0
  90. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_video_text.py +0 -0
  91. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_voc.py +0 -0
  92. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_yolo.py +0 -0
  93. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  94. /pybaseutils-2.4.26/pybaseutils/dict_uils.py → /pybaseutils-2.4.33/pybaseutils/dict_utils.py +0 -0
  95. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/QueueTable.py +0 -0
  96. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/__init__.py +0 -0
  97. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/demo.py +0 -0
  98. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/kalman_filter.py +0 -0
  99. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/mean_filter.py +0 -0
  100. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/motion_filter.py +0 -0
  101. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/pose_filter.py +0 -0
  102. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/font_style/__init__.py +0 -0
  103. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/font_utils.py +0 -0
  104. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/geometry_tools.py +0 -0
  105. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/heatmap_utils.py +0 -0
  106. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/http_utils.py +0 -0
  107. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/image_utils.py +0 -0
  108. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/log_utils.py +0 -0
  109. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/media/__init__.py +0 -0
  110. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/media/ffmpeg_utils.py +0 -0
  111. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/__init__.py +0 -0
  112. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/accuracy.py +0 -0
  113. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/average_meter.py +0 -0
  114. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/class_report.py +0 -0
  115. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/plot_pr.py +0 -0
  116. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/plot_roc.py +0 -0
  117. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/nets_utils.py +0 -0
  118. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/numpy_utils.py +0 -0
  119. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pandas_utils.py +0 -0
  120. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/plot_utils.py +0 -0
  121. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/__init__.py +0 -0
  122. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/bones_utils.py +0 -0
  123. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/human_pose.py +0 -0
  124. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/pose_utils.py +0 -0
  125. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pycpp/__init__.py +0 -0
  126. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pycpp/demo.py +0 -0
  127. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pycpp/main.py +0 -0
  128. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/server/__init__.py +0 -0
  129. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/server/apm_server.py +0 -0
  130. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/setup_config.py +0 -0
  131. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/singleton_utils.py +0 -0
  132. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/text_utils.py +0 -0
  133. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/thread_utils.py +0 -0
  134. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/time_utils.py +0 -0
  135. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracemalloc_utils.py +0 -0
  136. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracemalloc_utils2.py +0 -0
  137. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/QueueTable.py +0 -0
  138. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/__init__.py +0 -0
  139. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/demo.py +0 -0
  140. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/kalman_filter.py +0 -0
  141. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/mean_filter.py +0 -0
  142. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/motion_filter.py +0 -0
  143. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/pose_filter.py +0 -0
  144. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/__init__.py +0 -0
  145. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/affine_transform.py +0 -0
  146. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/face_alignment.py +0 -0
  147. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/imgaug_utils.py +0 -0
  148. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/transform_utils.py +0 -0
  149. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/__init__.py +0 -0
  150. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/app_gradio_image.py +0 -0
  151. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/app_stweb_image.py +0 -0
  152. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/app_webio_image.py +0 -0
  153. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/demo.py +0 -0
  154. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/word_utils.py +0 -0
  155. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/worker.py +0 -0
  156. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/yaml_utils.py +0 -0
  157. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/setup.py +0 -0
  158. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/Image_enhance/__init__.py +0 -0
  159. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/Image_enhance/dmeo01.py +0 -0
  160. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/WebCrawler/__init__.py +0 -0
  161. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/WebCrawler/search_baidu.py +0 -0
  162. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/WebCrawler/search_biying.py +0 -0
  163. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/__init__.py +0 -0
  164. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/__init__.py +0 -0
  165. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/action_dataset.py +0 -0
  166. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/build_cython.py +0 -0
  167. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/build_pyarmor.py +0 -0
  168. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/build_service.py +0 -0
  169. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/convert_cvat2labelme.py +0 -0
  170. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/convert_labelme2coco.py +0 -0
  171. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/convert_labelme2voc.py +0 -0
  172. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/copy_move.py +0 -0
  173. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_labelme_crop_aije.py +0 -0
  174. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_labelme_crop_ailt.py +0 -0
  175. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_labelme_shock.py +0 -0
  176. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_motion_blur.py +0 -0
  177. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_voc_crop.py +0 -0
  178. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_voc_vis.py +0 -0
  179. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/get_pair_data.py +0 -0
  180. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/video_convertor.py +0 -0
  181. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/__init__.py +0 -0
  182. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/demo.py +0 -0
  183. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/main.py +0 -0
  184. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/main_read.py +0 -0
  185. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/segment.py +0 -0
  186. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  187. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/speechbrain_demo.py +0 -0
  188. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio_demo1.py +0 -0
  189. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/camera/__init__.py +0 -0
  190. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/camera/demo.py +0 -0
  191. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/camera.py +0 -0
  192. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/captcha/__init__.py +0 -0
  193. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/captcha/demo.py +0 -0
  194. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/class_attribute.py +0 -0
  195. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/class_names.py +0 -0
  196. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/AffectNet.py +0 -0
  197. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/AsianMovie.py +0 -0
  198. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/BITVehicle2voc.py +0 -0
  199. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/BSTLD2voc.py +0 -0
  200. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/CCPD.py +0 -0
  201. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/CCPD2voc.py +0 -0
  202. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/FL3D_dataset.py +0 -0
  203. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/FreiHAND2coco.py +0 -0
  204. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/MTFL2voc.py +0 -0
  205. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/TT100K.py +0 -0
  206. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/WaterMeters1.py +0 -0
  207. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/WaterMeters2.py +0 -0
  208. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/__init__.py +0 -0
  209. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/concat_coco.py +0 -0
  210. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_coco2voc.py +0 -0
  211. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_cvat2labelme.py +0 -0
  212. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_gesture2hand.py +0 -0
  213. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2coco.py +0 -0
  214. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2cvat.py +0 -0
  215. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2labelme.py +0 -0
  216. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2voc.py +0 -0
  217. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_voc2labelme.py +0 -0
  218. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_yolo2labelme.py +0 -0
  219. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/fatigue_driving.py +0 -0
  220. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/fdd_dataset.py +0 -0
  221. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/get_pair_data.py +0 -0
  222. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/handpose2coco.py +0 -0
  223. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/insects_for_aichallenger.py +0 -0
  224. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/tt100k_utils.py +0 -0
  225. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/ua_detrac2voc.py +0 -0
  226. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/ucf101_dataset.py +0 -0
  227. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/voc_sbd2labelme.py +0 -0
  228. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/__init__.py +0 -0
  229. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/build_cython.py +0 -0
  230. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/build_pyarmor.py +0 -0
  231. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/cryptography_demo.py +0 -0
  232. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/fun_sum.py +0 -0
  233. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/main.py +0 -0
  234. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/model_des_enctypt.py +0 -0
  235. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/model_enctypt.py +0 -0
  236. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/date_dataset.py +0 -0
  237. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/date_demo.py +0 -0
  238. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/datedataset_bk.py +0 -0
  239. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo1.py +0 -0
  240. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo2.py +0 -0
  241. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo3.py +0 -0
  242. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo4.py +0 -0
  243. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_async_await1.py +0 -0
  244. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_async_await2.py +0 -0
  245. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_coco_vis.py +0 -0
  246. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_copy_files.py +0 -0
  247. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_copy_files_for_voc.py +0 -0
  248. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_ffmpy.py +0 -0
  249. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_annular_to_rect.py +0 -0
  250. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_pair_file.py +0 -0
  251. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_polygon.py +0 -0
  252. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_trt.py +0 -0
  253. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_get_file_label.py +0 -0
  254. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_get_file_list.py +0 -0
  255. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_gif.py +0 -0
  256. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_gif_video.py +0 -0
  257. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_image_crop.py +0 -0
  258. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_kpts.py +0 -0
  259. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_labelme.py +0 -0
  260. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_labelme_crop.py +0 -0
  261. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_lableme_vis.py +0 -0
  262. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_letterbox.py +0 -0
  263. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_metrics.py +0 -0
  264. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_mosaic.py +0 -0
  265. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_mouse.py +0 -0
  266. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_nii.py +0 -0
  267. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_pandas.py +0 -0
  268. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_plot.py +0 -0
  269. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_prelabelme.py +0 -0
  270. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_standard_image .py +0 -0
  271. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_standard_video .py +0 -0
  272. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_taichi.py +0 -0
  273. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_video2frame.py +0 -0
  274. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_video_crop.py +0 -0
  275. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_voc_crop.py +0 -0
  276. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_voc_vis.py +0 -0
  277. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_word_similar.py +0 -0
  278. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_worker1.py +0 -0
  279. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_worker2.py +0 -0
  280. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/__init__.py +0 -0
  281. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/demo.py +0 -0
  282. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/detect_face_person.py +0 -0
  283. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/predet_labelme.py +0 -0
  284. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/edit_distance/__init__.py +0 -0
  285. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/edit_distance/demo.py +0 -0
  286. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/edit_distance/text_matching.py +0 -0
  287. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/fast_api/__init__.py +0 -0
  288. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/fast_api/create_image_url.py +0 -0
  289. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/fast_api/get_image_url.py +0 -0
  290. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/__init__.py +0 -0
  291. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/app.py +0 -0
  292. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/utils/__init__.py +0 -0
  293. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/utils/utils.py +0 -0
  294. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/get_file_list.py +0 -0
  295. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/gradio_app.py +0 -0
  296. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/gradio_app_v2.py +0 -0
  297. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/__init__.py +0 -0
  298. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/demo_correction_v1.py +0 -0
  299. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/demo_correction_v2.py +0 -0
  300. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/demo_correction_v3.py +0 -0
  301. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/kafka_worker.py +0 -0
  302. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/men_tracemalloc.py +0 -0
  303. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/__init__.py +0 -0
  304. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/demo01.py +0 -0
  305. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/demo02.py +0 -0
  306. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/hello_milvus.py +0 -0
  307. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/milvus_client.py +0 -0
  308. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/model_process.py +0 -0
  309. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/performance.py +0 -0
  310. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/pose/__init__.py +0 -0
  311. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/pose/human_pose.py +0 -0
  312. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/redis_py/__init__.py +0 -0
  313. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/redis_py/knn_search.py +0 -0
  314. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/redis_py/redis_client.py +0 -0
  315. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/__init__.py +0 -0
  316. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/base.py +0 -0
  317. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/component.py +0 -0
  318. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/main.py +0 -0
  319. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/register.py +0 -0
  320. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/GRU.py +0 -0
  321. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/TCN.py +0 -0
  322. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/__init__.py +0 -0
  323. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/demo.py +0 -0
  324. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/slowfastnet.py +0 -0
  325. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_camera.py +0 -0
  326. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_fr/__init__.py +0 -0
  327. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_fr/demo11.py +0 -0
  328. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_fr/idcardocr.py +0 -0
  329. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/__init__.py +0 -0
  330. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/asr_clients.py +0 -0
  331. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/asr_service.py +0 -0
  332. {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/chat_service.py +0 -0
@@ -1,19 +1,13 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.4.26
3
+ Version: 2.4.33
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
9
10
  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
17
11
 
18
12
  base-utils
19
13
  ==========
@@ -148,3 +142,5 @@ base_utils(C++)
148
142
  DEBUG_IMSHOW("image", image);
149
143
  return 0;
150
144
  }
145
+
146
+
@@ -8,4 +8,4 @@
8
8
  # --------------------------------------------------------
9
9
  """
10
10
 
11
- __version__ = '2.4.26'
11
+ __version__ = '2.4.33'
@@ -7,6 +7,7 @@ import subprocess
7
7
  class CameraCapture(object):
8
8
  def __init__(self, video: str or int = 0, fps=30, size=(1920, 1080), scale=1.0, input_format="mjpeg"):
9
9
  """
10
+ v4l2-ctl --device /dev/video0 --list-formats-ext # 查看摄像头在所有格式和分辨率下支持的帧率
10
11
  fuser /dev/video31 # 查看视频设备是否被占用
11
12
  查询视频设备分辨率: ffmpeg -f v4l2 -list_formats all -i /dev/video0
12
13
  常见的视频分辨率 : 1920x1080 1280x720 640x480 352x288 320x240 176x144 160x120
@@ -37,7 +37,7 @@ class Queue():
37
37
  return self.data[index]
38
38
 
39
39
 
40
- class StatusMonitor():
40
+ class StatusRecord():
41
41
  """
42
42
  检测视频流状态,计算连续相邻两帧的相似性,
43
43
  判断当前状态{"运动":1,"静止":0},
@@ -12,10 +12,11 @@ import cv2
12
12
  import numpy as np
13
13
  import math
14
14
  import time as timelib
15
+ import subprocess
15
16
  from typing import Callable
16
17
  from tqdm import tqdm
17
18
  from pybaseutils import image_utils, file_utils
18
- from pybaseutils.cvutils import monitor
19
+ from pybaseutils.cvutils import frame_record
19
20
 
20
21
  VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv"]
21
22
 
@@ -52,6 +53,13 @@ def get_usb_camera(video=-1, max_index=50):
52
53
 
53
54
 
54
55
  def merge_video(video1, video2, output="./output.mp4"):
56
+ """
57
+ 视频拼接
58
+ :param video1:
59
+ :param video2:
60
+ :param output:
61
+ :return:
62
+ """
55
63
  cmd = f'ffmpeg -i {video1} -i {video2} -filter_complex "[0:v:0][1:v:0]concat=n=2:v=1:a=0[outv]" -map "[outv]" {output}'
56
64
 
57
65
 
@@ -189,7 +197,7 @@ def video2frames_similarity(video_file, out_dir=None, func=None, prefix="", inte
189
197
  :param vis: 是否可视化显示
190
198
  :return:
191
199
  """
192
- sm = monitor.StatusMonitor()
200
+ rec = frame_record.StatusRecord()
193
201
  name = os.path.basename(video_file).split(".")[0].replace("-", "_")
194
202
  if prefix: name = f"{prefix}_{name}"
195
203
  if not out_dir: out_dir = os.path.join(os.path.dirname(video_file), name)
@@ -208,7 +216,7 @@ def video2frames_similarity(video_file, out_dir=None, func=None, prefix="", inte
208
216
  if func: curr_frame = func(curr_frame)
209
217
  if last_frame is None:
210
218
  last_frame = curr_frame.copy()
211
- diff = sm.get_frame_similarity(curr_frame, last_frame, size=(256, 256), vis=False)
219
+ diff = rec.get_frame_similarity(curr_frame, last_frame, size=(256, 256), vis=False)
212
220
  if diff > thresh:
213
221
  frame_file = os.path.join(out_dir, "{}_{:0=6d}.jpg".format(name, count))
214
222
  last_frame = curr_frame.copy()
@@ -333,13 +341,13 @@ def video_capture(video: int or str, save_video: str or int = None, interval=1,
333
341
  assert os.path.exists(video), f"video={video}"
334
342
  cap = image_utils.get_video_capture(video, fps=None)
335
343
  w, h, num_frames, fps = image_utils.get_video_info(cap, **kwargs)
336
- time = kwargs.get("time", tuple()) # TODO 开始播放时间time[0],结束播放时间time[1],单位秒S
337
- clip = kwargs.get("clip", tuple()) # TODO 开始播放位置clip[0],结束播放位置clip[1]
344
+ clip_time = kwargs.get("clip_time", tuple()) # TODO 开始播放时间time[0],结束播放时间time[1],单位秒S
345
+ clip_index = kwargs.get("clip_index", tuple()) # TODO 开始播放位置clip[0],结束播放位置clip[1]
338
346
  start, end = 0, -1
339
- if time and fps > 0:
340
- start, end = int(time[0] * fps), int(time[1] * fps)
341
- elif clip:
342
- start, end = int(clip[0]), int(clip[1])
347
+ if clip_time and fps > 0:
348
+ start, end = int(clip_time[0] * fps), int(clip_time[1] * fps)
349
+ elif clip_index:
350
+ start, end = int(clip_index[0]), int(clip_index[1])
343
351
  end = min(end, num_frames) if end > 0 else num_frames # TODO 当num_frames<0时,使用0<end<count继续播放
344
352
  interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
345
353
  interval = int(fps / freq) if freq > 0 else interval
@@ -388,8 +396,8 @@ def video_iterator(video, save_video: str or int = None, interval=1, size=(), fr
388
396
  :param kwargs:回调函数输入参数,
389
397
  delay: 控制显示延时,默认10S
390
398
  title: 控制显示窗口名,默认video
391
- time: 开始播放时间time[0],结束播放时间time[1],单位秒S
392
- clip: 开始播放位置clip[0],结束播放位置clip[1]
399
+ clip_time: 开始播放时间time[0],结束播放时间time[1],单位秒S
400
+ clip_index: 开始播放位置clip[0],结束播放位置clip[1]
393
401
  speed: 保存视频的播放速度,默认是播放帧率
394
402
  save_fps: 保存视频的帧率,默认是播放帧率
395
403
  :return: frame, count, w, h, fps =data_info['frame'],data_info['count'],data_info['w'],data_info['h'],data_info['fps']
@@ -401,13 +409,13 @@ def video_iterator(video, save_video: str or int = None, interval=1, size=(), fr
401
409
  assert os.path.exists(video), f"video={video}"
402
410
  cap = image_utils.get_video_capture(video, fps=None)
403
411
  w, h, num_frames, fps = image_utils.get_video_info(cap, **kwargs)
404
- time = kwargs.get("time", tuple()) # TODO 开始播放时间time[0],结束播放时间time[1],单位秒S
405
- clip = kwargs.get("clip", tuple()) # TODO 开始播放位置clip[0],结束播放位置clip[1]
412
+ clip_time = kwargs.get("clip_time", tuple()) # TODO 开始播放时间time[0],结束播放时间time[1],单位秒S
413
+ clip_index = kwargs.get("clip_index", tuple()) # TODO 开始播放位置clip[0],结束播放位置clip[1]
406
414
  start, end = 0, -1
407
- if time and fps > 0:
408
- start, end = int(time[0] * fps), int(time[1] * fps)
409
- elif clip:
410
- start, end = int(clip[0]), int(clip[1])
415
+ if clip_time and fps > 0:
416
+ start, end = int(clip_time[0] * fps), int(clip_time[1] * fps)
417
+ elif clip_index:
418
+ start, end = int(clip_index[0]), int(clip_index[1])
411
419
  end = min(end, num_frames) if end > 0 else num_frames # TODO 当num_frames<0时,使用0<end<count继续播放
412
420
  interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
413
421
  interval = int(fps / freq) if freq > 0 else interval
@@ -472,6 +480,47 @@ def rotation_task(frame, **kwargs):
472
480
  return frame
473
481
 
474
482
 
483
+ def segment_video(video_file, save_file="", clip_time=(), clip_index=()):
484
+ """
485
+ 分割视频
486
+ :param video_file: 视频文件
487
+ :param save_file: 输出分割视频文件
488
+ :param clip_time: 分割视频时间, clip_time[0]开始时间,结束时间clip_time[1],单位秒S
489
+ :param clip_index: 分割视频索引, clip_index[0]开始位置,结束位置clip_index[1]
490
+ :return:
491
+ """
492
+ if not save_file:
493
+ name_id, postfix = file_utils.split_postfix(video_file)
494
+ save_file = os.path.join(os.path.dirname(video_file), f"{name_id}_crop.mp4")
495
+ os.makedirs(os.path.dirname(save_file), exist_ok=True)
496
+ assert os.path.exists(video_file), f"输入视频文件不存在: {video_file}"
497
+ cmd = ["ffmpeg", "-i", video_file]
498
+ if clip_time and len(clip_time) == 2:
499
+ start, end = clip_time
500
+ # -ss 和 -to 放在 -i 之后实现精确解码切割(无 seek 误差)
501
+ cmd.extend(["-ss", str(start), "-to", str(end)])
502
+ # 若不需重新编码且可接受关键帧对齐,可启用下行加速:
503
+ # cmd.extend(["-c", "copy"])
504
+ elif clip_index and len(clip_index) == 2:
505
+ c0, c1 = int(clip_index[0]), int(clip_index[1])
506
+ # select 滤镜选择帧号范围内的帧,并重置时间戳
507
+ vf_filter = f"select='between(n,{c0},{c1})',setpts=N/FRAME_RATE/TB"
508
+ af_filter = f"aselect='between(n,{c0},{c1})',asetpts=N/SR/TB"
509
+ cmd.extend(["-vf", vf_filter, "-af", af_filter, "-vsync", "vfr"])
510
+ else:
511
+ raise ValueError("必须提供 clip_time 或 clip_index 且参数为二元组")
512
+ # 覆盖输出文件
513
+ cmd.extend(["-y", save_file])
514
+ # 执行命令
515
+ try:
516
+ print(" ".join(cmd))
517
+ subprocess.run(cmd, check=True, capture_output=True, text=True)
518
+ print(f"视频分割完成: {save_file}")
519
+ except subprocess.CalledProcessError as e:
520
+ print(f"ffmpeg 执行失败:\n{e.stderr}")
521
+ raise
522
+
523
+
475
524
  if __name__ == "__main__":
476
525
  # video_file = "/home/dm/nasdata/release/CSDN/双目测距Demo视频(Python).MP4"
477
526
  # video_file = "/home/dm/视频/双目测距Demo视频(Python).mp4"
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Author : Pan
5
+ # @E-mail :
6
+ # @Date : 2025-08-20 16:04:27
7
+ # @Brief :
8
+ # --------------------------------------------------------
9
+ """
10
+ from pybaseutils.dict_utils import *
@@ -1607,6 +1607,49 @@ def zip_file(src, dst=None, s=None):
1607
1607
  return dst
1608
1608
 
1609
1609
 
1610
+ def json2jsonl(json_file: str, jsonl_out="./data.jsonl"):
1611
+ """
1612
+ 将json转换为jsonl
1613
+ :param json_file: json文件目录或json文件路径
1614
+ :param jsonl_out:
1615
+ :return:
1616
+ """
1617
+ data_list = []
1618
+ if json_file.endswith(".json"):
1619
+ with open(json_file, 'r', encoding='utf-8') as f:
1620
+ data_list = json.load(f) # 假设 data 是一个列表
1621
+ elif os.path.isdir(json_file):
1622
+ files = glob.glob(os.path.join(json_file, "*.json"))
1623
+ for file in files:
1624
+ with open(file, 'r', encoding='utf-8') as f:
1625
+ data = json.load(f) # 假设 data 是一个字典
1626
+ data_list.append(data)
1627
+ with open(jsonl_out, 'w', encoding='utf-8') as f:
1628
+ for item in data_list:
1629
+ f.write(json.dumps(item, ensure_ascii=False) + '\n')
1630
+ print(f"转换成功,保存文件:{jsonl_out} ,共{len(data_list)}条记录")
1631
+ return data_list
1632
+
1633
+
1634
+ def jsonl2json(jsonl_file: str, json_out="./data.json"):
1635
+ """
1636
+ 将 JSONL 文件转换为 JSON 文件
1637
+ :param jsonl_file: JSONL 文件路径
1638
+ :param json_out: 输出的 JSON 文件路径
1639
+ :return: 包含所有数据的列表
1640
+ """
1641
+ data_list = []
1642
+ with open(jsonl_file, 'r', encoding='utf-8') as f:
1643
+ for line in f:
1644
+ line = line.strip()
1645
+ if line: # 跳过空行
1646
+ data_list.append(json.loads(line))
1647
+ with open(json_out, 'w', encoding='utf-8') as f:
1648
+ json.dump(data_list, f, ensure_ascii=False, indent=2)
1649
+ print(f"转换成功,保存文件:{json_out},共 {len(data_list)} 条记录")
1650
+ return data_list
1651
+
1652
+
1610
1653
  if __name__ == '__main__':
1611
1654
  from pybaseutils import time_utils
1612
1655
 
@@ -15,7 +15,7 @@ import PIL.Image as Image
15
15
  from collections import Counter
16
16
  from typing import List, Tuple, Dict
17
17
  from pybaseutils.file_utils import load_json, read_json_data, save_json, write_json_path
18
- from pybaseutils.dict_uils import *
18
+ from pybaseutils.dict_utils import *
19
19
 
20
20
 
21
21
  def get_most_common(data: list, topK=None):
@@ -163,8 +163,9 @@ def get_index(data: list, v):
163
163
  return indices
164
164
 
165
165
 
166
+
166
167
  if __name__ == "__main__":
167
168
  # data = {'C': 0, 'A': 5, 'B': 3, 'D': 2}
168
169
  # print(dict_sort(data))
169
- i= get_index(data=[], v=7)
170
+ i = get_index(data=[], v=7)
170
171
  print(i)
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Author : Pan
5
+ # @E-mail :
6
+ # @Date : 2022-04-29 09:13:09
7
+ # @Brief :
8
+ # --------------------------------------------------------
9
+ """
10
+ import os
11
+ import sys
12
+ import datetime
13
+ from loguru import logger
14
+
15
+ LOG_FORMAT = {
16
+ "simple": "<level>{extra[time]}|{level:7}| {message}</level>",
17
+ "name": "<level>{extra[time]}|{level:7}|{name} {line}| {message}</level>", # 打印文件名
18
+ "module": "<level>{extra[time]}|{level:7}|{module} {line}| {message}</level>", # 打印模块名
19
+ "function": "<level>{extra[time]}|{level:7}|{module}.{function} {line}| {message}</level>",
20
+ "precise": "<level>{extra[time]}|{level:7}|{module}.{function} {line}| {message}</level>",
21
+ "all": "<level>{extra[time]}|{level:7}|{name}.{module}.{function} {line}| {message}</level>",# 打印函数
22
+ }
23
+
24
+
25
+ def set_logger(name=None, level="debug", logfile=None, format="simple", is_main_process=True,
26
+ rotation="1 days", retention="3 days"):
27
+ """
28
+ logger = set_logger(level="debug", logfile="log.txt")
29
+ url: https://www.cnblogs.com/shiyitongxue/p/17870527.html
30
+ :param level: 设置log输出级别:debug,info,warning,error
31
+ :param logfile: log保存路径,如果为None,则在控制台打印log
32
+ :param is_main_process: 是否是主进程
33
+ :param rotation: 日志文件轮转策略,时间或者大小,默认1天
34
+ rotation="1 minutes" # 每分钟轮转
35
+ rotation="1 hours" # 每小时轮转
36
+ rotation="1 days" # 每天轮转
37
+ rotation="1 weeks" # 每周轮转
38
+ rotation="10 MB" # 文件达到10MB时轮转
39
+ rotation="500 MB" # 文件达到500MB时轮转
40
+ :param retention: 日志文件保留时长,默认3天
41
+ retention="7 days" # 保留7天
42
+ retention="1 months" # 保留1个月
43
+ retention="20 GB" # 保留最近20GB的日志(基于大小)
44
+ :return:
45
+ """
46
+
47
+ def call_time(record):
48
+ # 显式固化 logger 调用时刻,避免异步 sink 输出时产生“当前打印时间”的误解
49
+ if format == "precise":
50
+ record["extra"]["time"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
51
+ else:
52
+ record["extra"]["time"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
53
+ f = LOG_FORMAT.get(format, LOG_FORMAT.get("simple"))
54
+ logger.remove() # 去除默认的LOG,避免重复打印
55
+ logger_ = logger.patch(call_time)
56
+ if is_main_process:
57
+ if logfile: logger_.add(logfile, level=level.upper(), rotation=rotation, retention=retention, format=f,
58
+ enqueue=True, # 异步写入,会重新打开文件
59
+ watch=True, # 避免误删日志文件
60
+ catch=True,
61
+ )
62
+ logger_.add(sys.stderr, level=level.upper(), format=f)
63
+ else:
64
+ logger_.add(sys.stderr, level="ERROR", format=f)
65
+ return logger_
66
+
67
+
68
+ def get_logger():
69
+ return logger
70
+
71
+
72
+ if __name__ == '__main__':
73
+ import traceback
74
+ import time
75
+
76
+ logfile = "./log.log"
77
+ logger = set_logger(name="demo", is_main_process=True, format="precise", level="debug", logfile=logfile)
78
+ # logger = set_logger(name="demo", is_main_process=True, format="module", level="debug", logfile=logfile)
79
+
80
+ for i in range(1000):
81
+ try:
82
+ t = time.time()
83
+ date = datetime.datetime.fromtimestamp(t).strftime("%H:%M:%S.%f")[:-3]
84
+ logger.debug(f"{date} debug {i}")
85
+ # logger.info(f"info {i}")
86
+ # logger.warning(f"warning {i}")
87
+ # logger.error(f"error {i}")
88
+ time.sleep(0.01)
89
+ except Exception as e:
90
+ e = traceback.format_exc()
91
+ logger.error(e)
@@ -1,19 +1,13 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.4.26
3
+ Version: 2.4.33
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
9
10
  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
17
11
 
18
12
  base-utils
19
13
  ==========
@@ -148,3 +142,5 @@ base_utils(C++)
148
142
  DEBUG_IMSHOW("image", image);
149
143
  return 0;
150
144
  }
145
+
146
+
@@ -9,6 +9,7 @@ pybaseutils/config_utils.py
9
9
  pybaseutils/coords_utils.py
10
10
  pybaseutils/data_utils.py
11
11
  pybaseutils/dict_uils.py
12
+ pybaseutils/dict_utils.py
12
13
  pybaseutils/file_utils.py
13
14
  pybaseutils/font_utils.py
14
15
  pybaseutils/geometry_tools.py
@@ -76,7 +77,7 @@ pybaseutils/converter/prelabelme.py
76
77
  pybaseutils/cvutils/__init__.py
77
78
  pybaseutils/cvutils/camera.py
78
79
  pybaseutils/cvutils/corner_utils.py
79
- pybaseutils/cvutils/monitor.py
80
+ pybaseutils/cvutils/frame_record.py
80
81
  pybaseutils/cvutils/mouse_utils.py
81
82
  pybaseutils/cvutils/nms_utils.py
82
83
  pybaseutils/cvutils/video_utils.py
@@ -186,6 +187,7 @@ test_py/demo_standard_video .py
186
187
  test_py/demo_taichi.py
187
188
  test_py/demo_video2frame.py
188
189
  test_py/demo_video_crop.py
190
+ test_py/demo_video_segm.py
189
191
  test_py/demo_voc_crop.py
190
192
  test_py/demo_voc_vis.py
191
193
  test_py/demo_word_similar.py
@@ -203,6 +205,7 @@ test_py/test_camera.py
203
205
  test_py/Image_enhance/__init__.py
204
206
  test_py/Image_enhance/dmeo01.py
205
207
  test_py/WebCrawler/__init__.py
208
+ test_py/WebCrawler/download_pdf.py
206
209
  test_py/WebCrawler/search_baidu.py
207
210
  test_py/WebCrawler/search_biying.py
208
211
  test_py/aije/__init__.py
@@ -248,6 +251,7 @@ test_py/converter/TT100K.py
248
251
  test_py/converter/WaterMeters1.py
249
252
  test_py/converter/WaterMeters2.py
250
253
  test_py/converter/__init__.py
254
+ test_py/converter/car_accident.py
251
255
  test_py/converter/concat_coco.py
252
256
  test_py/converter/convert_coco2voc.py
253
257
  test_py/converter/convert_cvat2labelme.py
File without changes
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Author : Pan
5
+ # @E-mail :
6
+ # @Date : 2026-06-24 15:32:23
7
+ # @Brief :
8
+ # --------------------------------------------------------
9
+ """
@@ -10,7 +10,7 @@ import cv2
10
10
  import numpy as np
11
11
  from tqdm import tqdm
12
12
  from pybaseutils import file_utils, image_utils
13
- from pybaseutils.cvutils import video_utils, monitor
13
+ from pybaseutils.cvutils import video_utils, frame_record
14
14
 
15
15
  # thresh_dict = {"1号视角": 0.5, "2号视角": 0.15, "3号视角": 0.3, "4号视角": 0.3}
16
16
  # thresh_dict = {"一号位": 0.58, "平视": 0.35, "俯视": 0.35, "右视": 0.25, "左视": 0.3}
@@ -0,0 +1,74 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # --------------------------------------------------------
4
+ # @Author : Pan
5
+ # @E-mail :
6
+ # @Date : 2026-06-23 17:33:01
7
+ # @Brief :
8
+ # --------------------------------------------------------
9
+ """
10
+ import os
11
+ import cv2
12
+ from collections import defaultdict
13
+ from pybaseutils import json_utils, pandas_utils, image_utils, file_utils, dict_utils
14
+ from pybaseutils.cvutils import video_utils
15
+
16
+ class_maps = {
17
+ "before crush": {"color": (255, 0, 0), "name": "crush0", "shift": [0, -1.0]},
18
+ "crush moment": {"color": (0, 255, 0), "name": "crush1", "shift": [-1.0, 1.0]},
19
+ "after crush": {"color": (0, 0, 255), "name": "crush2", "shift": [-1.0, 0]},
20
+ }
21
+
22
+
23
+ def parser_video(video_file, csv_file, vis=True):
24
+ print("video_file", video_file)
25
+ print(" csv_file", csv_file)
26
+ pd_data = pandas_utils.read_csv(csv_file, sep=",")
27
+ pd_dict = pandas_utils.df2dict(pd_data, orient="index")
28
+ label_info = defaultdict(list)
29
+ video_cap = video_utils.get_video_capture(video_file)
30
+ width, height, num_frames, fps = video_utils.get_video_info(video_cap)
31
+ for info in pd_dict.values():
32
+ index = info['frame_num']
33
+ label = info['type'].strip()
34
+ label_info[label].append(index)
35
+ if not vis: continue
36
+ # 设置抽帧的位置
37
+ video_cap.set(cv2.CAP_PROP_POS_FRAMES, index)
38
+ ret, frame = video_cap.read()
39
+ if not ret: break
40
+ color = class_maps[label]["color"]
41
+ text = "{:3d}-{}".format(index, label)
42
+ frame = image_utils.draw_text(frame, (0, 0), text, color=color, fontScale=1, thickness=2)
43
+ image_utils.show_image("image", frame, delay=20)
44
+ return label_info, fps, num_frames
45
+
46
+
47
+ def segment_video_dir(video_dir, csv_dir, output="", vis=False):
48
+ video_files = file_utils.get_files_list(video_dir, postfix=file_utils.VIDEO_POSTFIX)
49
+ for i, video_file in enumerate(video_files):
50
+ if not output: output = os.path.dirname(video_file)
51
+ name, ext = os.path.splitext(os.path.basename(video_file))
52
+ csv_file = os.path.join(csv_dir, name.replace("-", "_") + ".csv")
53
+ if not os.path.exists(csv_file):
54
+ print("not exists:{}".format(csv_file))
55
+ continue
56
+ label_info, fps, num_frames = parser_video(video_file, csv_file, vis=vis)
57
+ for label, indices in label_info.items():
58
+ clip = [min(indices), max(indices)]
59
+ name = class_maps[label]["name"]
60
+ shift = class_maps[label]["shift"]
61
+ clip_index = [clip[0] + int(shift[0] * fps), clip[1] + int(shift[1] * fps)]
62
+ clip_index = [max(0, clip_index[0]), min(num_frames, clip_index[1])]
63
+ if (clip_index[1] - clip_index[0]) / fps < 0.5: continue
64
+ nid, postfix = file_utils.split_postfix(video_file)
65
+ # save_file = os.path.join(output, f"{nid}_{name}_crop{clip[0]}_{clip[1]}.mp4")
66
+ save_file = os.path.join(output, name, f"video{i:03d}_{name}.mp4")
67
+ video_utils.segment_video(video_file, save_file=save_file, clip_index=clip_index)
68
+
69
+
70
+ if __name__ == '__main__':
71
+ video_dir = '/media/PKing/dev1/project/Crash dataset/video/'
72
+ csv_dir = "/media/PKing/dev1/project/Crash dataset/label/csv"
73
+ output = '/media/PKing/dev1/project/Crash dataset/video-crop/'
74
+ segment_video_dir(video_dir, csv_dir, output=output)
@@ -23,6 +23,6 @@ def rename_files(src, dst, prefix="", postfix=None, remove=False):
23
23
 
24
24
 
25
25
  if __name__ == '__main__':
26
- image_dir = "/home/PKing/edudata/dataset/AIJE/【TOP】技能人才系统_数据集管理/05-东莞基地/东莞基地-2025-08-19/images"
26
+ image_dir = "/home/PKing/nasdata/tmp/tmp/car-accident/dataset-v1"
27
27
  output = image_dir
28
- rename_files(image_dir, output, prefix="dg_image", remove=True)
28
+ rename_files(image_dir, output, prefix="video", remove=True)
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-12-31 11:37:30
6
+ @Brief :
7
+ """
8
+ import os
9
+ import cv2
10
+ import numpy as np
11
+ from pybaseutils import file_utils, image_utils
12
+ from pybaseutils.cvutils import video_utils
13
+
14
+
15
+ def task(frame, **kwargs):
16
+ frame = image_utils.resize_image(frame, size=(1280, None))
17
+ return frame
18
+
19
+
20
+ if __name__ == "__main__":
21
+ video_file = "/home/PKing/Pictures/ailt-video.mp4"
22
+ width, height, num_frames, fps = video_utils.get_video_info(video_file)
23
+ clip_time = (13.5, 19.0)
24
+ clip_index = (clip_time[0] * fps, clip_time[1] * fps)
25
+ # video_utils.segment_video(video_file, clip_time=clip_time)
26
+ video_utils.segment_video(video_file, clip_index=clip_index)