pybaseutils 2.2.8__tar.gz → 2.2.9__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 (274) hide show
  1. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/PKG-INFO +1 -2
  2. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/video_utils.py +5 -3
  4. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_image_text.py +1 -27
  5. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_labelme.py +14 -10
  6. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/file_utils.py +21 -1
  7. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/time_utils.py +10 -8
  8. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/PKG-INFO +1 -2
  9. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/SOURCES.txt +3 -0
  10. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_labelme_crop.py +3 -3
  11. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_video_aije.py +5 -5
  12. pybaseutils-2.2.9/test_py/camera/__init__.py +7 -0
  13. pybaseutils-2.2.9/test_py/camera/demo.py +89 -0
  14. pybaseutils-2.2.9/test_py/camera/main.py +147 -0
  15. pybaseutils-2.2.9/test_py/demo1.py +17 -0
  16. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_lableme_vis.py +1 -1
  17. pybaseutils-2.2.8/test_py/demo1.py +0 -55
  18. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/LICENCE +0 -0
  19. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/README.md +0 -0
  20. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/__init__.py +0 -0
  21. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/audio_utils.py +0 -0
  22. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/pyaudio_utils.py +0 -0
  23. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/vad_utils.py +0 -0
  24. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/base64_utils.py +0 -0
  25. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/batch_utils.py +0 -0
  26. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/build_utils/__init__.py +0 -0
  27. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/build_utils/cython_utils.py +0 -0
  28. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  29. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/__init__.py +0 -0
  30. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/kmean.py +0 -0
  31. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/maxmin_distance.py +0 -0
  32. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/similarity.py +0 -0
  33. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/color_utils.py +0 -0
  34. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/config_utils.py +0 -0
  35. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/__init__.py +0 -0
  36. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_coco.py +0 -0
  37. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_cvat.py +0 -0
  38. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_labelme.py +0 -0
  39. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_voc.py +0 -0
  40. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/concat_coco.py +0 -0
  41. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  42. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_coco2voc.py +0 -0
  43. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  44. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  45. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  46. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  47. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  48. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2coco.py +0 -0
  49. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  50. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2voc.py +0 -0
  51. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  52. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  53. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/coords_utils.py +0 -0
  54. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/__init__.py +0 -0
  55. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/corner_utils.py +0 -0
  56. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/monitor.py +0 -0
  57. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/mouse_utils.py +0 -0
  58. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/nms_utils.py +0 -0
  59. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/__init__.py +0 -0
  60. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/balanced_classes.py +0 -0
  61. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/base_coco.py +0 -0
  62. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/base_dataset.py +0 -0
  63. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/data_resample.py +0 -0
  64. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  65. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  66. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  67. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  68. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_voc.py +0 -0
  69. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_yolo.py +0 -0
  70. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  71. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/QueueTable.py +0 -0
  72. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/__init__.py +0 -0
  73. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/demo.py +0 -0
  74. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/kalman_filter.py +0 -0
  75. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/mean_filter.py +0 -0
  76. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/motion_filter.py +0 -0
  77. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/pose_filter.py +0 -0
  78. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/font_style/__init__.py +0 -0
  79. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/font_utils.py +0 -0
  80. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/geometry_tools.py +0 -0
  81. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/heatmap_utils.py +0 -0
  82. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/image_utils.py +0 -0
  83. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/json_utils.py +0 -0
  84. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/log.py +0 -0
  85. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/log_utils.py +0 -0
  86. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/logger.py +0 -0
  87. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/__init__.py +0 -0
  88. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/accuracy.py +0 -0
  89. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/average_meter.py +0 -0
  90. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/class_report.py +0 -0
  91. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/plot_pr.py +0 -0
  92. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/plot_roc.py +0 -0
  93. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/numpy_utils.py +0 -0
  94. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pandas_utils.py +0 -0
  95. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/plot_utils.py +0 -0
  96. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/__init__.py +0 -0
  97. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/bones_utils.py +0 -0
  98. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/human_pose.py +0 -0
  99. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/pose_utils.py +0 -0
  100. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pycpp/__init__.py +0 -0
  101. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pycpp/demo.py +0 -0
  102. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pycpp/main.py +0 -0
  103. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/server/__init__.py +0 -0
  104. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/server/apm_server.py +0 -0
  105. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/setup_config.py +0 -0
  106. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/singleton_utils.py +0 -0
  107. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/text_utils.py +0 -0
  108. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/thread_utils.py +0 -0
  109. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracemalloc_utils.py +0 -0
  110. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracemalloc_utils2.py +0 -0
  111. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/QueueTable.py +0 -0
  112. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/__init__.py +0 -0
  113. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/demo.py +0 -0
  114. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/kalman_filter.py +0 -0
  115. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/mean_filter.py +0 -0
  116. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/motion_filter.py +0 -0
  117. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/pose_filter.py +0 -0
  118. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/__init__.py +0 -0
  119. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/affine_transform.py +0 -0
  120. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/augment_utils.py +0 -0
  121. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/face_alignment.py +0 -0
  122. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/transform_utils.py +0 -0
  123. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/word_utils.py +0 -0
  124. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/worker.py +0 -0
  125. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/yaml_utils.py +0 -0
  126. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/dependency_links.txt +0 -0
  127. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/not-zip-safe +0 -0
  128. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/top_level.txt +0 -0
  129. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/setup.cfg +0 -0
  130. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/setup.py +0 -0
  131. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/Image_enhance/__init__.py +0 -0
  132. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/Image_enhance/dmeo01.py +0 -0
  133. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/WebCrawler/__init__.py +0 -0
  134. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/WebCrawler/search_image.py +0 -0
  135. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  136. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/__init__.py +0 -0
  137. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/__init__.py +0 -0
  138. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/action_dataset.py +0 -0
  139. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/build_cython.py +0 -0
  140. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/build_pyarmor.py +0 -0
  141. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/build_service.py +0 -0
  142. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/convert_cvat2labelme.py +0 -0
  143. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/convert_labelme2coco.py +0 -0
  144. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/convert_labelme2voc.py +0 -0
  145. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/copy_move.py +0 -0
  146. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_labelme_shock.py +0 -0
  147. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_voc_crop.py +0 -0
  148. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_voc_vis.py +0 -0
  149. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/get_pair_data.py +0 -0
  150. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/video_convertor.py +0 -0
  151. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/__init__.py +0 -0
  152. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/demo.py +0 -0
  153. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/main.py +0 -0
  154. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/main_read.py +0 -0
  155. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/segment.py +0 -0
  156. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  157. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/speechbrain_demo.py +0 -0
  158. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/captcha/__init__.py +0 -0
  159. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/captcha/demo.py +0 -0
  160. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/class_attribute.py +0 -0
  161. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/class_names.py +0 -0
  162. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/AffectNet.py +0 -0
  163. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/AsianMovie.py +0 -0
  164. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/BITVehicle2voc.py +0 -0
  165. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/BSTLD2voc.py +0 -0
  166. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/CCPD.py +0 -0
  167. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/CCPD2voc.py +0 -0
  168. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/FL3D_dataset.py +0 -0
  169. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/FreiHAND2coco.py +0 -0
  170. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/MTFL2voc.py +0 -0
  171. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/TT100K.py +0 -0
  172. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/WaterMeters1.py +0 -0
  173. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/WaterMeters2.py +0 -0
  174. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/__init__.py +0 -0
  175. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/concat_coco.py +0 -0
  176. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_coco2voc.py +0 -0
  177. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_cvat2labelme.py +0 -0
  178. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_gesture2hand.py +0 -0
  179. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_labelme2coco.py +0 -0
  180. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_labelme2cvat.py +0 -0
  181. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_labelme2voc.py +0 -0
  182. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_voc2labelme.py +0 -0
  183. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/fatigue_driving.py +0 -0
  184. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/fdd_dataset.py +0 -0
  185. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/get_pair_data.py +0 -0
  186. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/handpose2coco.py +0 -0
  187. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/insects_for_aichallenger.py +0 -0
  188. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/tt100k_utils.py +0 -0
  189. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/ua_detrac2voc.py +0 -0
  190. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/ucf101_dataset.py +0 -0
  191. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/voc_sbd2labelme.py +0 -0
  192. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/__init__.py +0 -0
  193. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/build_cython.py +0 -0
  194. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/build_pyarmor.py +0 -0
  195. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/cryptography_demo.py +0 -0
  196. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/fun_sum.py +0 -0
  197. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/main.py +0 -0
  198. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/model_des_enctypt.py +0 -0
  199. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/model_enctypt.py +0 -0
  200. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo2.py +0 -0
  201. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo3.py +0 -0
  202. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_async_await1.py +0 -0
  203. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_async_await2.py +0 -0
  204. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_coco_vis.py +0 -0
  205. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_copy_files.py +0 -0
  206. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_copy_files_for_voc.py +0 -0
  207. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_ffmpy.py +0 -0
  208. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_for_pair_file.py +0 -0
  209. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_for_polygon.py +0 -0
  210. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_for_trt.py +0 -0
  211. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_get_file_label.py +0 -0
  212. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_get_file_list.py +0 -0
  213. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_gif.py +0 -0
  214. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_gif_video.py +0 -0
  215. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_image_crop.py +0 -0
  216. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_kpts.py +0 -0
  217. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_labelme.py +0 -0
  218. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_labelme_crop.py +0 -0
  219. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_metrics.py +0 -0
  220. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_mouse.py +0 -0
  221. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_nii.py +0 -0
  222. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_pandas.py +0 -0
  223. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_plot.py +0 -0
  224. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_rename.py +0 -0
  225. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_standard_image .py +0 -0
  226. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_standard_video .py +0 -0
  227. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_taichi.py +0 -0
  228. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_video.py +0 -0
  229. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_video_crop.py +0 -0
  230. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_voc_crop.py +0 -0
  231. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_voc_vis.py +0 -0
  232. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_word_similar.py +0 -0
  233. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_worker1.py +0 -0
  234. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_worker2.py +0 -0
  235. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/__init__.py +0 -0
  236. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/demo.py +0 -0
  237. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/detect_face_person.py +0 -0
  238. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/predet_labelme.py +0 -0
  239. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/edit_distance/__init__.py +0 -0
  240. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/edit_distance/demo.py +0 -0
  241. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/edit_distance/text_matching.py +0 -0
  242. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/flask_demo/__init__.py +0 -0
  243. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/flask_demo/func.py +0 -0
  244. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/flask_demo/server.py +0 -0
  245. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/get_file_list.py +0 -0
  246. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/__init__.py +0 -0
  247. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/demo_correction_v1.py +0 -0
  248. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/demo_correction_v2.py +0 -0
  249. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/demo_correction_v3.py +0 -0
  250. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/kafka_worker.py +0 -0
  251. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/men_tracemalloc.py +0 -0
  252. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/__init__.py +0 -0
  253. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/demo01.py +0 -0
  254. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/demo02.py +0 -0
  255. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/hello_milvus.py +0 -0
  256. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/milvus_client.py +0 -0
  257. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/performance.py +0 -0
  258. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/pose/__init__.py +0 -0
  259. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/pose/human_pose.py +0 -0
  260. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/redis_py/__init__.py +0 -0
  261. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/redis_py/knn_search.py +0 -0
  262. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/redis_py/redis_client.py +0 -0
  263. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/__init__.py +0 -0
  264. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/base.py +0 -0
  265. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/component.py +0 -0
  266. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/main.py +0 -0
  267. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/register.py +0 -0
  268. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/GRU.py +0 -0
  269. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/TCN.py +0 -0
  270. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/__init__.py +0 -0
  271. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/demo.py +0 -0
  272. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/test_fr/__init__.py +0 -0
  273. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/test_fr/demo11.py +0 -0
  274. {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/test_fr/idcardocr.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.2.8
3
+ Version: 2.2.9
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -137,4 +137,3 @@ base_utils(C++)
137
137
  DEBUG_IMSHOW("image", image);
138
138
  return 0;
139
139
  }
140
-
@@ -5,4 +5,4 @@
5
5
  @Date : 2019-05-07 17:40:27
6
6
  """
7
7
 
8
- __version__ = '2.2.8'
8
+ __version__ = '2.2.9'
@@ -299,12 +299,14 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
299
299
  save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
300
300
  count = 0
301
301
  video_writer = None
302
+ use_fast = kwargs.get("use_fast", False)
302
303
  while True:
303
- ret, frame = video_cap.read()
304
+ ret, frame = (False, None) if use_fast else video_cap.read()
304
305
  if count % interval == 0 and count >= start:
305
306
  # TODO 设置抽帧的位置,但某些格式视频容易出现问题
306
- # if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
307
- # ret, frame = video_cap.read()
307
+ if use_fast and isinstance(video_file, str):
308
+ video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
309
+ ret, frame = video_cap.read()
308
310
  if not ret or 0 < end < count or frame is None: break
309
311
  if task: frame = task(frame, **kwargs)
310
312
  data_info = {"frame": frame, "count": count, "w": w, "h": h, "fps": fps}
@@ -16,7 +16,7 @@ import random
16
16
  import math
17
17
  import cv2
18
18
  from tqdm import tqdm
19
- from torch.utils.data import Dataset
19
+ from pybaseutils.dataloader.base_dataset import Dataset, ConcatDataset
20
20
  from pybaseutils import image_utils, file_utils, json_utils
21
21
  from pybaseutils.dataloader import data_resample
22
22
 
@@ -138,32 +138,6 @@ class TextDataset(Dataset):
138
138
  item_list += data
139
139
  return item_list
140
140
 
141
- def parser_classes(self, class_name):
142
- """
143
- class_dict = {class_name: i for i, class_name in enumerate(class_name)}
144
- :param
145
- :return:
146
- """
147
- if isinstance(class_name, str):
148
- class_name = file_utils.read_data(class_name, split=None)
149
- if isinstance(class_name, list) and len(class_name) > 0:
150
- class_dict = {}
151
- for i, name in enumerate(class_name):
152
- name = name.split(",")
153
- for n in name: class_dict[n] = i
154
- elif isinstance(class_name, dict) and len(class_name) > 0:
155
- class_dict = class_name
156
- class_name = list(class_dict.keys())
157
- else:
158
- class_dict = None
159
- if class_dict:
160
- class_dict = json_utils.dict_sort_by_value(class_dict, reverse=False)
161
- class_name = {}
162
- for n, i in class_dict.items():
163
- class_name[i] = "{},{}".format(class_name[i], n) if i in class_name else n
164
- class_name = list(class_name.values())
165
- return class_name, class_dict
166
-
167
141
  def check_item(self, item_list):
168
142
  """
169
143
  :param item_list:
@@ -45,12 +45,13 @@ class LabelMeDataset(Dataset):
45
45
  :param shuffle:
46
46
  :param check: 当class_name=None且check=True,将自动获取所有class
47
47
  :param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
48
- :param kwargs:
48
+ :param kwargs: read_image: 是否读取图片,否则image=None
49
49
  """
50
50
  super(LabelMeDataset, self).__init__()
51
51
  self.min_area = 1 / 1000 # 如果前景面积不足0.1%,则去除
52
52
  self.use_rgb = use_rgb
53
53
  self.min_points = min_points
54
+ self.kwargs = kwargs
54
55
  self.class_name, self.class_dict = self.parser_classes(class_name)
55
56
  parser = self.parser_paths(filename, data_root, anno_dir, image_dir)
56
57
  self.data_root, self.anno_dir, self.image_dir, self.image_ids = parser
@@ -154,8 +155,8 @@ class LabelMeDataset(Dataset):
154
155
  elif anno_dir and not image_ids:
155
156
  image_ids = self.get_file_list(anno_dir, postfix=["*.json", "*.xml"], basename=False)
156
157
  image_ids = [os.path.basename(f) for f in image_ids]
157
- assert os.path.exists(image_dir), Exception("no image_dir:{}".format(image_dir))
158
- assert os.path.exists(anno_dir), Exception("no anno_dir :{}".format(anno_dir))
158
+ assert isinstance(anno_dir, str) and os.path.exists(anno_dir), "no anno_dir :{}".format(anno_dir)
159
+ assert isinstance(image_dir, str) and os.path.exists(image_dir), "no image_dir:{}".format(image_dir)
159
160
  assert len(image_ids) > 0, f"image_ids is empty,image_dir={image_dir},anno_dir={anno_dir}"
160
161
  return data_root, anno_dir, image_dir, image_ids
161
162
 
@@ -167,13 +168,17 @@ class LabelMeDataset(Dataset):
167
168
  image_id = self.index2id(index)
168
169
  image_file, anno_file, image_id = self.get_image_anno_file(image_id)
169
170
  annotation, width, height = self.load_annotations(anno_file)
170
- image = self.read_image(image_file, use_rgb=self.use_rgb)
171
- shape = image.shape
172
- data_info = self.parser_annotation(annotation, self.class_dict, shape, min_points=self.min_points,
173
- unique=self.unique)
171
+ if self.kwargs.get("read_image", True): # 是否读取图片
172
+ image = self.read_image(image_file, use_rgb=self.use_rgb)
173
+ shape = image.shape
174
+ size = [shape[1], shape[0]]
175
+ else:
176
+ image, shape, size = None, None, [width, height]
177
+ data_info = self.parser_annotation(annotation, self.class_dict, shape=shape,
178
+ min_points=self.min_points, unique=self.unique)
174
179
  # TODO dict(boxes, labels, points, groups, names, keypoints)
175
180
  data_info.update({"image": image, "image_file": image_file, "anno_file": anno_file,
176
- "size": [shape[1], shape[0]]})
181
+ "size": size})
177
182
  return data_info
178
183
 
179
184
  @staticmethod
@@ -448,7 +453,7 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
448
453
  def draw_keypoints_image(image, boxes=[], keypoints=[], thickness=1, vis_id=False):
449
454
  """绘制keypoints"""
450
455
  h, w = image.shape[:2]
451
- if len(keypoints)== 0: return image
456
+ if len(keypoints) == 0: return image
452
457
  if len(boxes) == 0: boxes = [(0, 0, w, h)] * len(keypoints)
453
458
  from pybaseutils.pose import bones_utils
454
459
  target_bones = bones_utils.get_target_bones("coco_person")
@@ -480,7 +485,6 @@ if __name__ == "__main__":
480
485
  from pybaseutils.converter import build_labelme
481
486
 
482
487
  anno_dir = "/home/PKing/Downloads/sample/images"
483
- anno_dir = "/home/PKing/Downloads/冲击试验/video-ok/NVR_ch2_main_20241121093213_20241121100115/images"
484
488
  # anno_dir = "/home/PKing/Downloads/冲击试验/sample/images"
485
489
  names = None
486
490
  dataset = LabelMeDatasets(filename=None,
@@ -22,6 +22,7 @@ import argparse
22
22
  import itertools
23
23
  from datetime import datetime
24
24
  from tqdm import tqdm
25
+ from pybaseutils import text_utils
25
26
 
26
27
  IMG_POSTFIX = ['*.jpg', '*.jpeg', '*.png', '*.tif', "*.JPG", "*.bmp"]
27
28
  VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv", "*.dav"]
@@ -793,7 +794,7 @@ def get_files_lists(file_dir, postfix=IMG_POSTFIX, subname="", shuffle=False, su
793
794
  return file_list
794
795
 
795
796
 
796
- def get_files_list(file_dir, prefix="", postfix=None, basename=False, sub=False):
797
+ def get_files_list_v1(file_dir, prefix="", postfix=None, basename=False, sub=False):
797
798
  """
798
799
  获得file_dir目录下,后缀名为postfix所有文件列表,包括子目录所有文件
799
800
  :param file_dir:
@@ -822,6 +823,25 @@ def get_files_list(file_dir, prefix="", postfix=None, basename=False, sub=False)
822
823
  return file_list
823
824
 
824
825
 
826
+ def get_files_list(file_dir, prefix="", postfix=None, basename=False, sub=False):
827
+ """
828
+ 获得file_dir目录下,后缀名为postfix所有文件列表,包括子目录所有文件
829
+ :param file_dir:
830
+ :param prefix: 前缀
831
+ :param postfix: 后缀
832
+ :param basename: 返回的列表是文件名(True),还是文件的完整路径(False)
833
+ :param sub: 是否去除根路径
834
+ :return:
835
+ """
836
+ file_list = get_all_files(file_dir)
837
+ file_list = text_utils.find_match_texts(file_list, pattern=[prefix], org=True) if prefix else file_list
838
+ file_list = text_utils.find_match_texts(file_list, pattern=postfix, org=True) if postfix else file_list
839
+ file_list.sort()
840
+ file_list = get_basename(file_list) if basename else file_list
841
+ if sub: file_list = get_sub_list(file_list, dirname=file_dir)
842
+ return file_list
843
+
844
+
825
845
  def get_files_list_v2(file_dir, prefix="", postfix=None, basename=False):
826
846
  """
827
847
  获取file_dir目录下,所有文本路径,但不包括子目录文件
@@ -51,7 +51,8 @@ def performance(tag=""):
51
51
  content["avg"],
52
52
  content["total"],
53
53
  content["count"])
54
- print("{} call {} elapsed: {}".format(tag, func.__name__, elapsed))
54
+ tag_ = f"{tag} " if tag else ""
55
+ print("{:20s}{:20s} elapsed: {}".format(tag_, func.__name__, elapsed))
55
56
  return result
56
57
 
57
58
  return wrapper
@@ -78,37 +79,38 @@ class Performance(object):
78
79
  content["avg"],
79
80
  content["total"],
80
81
  content["count"])
81
- print("{} elapsed: {}".format(self.tag, elapsed))
82
+ tag_ = f"{self.tag} " if self.tag else ""
83
+ print("{:20s}elapsed: {}\t".format(tag_, elapsed))
82
84
 
83
85
  def task(self):
84
86
  pass
85
87
 
86
88
 
87
- @performance("")
89
+ @performance("test1")
88
90
  def targe_func1():
89
91
  time.sleep(1)
90
92
 
91
93
 
92
- @performance("")
94
+ @performance("test111111")
93
95
  def targe_func2():
94
96
  time.sleep(0.5)
95
97
 
96
98
 
97
99
  def targe_func3():
98
- with Performance("targe_func3") as p:
100
+ with Performance("test222") as p:
99
101
  time.sleep(1)
100
102
 
101
103
 
102
104
  def targe_func4():
103
- with Performance("targe_func4") as p:
105
+ with Performance("test22222222") as p:
104
106
  time.sleep(0.5)
105
107
 
106
108
 
107
109
  def targe_func():
108
110
  targe_func1()
109
111
  targe_func2()
110
- targe_func3()
111
- targe_func4()
112
+ # targe_func3()
113
+ # targe_func4()
112
114
 
113
115
 
114
116
  if __name__ == '__main__':
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.2.8
3
+ Version: 2.2.9
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -137,4 +137,3 @@ base_utils(C++)
137
137
  DEBUG_IMSHOW("image", image);
138
138
  return 0;
139
139
  }
140
-
@@ -190,6 +190,9 @@ test_py/audio/main_read.py
190
190
  test_py/audio/segment.py
191
191
  test_py/audio/speechbrain_asr_indoor_prod.py
192
192
  test_py/audio/speechbrain_demo.py
193
+ test_py/camera/__init__.py
194
+ test_py/camera/demo.py
195
+ test_py/camera/main.py
193
196
  test_py/captcha/__init__.py
194
197
  test_py/captcha/demo.py
195
198
  test_py/converter/AffectNet.py
@@ -64,7 +64,7 @@ if __name__ == "__main__":
64
64
  '绝缘手套', '绝缘鞋', '脚扣', '螺丝', '身穿工作服', '遮拦杆', '铁架', '铝扎线']
65
65
  室外: []
66
66
  """
67
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/test-v1/aije-action-train-v02/json"
67
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v31/images"
68
68
  class_name = None # 室内\
69
69
  out_dir = os.path.join(os.path.dirname(anno_dir), "crops")
70
70
  dataset = parser_labelme.LabelMeDatasets(filename=None,
@@ -77,8 +77,8 @@ if __name__ == "__main__":
77
77
  shuffle=False)
78
78
  print("have num:{}".format(len(dataset)))
79
79
  class_name = dataset.class_name
80
- scale = [1.5,1.5]
81
- flag = str(scale[0]).replace(".", "p")
80
+ scale = [1.0, 1.0]
81
+ # flag = str(scale[0]).replace(".", "p")
82
82
  flag = None
83
83
  # scale = None
84
84
  for i in tqdm(range(len(dataset))):
@@ -84,15 +84,15 @@ def video2frames_demo(root, out, prefix="", thresh=0.2):
84
84
  for video_file in tqdm(files):
85
85
  print(video_file)
86
86
  name = os.path.basename(video_file).split(".")[0]
87
- if name in thresh_dict:
88
- thresh = thresh_dict[name]
89
- prefix_ = "{}_{}".format(prefix, os.path.basename(os.path.dirname(video_file)))
87
+ thresh = thresh_dict.get(name, 0.5)
88
+ prefix_ = os.path.basename(os.path.dirname(video_file))
89
+ if prefix: prefix_ = "{}_{}".format(prefix, prefix_)
90
90
  video2frames_similarity(video_file, out_dir=out, func=None, interval=20,
91
91
  thresh=thresh, prefix=prefix_, vis=True)
92
92
 
93
93
 
94
94
  if __name__ == "__main__":
95
- root = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/归档/20240607_数企_jinquan采集的多样性样本-train/shuqi_20240607yanshi111346/shuqi_20240607yanshi111346_right.mp4"
96
- prefix = "数企"
95
+ root = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/01-江门四维数据/01-37道考题视频/江门四维2024-12-06-检查帽撑/video"
96
+ prefix = ""
97
97
  out = root + "-train"
98
98
  video2frames_demo(root, out, prefix=prefix)
@@ -0,0 +1,7 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-12-17 11:45:18
6
+ @Brief :
7
+ """
@@ -0,0 +1,89 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-12-17 15:02:18
6
+ @Brief :
7
+ """
8
+ import cv2
9
+ import time
10
+ from datetime import datetime, timedelta
11
+
12
+
13
+ def display_hikvision_stream(rtsp_url):
14
+ print(f"正在连接摄像头: {rtsp_url}")
15
+ cap = cv2.VideoCapture(rtsp_url)
16
+
17
+ if not cap.isOpened():
18
+ print("无法连接到摄像头")
19
+ return
20
+
21
+ # 获取视频信息
22
+ fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
23
+ codec = "".join([chr((fourcc >> 8 * i) & 0xFF) for i in range(4)])
24
+ fps = cap.get(cv2.CAP_PROP_FPS)
25
+ width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
26
+ height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
27
+
28
+ print("视频流信息:")
29
+ print(f"编码格式: {codec}")
30
+ print(f"分辨率: {width}x{height}")
31
+ print(f"帧率: {fps}")
32
+
33
+ # 获取起始时间
34
+ start_time = datetime.now()
35
+ start_timestamp = time.time() * 1000 # 转换为毫秒
36
+
37
+ try:
38
+ while True:
39
+ ret, frame = cap.read()
40
+ if ret:
41
+ # 获取时间戳信息
42
+ timestamp_ms = cap.get(cv2.CAP_PROP_POS_MSEC)
43
+ current_time = datetime.now()
44
+
45
+ # 计算摄像头实际时间
46
+ # if timestamp_ms == 0: # 如果摄像头没有返回有效时间戳
47
+ # elapsed_ms = (time.time() * 1000) - start_timestamp
48
+ # camera_datetime = start_time + timedelta(milliseconds=elapsed_ms)
49
+ # else:
50
+ camera_datetime = start_time + timedelta(milliseconds=timestamp_ms)
51
+
52
+ # 格式化时间字符串
53
+ camera_time_str = camera_datetime.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
54
+ system_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
55
+
56
+ # 在图像上显示时间戳
57
+ cv2.putText(frame, f"Camera Time: {camera_time_str}", (10, 30),
58
+ cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
59
+ cv2.putText(frame, f"System Time: {system_time_str}", (10, 70),
60
+ cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
61
+
62
+ # 显示视频帧
63
+ frame = cv2.resize(frame, (1280, 720))
64
+ cv2.imshow('Camera', frame)
65
+
66
+ # 打印时间戳信息到控制台
67
+ print(f"\r摄像头时间: {camera_time_str} | 系统时间: {system_time_str}",
68
+ end="", flush=True)
69
+
70
+ # 按'q'键退出
71
+ if cv2.waitKey(1) & 0xFF == ord('q'):
72
+ break
73
+ else:
74
+ print("\n视频帧获取失败,正在重新连接...")
75
+ cap.release()
76
+ time.sleep(1)
77
+ cap = cv2.VideoCapture(rtsp_url)
78
+
79
+ finally:
80
+ cap.release()
81
+ cv2.destroyAllWindows()
82
+ print("\n程序已退出")
83
+
84
+
85
+ if __name__ == "__main__":
86
+ camera_url = "rtsp://admin:C2332416@192.168.2.35/Streaming/Channels/1"
87
+ # display_hikvision_stream(camera_url)
88
+ v = (100, 100) + (100, 100)
89
+ print(v)
@@ -0,0 +1,147 @@
1
+ import os
2
+ import cv2
3
+ import time
4
+ import requests
5
+ import xmltodict
6
+ from datetime import datetime
7
+ from requests.auth import HTTPDigestAuth
8
+
9
+
10
+ class CameraDemo():
11
+ def __init__(self, ip, username, password):
12
+ """
13
+ 按'q'键退出
14
+ :param ip: IP摄像头IP地址
15
+ :param username: 用户
16
+ :param password: 密码
17
+ """
18
+ self.ip = ip
19
+ self.username = username
20
+ self.password = password
21
+
22
+ def get_camera_time(self):
23
+ """获取海康摄像头的时间
24
+ urls = [
25
+ f'http://{ip}/ISAPI/System/time',
26
+ f'http://{ip}/ISAPI/System/status',
27
+ f'http://{ip}/ISAPI/System/deviceInfo'
28
+ ]
29
+ """
30
+ t = "unknown camera time"
31
+ try:
32
+ # 尝试不同的 ISAPI 接口
33
+ url = f'http://{self.ip}/ISAPI/System/time'
34
+ response = requests.get(url, auth=HTTPDigestAuth(self.username, self.password), verify=False, timeout=5)
35
+ content = response.content
36
+ content = xmltodict.parse(content) # 将XML格式json格式
37
+ if response.status_code == 200:
38
+ t = content['Time']['localTime']
39
+ t = t[:-len('+08:00')] # 去除+08:00字符
40
+ else:
41
+ print(f"code: {response.status_code},content={response.text}")
42
+ except Exception as e:
43
+ print(f"Error: {e}")
44
+ return t
45
+
46
+ def get_camera_info(self, cap):
47
+ """
48
+ 获取视频信息
49
+ :param cap:
50
+ :return:
51
+ """
52
+ fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
53
+ codec = "".join([chr((fourcc >> 8 * i) & 0xFF) for i in range(4)])
54
+ fps = cap.get(cv2.CAP_PROP_FPS)
55
+ width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
56
+ height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
57
+ print(f"视频流信息, 编码格式:{codec}, 分辨率:{width}x{height}, 帧率:{fps}")
58
+ return width, height, fps
59
+
60
+ def draw_image_info(self, frame, info: str, point, color=(0, 255, 0), fontScale=1.2, thickness=2):
61
+ cv2.putText(frame, info, point, cv2.FONT_HERSHEY_SIMPLEX, fontScale, color, thickness)
62
+ return frame
63
+
64
+ @staticmethod
65
+ def get_video_writer(video_file, width, height, fps):
66
+ """
67
+ 获得视频存储对象
68
+ :param video_file: 输出保存视频的文件路径
69
+ :param width: 图像分辨率width
70
+ :param height: 图像分辨率height
71
+ :param fps: 设置视频播放帧率
72
+ :return:
73
+ """
74
+ if not os.path.exists(os.path.dirname(video_file)):
75
+ os.makedirs(os.path.dirname(video_file))
76
+ fourcc = cv2.VideoWriter_fourcc(*'XVID')
77
+ frameSize = (int(width), int(height))
78
+ video_writer = cv2.VideoWriter(video_file, fourcc, int(fps), frameSize)
79
+ print("save video:width:{},height:{},fps:{}".format(width, height, fps))
80
+ return video_writer
81
+
82
+ def capture(self, title="camera", save_video="./camera.avi"):
83
+ format = '%Y-%m-%dT%H:%M:%S' # 海康摄像头默认格式
84
+ video_url = f"rtsp://{self.username}:{self.password}@{self.ip}/Streaming/Channels/1"
85
+ print(f"正在连接摄像头: {video_url}")
86
+ # 创建视频流连接
87
+ cap = cv2.VideoCapture(video_url)
88
+ assert cap.isOpened(), f"无法连接到摄像头:{video_url}"
89
+ W, H, Fps = self.get_camera_info(cap)
90
+ video_writer = self.get_video_writer(save_video, width=W, height=H, fps=Fps)
91
+ # TODO 获得启动摄像头的时间
92
+ cam_start_time = self.get_camera_time()
93
+ cam_start_timestamp = time.mktime(time.strptime(cam_start_time, format))
94
+ reconnection = 0
95
+ count = 0
96
+ point = (W - 750, 150)
97
+ while True:
98
+ ret, frame = cap.read()
99
+ count += 1
100
+ if ret:
101
+ # TODO 获取当前系统时间
102
+ sys_timestamp = time.time()
103
+ sys_time = datetime.fromtimestamp(sys_timestamp).strftime(format)
104
+ # TODO 通过接口获得摄像头设备时间
105
+ cam_time = self.get_camera_time()
106
+ cam_timestamp = time.mktime(time.strptime(cam_time, format))
107
+ # TODO 通过视频解码估计视频流生成时间
108
+ time.sleep(0.1) # TODO 模拟网络延时
109
+ vdo_offset = cap.get(cv2.CAP_PROP_POS_MSEC) / 1000 # 获得视频偏移量
110
+ vdo_timestamp = cam_start_timestamp + vdo_offset # 设备启动时间+视频偏移量得到当前帧的到达时间
111
+ vdo_time = datetime.fromtimestamp(vdo_timestamp).strftime(format)
112
+ # 在图像上显示时间戳
113
+ sys_info = f"System Time: {sys_time}"
114
+ cam_info = f"Camera Time: {cam_time}"
115
+ vdo_info = f"Video Time: {vdo_time}"
116
+ # 打印时间戳信息到控制台
117
+ print(f"\r{cam_info} | {sys_info}| {vdo_info}", end="", flush=True)
118
+ frame = self.draw_image_info(frame, info=vdo_info, point=(point[0], point[1]))
119
+ frame = self.draw_image_info(frame, info=cam_info, point=(point[0], point[1] + 50))
120
+ frame = self.draw_image_info(frame, info=sys_info, point=(point[0], point[1] + 100))
121
+ # 显示视频帧
122
+ cv2.namedWindow(title, flags=cv2.WINDOW_NORMAL)
123
+ cv2.imshow(title, frame)
124
+ # 保存视频
125
+ video_writer.write(frame)
126
+ # 按'q'键退出
127
+ if cv2.waitKey(10) & 0xFF == ord('q'):
128
+ break
129
+ else:
130
+ cap.release()
131
+ reconnection += 1
132
+ print(f"视频帧获取失败,尝试第{reconnection}次重新连接...")
133
+ time.sleep(10)
134
+ cap = cv2.VideoCapture(video_url)
135
+ cap.release()
136
+ video_writer.release()
137
+ cv2.destroyAllWindows()
138
+ print("\n程序已退出")
139
+
140
+
141
+ if __name__ == "__main__":
142
+ # 摄像头信息,按'q'键退出程序
143
+ ip = "192.168.2.35"
144
+ username = "admin"
145
+ password = "C2332416"
146
+ c = CameraDemo(ip, username, password)
147
+ c.capture()
@@ -0,0 +1,17 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-02-05 18:19:18
6
+ @Brief :
7
+ """
8
+
9
+ from pybaseutils import file_utils, image_utils
10
+
11
+ if __name__ == '__main__':
12
+ root = "/home/PKing/Downloads/data1"
13
+ files1 = file_utils.get_files_list_v1(root, postfix=["*.jpg"])
14
+ files2 = file_utils.get_files_list(root, postfix=["*.jpg", "*.png"])
15
+ [print(f) for f in files1]
16
+ print("----" * 10)
17
+ [print(f) for f in files2]
@@ -26,7 +26,7 @@ if __name__ == "__main__":
26
26
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-test/json"
27
27
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v25/json"
28
28
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-negetive/dataset-v02/json"
29
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v31/images"
29
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/train-v2/aije-action-train-v30/images"
30
30
  names = None
31
31
  # names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
32
32
  dataset = parser_labelme.LabelMeDatasets(filename=None,
@@ -1,55 +0,0 @@
1
- # -*-coding: utf-8 -*-
2
- """
3
- @Author : PKing
4
- @E-mail :
5
- @Date : 2024-02-05 18:19:18
6
- @Brief :
7
- """
8
- import os
9
- import cv2
10
- import numpy as np
11
- import random
12
- import json
13
- from PIL import Image
14
- from typing import Dict
15
- from tqdm import tqdm
16
- from pybaseutils import image_utils, file_utils, json_utils, base64_utils, time_utils
17
- from pybaseutils.cvutils import video_utils
18
- from pybaseutils.transforms import transform_utils
19
- from pybaseutils.converter import build_voc, build_labelme
20
- from pybaseutils.dataloader import parser_labelme
21
- import xmltodict
22
-
23
- import torch
24
- import torch.nn as nn
25
-
26
-
27
- class CMDLoss(nn.Module):
28
- """计算两个分布的中心矩差差异的Loss函数"""
29
-
30
- def __init__(self, num_channels, use_gpu=True):
31
- super(CMDLoss, self).__init__()
32
- self.use_gpu = use_gpu
33
- self.num_channels = num_channels
34
- self.register_buffer('one', torch.tensor(1.0))
35
-
36
- def forward(self, input, target):
37
- # 计算均值
38
- input_mean = torch.mean(input, dim=[2, 3], keepdim=True)
39
- target_mean = torch.mean(target, dim=[2, 3], keepdim=True)
40
-
41
- # 计算方差
42
- input_var = torch.mean((input - input_mean) ** 2, dim=[2, 3], keepdim=True)
43
- target_var = torch.mean((target - target_mean) ** 2, dim=[2, 3], keepdim=True)
44
-
45
- # 计算协方差
46
- input_mean_expand = input_mean.expand_as(input)
47
- target_mean_expand = target_mean.expand_as(target)
48
- cov = torch.mean((input - input_mean_expand) * (target - target_mean_expand), dim=[2, 3], keepdim=True)
49
-
50
- # 计算CMD
51
- c = torch.mean(self.one / self.num_channels * cov, dim=[2, 3], keepdim=True)
52
- d = torch.mean(self.one / self.num_channels * (input_var - target_var), dim=[2, 3], keepdim=True)
53
- cmd_loss = c / (d + 1e-5)
54
-
55
- return cmd_loss
File without changes
File without changes