pybaseutils 2.1.7__tar.gz → 2.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/PKG-INFO +1 -4
  2. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/coords_utils.py +62 -1
  4. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/video_utils.py +4 -4
  5. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/base_dataset.py +4 -0
  6. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_image_folder.py +1 -0
  7. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_image_text.py +5 -1
  8. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_labelme.py +1 -0
  9. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/file_utils.py +16 -0
  10. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/image_utils.py +6 -5
  11. pybaseutils-2.2.1/pybaseutils/log.py +79 -0
  12. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/numpy_utils.py +23 -5
  13. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/PKG-INFO +1 -4
  14. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/SOURCES.txt +10 -0
  15. pybaseutils-2.2.1/test_py/Image_enhance/__init__.py +7 -0
  16. pybaseutils-2.2.1/test_py/Image_enhance/dmeo01.py +31 -0
  17. pybaseutils-2.2.1/test_py/aije/convert_labelme2voc.py +47 -0
  18. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_labelme_crop.py +2 -2
  19. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/video_convertor.py +3 -2
  20. pybaseutils-2.2.1/test_py/demo1.py +55 -0
  21. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo2.py +5 -6
  22. pybaseutils-2.2.1/test_py/demo_get_file_label.py +56 -0
  23. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_get_file_list.py +1 -0
  24. pybaseutils-2.2.1/test_py/demo_gif.py +31 -0
  25. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_gif_video.py +3 -3
  26. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_lableme_vis.py +6 -3
  27. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_rename.py +1 -1
  28. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_video.py +2 -3
  29. pybaseutils-2.2.1/test_py/demo_video_crop.py +21 -0
  30. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/get_file_list.py +12 -3
  31. pybaseutils-2.2.1/test_py/milvus_demo/__init__.py +7 -0
  32. pybaseutils-2.2.1/test_py/milvus_demo/demo01.py +39 -0
  33. pybaseutils-2.2.1/test_py/milvus_demo/demo02.py +44 -0
  34. pybaseutils-2.2.1/test_py/milvus_demo/hello_milvus.py +189 -0
  35. pybaseutils-2.2.1/test_py/milvus_demo/milvus_client.py +124 -0
  36. pybaseutils-2.1.7/test_py/aije/convert_labelme2voc.py +0 -28
  37. pybaseutils-2.1.7/test_py/demo1.py +0 -56
  38. pybaseutils-2.1.7/test_py/demo_gif.py +0 -20
  39. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/LICENCE +0 -0
  40. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/README.md +0 -0
  41. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/__init__.py +0 -0
  42. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/audio_utils.py +0 -0
  43. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/pyaudio_utils.py +0 -0
  44. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/vad_utils.py +0 -0
  45. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/base64_utils.py +0 -0
  46. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/batch_utils.py +0 -0
  47. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/build_utils/__init__.py +0 -0
  48. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/build_utils/cython_utils.py +0 -0
  49. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  50. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/__init__.py +0 -0
  51. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/kmean.py +0 -0
  52. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/maxmin_distance.py +0 -0
  53. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/similarity.py +0 -0
  54. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/color_utils.py +0 -0
  55. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/config_utils.py +0 -0
  56. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/__init__.py +0 -0
  57. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_coco.py +0 -0
  58. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_cvat.py +0 -0
  59. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_labelme.py +0 -0
  60. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_voc.py +0 -0
  61. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/concat_coco.py +0 -0
  62. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  63. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_coco2voc.py +0 -0
  64. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  65. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  66. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  67. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  68. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  69. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2coco.py +0 -0
  70. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  71. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2voc.py +0 -0
  72. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  73. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  74. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/__init__.py +0 -0
  75. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/corner_utils.py +0 -0
  76. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/monitor.py +0 -0
  77. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/mouse_utils.py +0 -0
  78. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/nms_utils.py +0 -0
  79. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/__init__.py +0 -0
  80. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/balanced_classes.py +0 -0
  81. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/base_coco.py +0 -0
  82. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/data_resample.py +0 -0
  83. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  84. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  85. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  86. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_voc.py +0 -0
  87. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_yolo.py +0 -0
  88. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  89. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/QueueTable.py +0 -0
  90. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/__init__.py +0 -0
  91. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/demo.py +0 -0
  92. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/kalman_filter.py +0 -0
  93. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/mean_filter.py +0 -0
  94. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/motion_filter.py +0 -0
  95. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/pose_filter.py +0 -0
  96. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/font_style/__init__.py +0 -0
  97. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/font_utils.py +0 -0
  98. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/geometry_tools.py +0 -0
  99. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/heatmap_utils.py +0 -0
  100. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/json_utils.py +0 -0
  101. /pybaseutils-2.1.7/pybaseutils/log.py → /pybaseutils-2.2.1/pybaseutils/log_utils.py +0 -0
  102. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/logger.py +0 -0
  103. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/__init__.py +0 -0
  104. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/accuracy.py +0 -0
  105. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/average_meter.py +0 -0
  106. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/class_report.py +0 -0
  107. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/plot_pr.py +0 -0
  108. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/plot_roc.py +0 -0
  109. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pandas_utils.py +0 -0
  110. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/plot_utils.py +0 -0
  111. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/__init__.py +0 -0
  112. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/bones_utils.py +0 -0
  113. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/human_pose.py +0 -0
  114. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/pose_utils.py +0 -0
  115. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pycpp/__init__.py +0 -0
  116. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pycpp/demo.py +0 -0
  117. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pycpp/main.py +0 -0
  118. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/server/__init__.py +0 -0
  119. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/server/apm_server.py +0 -0
  120. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/setup_config.py +0 -0
  121. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/singleton_utils.py +0 -0
  122. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/text_utils.py +0 -0
  123. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/thread_utils.py +0 -0
  124. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/time_utils.py +0 -0
  125. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracemalloc_utils.py +0 -0
  126. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracemalloc_utils2.py +0 -0
  127. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/QueueTable.py +0 -0
  128. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/__init__.py +0 -0
  129. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/demo.py +0 -0
  130. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/kalman_filter.py +0 -0
  131. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/mean_filter.py +0 -0
  132. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/motion_filter.py +0 -0
  133. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/pose_filter.py +0 -0
  134. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/__init__.py +0 -0
  135. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/affine_transform.py +0 -0
  136. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/augment_utils.py +0 -0
  137. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/face_alignment.py +0 -0
  138. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/transform_utils.py +0 -0
  139. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/word_utils.py +0 -0
  140. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/worker.py +0 -0
  141. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/yaml_utils.py +0 -0
  142. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/dependency_links.txt +0 -0
  143. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/not-zip-safe +0 -0
  144. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/top_level.txt +0 -0
  145. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/setup.cfg +0 -0
  146. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/setup.py +0 -0
  147. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/WebCrawler/__init__.py +0 -0
  148. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/WebCrawler/search_image.py +0 -0
  149. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  150. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/__init__.py +0 -0
  151. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/__init__.py +0 -0
  152. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/action_dataset.py +0 -0
  153. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/build_cython.py +0 -0
  154. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/build_pyarmor.py +0 -0
  155. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/build_service.py +0 -0
  156. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/convert_cvat2labelme.py +0 -0
  157. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/convert_labelme2coco.py +0 -0
  158. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/copy_move.py +0 -0
  159. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_video_aije.py +0 -0
  160. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_voc_crop.py +0 -0
  161. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_voc_vis.py +0 -0
  162. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/get_pair_data.py +0 -0
  163. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/__init__.py +0 -0
  164. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/demo.py +0 -0
  165. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/main.py +0 -0
  166. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/main_read.py +0 -0
  167. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/segment.py +0 -0
  168. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  169. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/speechbrain_demo.py +0 -0
  170. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/captcha/__init__.py +0 -0
  171. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/captcha/demo.py +0 -0
  172. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/class_attribute.py +0 -0
  173. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/class_names.py +0 -0
  174. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/AffectNet.py +0 -0
  175. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/AsianMovie.py +0 -0
  176. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/BITVehicle2voc.py +0 -0
  177. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/BSTLD2voc.py +0 -0
  178. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/CCPD.py +0 -0
  179. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/CCPD2voc.py +0 -0
  180. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/FL3D_dataset.py +0 -0
  181. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/FreiHAND2coco.py +0 -0
  182. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/MTFL2voc.py +0 -0
  183. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/TT100K.py +0 -0
  184. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/WaterMeters1.py +0 -0
  185. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/WaterMeters2.py +0 -0
  186. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/__init__.py +0 -0
  187. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/concat_coco.py +0 -0
  188. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_coco2voc.py +0 -0
  189. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_cvat2labelme.py +0 -0
  190. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_gesture2hand.py +0 -0
  191. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_labelme2coco.py +0 -0
  192. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_labelme2cvat.py +0 -0
  193. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_labelme2voc.py +0 -0
  194. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_voc2labelme.py +0 -0
  195. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/fatigue_driving.py +0 -0
  196. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/fdd_dataset.py +0 -0
  197. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/get_pair_data.py +0 -0
  198. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/handpose2coco.py +0 -0
  199. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/insects_for_aichallenger.py +0 -0
  200. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/tt100k_utils.py +0 -0
  201. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/ua_detrac2voc.py +0 -0
  202. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/ucf101_dataset.py +0 -0
  203. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/voc_sbd2labelme.py +0 -0
  204. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/__init__.py +0 -0
  205. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/build_cython.py +0 -0
  206. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/build_pyarmor.py +0 -0
  207. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/cryptography_demo.py +0 -0
  208. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/fun_sum.py +0 -0
  209. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/main.py +0 -0
  210. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/model_des_enctypt.py +0 -0
  211. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/model_enctypt.py +0 -0
  212. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo3.py +0 -0
  213. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_async_await1.py +0 -0
  214. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_async_await2.py +0 -0
  215. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_coco_vis.py +0 -0
  216. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_copy_files.py +0 -0
  217. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_copy_files_for_voc.py +0 -0
  218. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_ffmpy.py +0 -0
  219. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_for_pair_file.py +0 -0
  220. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_for_polygon.py +0 -0
  221. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_for_trt.py +0 -0
  222. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_image_crop.py +0 -0
  223. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_kpts.py +0 -0
  224. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_labelme.py +0 -0
  225. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_labelme_crop.py +0 -0
  226. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_metrics.py +0 -0
  227. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_mouse.py +0 -0
  228. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_nii.py +0 -0
  229. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_pandas.py +0 -0
  230. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_plot.py +0 -0
  231. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_standard_image .py +0 -0
  232. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_standard_video .py +0 -0
  233. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_taichi.py +0 -0
  234. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_voc_crop.py +0 -0
  235. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_voc_vis.py +0 -0
  236. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_word_similar.py +0 -0
  237. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_worker1.py +0 -0
  238. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_worker2.py +0 -0
  239. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/__init__.py +0 -0
  240. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/demo.py +0 -0
  241. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/detect_face_person.py +0 -0
  242. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/predet_labelme.py +0 -0
  243. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/edit_distance/__init__.py +0 -0
  244. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/edit_distance/demo.py +0 -0
  245. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/edit_distance/text_matching.py +0 -0
  246. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/flask_demo/__init__.py +0 -0
  247. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/flask_demo/func.py +0 -0
  248. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/flask_demo/server.py +0 -0
  249. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/__init__.py +0 -0
  250. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/demo_correction_v1.py +0 -0
  251. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/demo_correction_v2.py +0 -0
  252. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/demo_correction_v3.py +0 -0
  253. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/kafka_worker.py +0 -0
  254. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/men_tracemalloc.py +0 -0
  255. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/performance.py +0 -0
  256. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/pose/__init__.py +0 -0
  257. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/pose/human_pose.py +0 -0
  258. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/redis_py/__init__.py +0 -0
  259. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/redis_py/knn_search.py +0 -0
  260. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/redis_py/redis_client.py +0 -0
  261. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/__init__.py +0 -0
  262. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/base.py +0 -0
  263. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/component.py +0 -0
  264. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/main.py +0 -0
  265. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/register.py +0 -0
  266. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/GRU.py +0 -0
  267. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/TCN.py +0 -0
  268. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/__init__.py +0 -0
  269. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/demo.py +0 -0
  270. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/test_fr/__init__.py +0 -0
  271. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/test_fr/demo11.py +0 -0
  272. {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/test_fr/idcardocr.py +0 -0
@@ -1,12 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.1.7
3
+ Version: 2.2.1
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
7
7
  Author-email: 390737991@qq.com
8
8
  License: MIT
9
- Platform: UNKNOWN
10
9
  License-File: LICENCE
11
10
 
12
11
  base-utils
@@ -139,5 +138,3 @@ base_utils(C++)
139
138
  return 0;
140
139
  }
141
140
 
142
-
143
-
@@ -5,4 +5,4 @@
5
5
  @Date : 2019-05-07 17:40:27
6
6
  """
7
7
 
8
- __version__ = '2.1.7'
8
+ __version__ = '2.2.1'
@@ -267,7 +267,7 @@ def get_section(start, end, nums=2, scale=1.0, dtype=None):
267
267
  return out
268
268
 
269
269
 
270
- def box_iou_v1(box1, box2):
270
+ def get_boxes_iou(box1, box2):
271
271
  """
272
272
  :param box1: 预测框(n, 4)
273
273
  :param box2: GT框 (m, 4)
@@ -294,6 +294,9 @@ def box_iou_v1(box1, box2):
294
294
  return iou
295
295
 
296
296
 
297
+ box_iou_v1 = get_boxes_iou
298
+
299
+
297
300
  def box_iou_v2(box1, box2):
298
301
  """
299
302
  https://www.jb51.net/article/178732.htm
@@ -321,6 +324,64 @@ def box_iou_v2(box1, box2):
321
324
  return iou
322
325
 
323
326
 
327
+ def get_box_iou(box1, box2):
328
+ """
329
+ 计算IOU=交集(A,B)/并集(A,B)
330
+ 计算IOM=交集(A,B)/最小集(A,B)
331
+ :param box1: = [xmin1, ymin1, xmax1, ymax1]
332
+ :param box2: = [xmin2, ymin2, xmax2, ymax2]
333
+ :return:
334
+ """
335
+ if len(box1) == 0: return 0
336
+ if len(box2) == 0: return 0
337
+ xmin1, ymin1, xmax1, ymax1 = box1
338
+ xmin2, ymin2, xmax2, ymax2 = box2
339
+ # 计算每个矩形的面积
340
+ s1 = (xmax1 - xmin1) * (ymax1 - ymin1) # C的面积
341
+ s2 = (xmax2 - xmin2) * (ymax2 - ymin2) # G的面积
342
+
343
+ # 计算相交矩形
344
+ xmin = max(xmin1, xmin2)
345
+ ymin = max(ymin1, ymin2)
346
+ xmax = min(xmax1, xmax2)
347
+ ymax = min(ymax1, ymax2)
348
+
349
+ w = max(0, xmax - xmin)
350
+ h = max(0, ymax - ymin)
351
+ area = w * h # C∩G的面积
352
+ iou = area / (s1 + s2 - area)
353
+ return iou
354
+
355
+
356
+ def get_box_iom(box1, box2):
357
+ """
358
+ 计算IOU=交集(A,B)/并集(A,B)
359
+ 计算IOM=交集(A,B)/最小集(A,B)
360
+ :param box1: = [xmin1, ymin1, xmax1, ymax1]
361
+ :param box2: = [xmin2, ymin2, xmax2, ymax2]
362
+ :return:
363
+ """
364
+ if len(box1) == 0: return 0
365
+ if len(box2) == 0: return 0
366
+ xmin1, ymin1, xmax1, ymax1 = box1
367
+ xmin2, ymin2, xmax2, ymax2 = box2
368
+ # 计算每个矩形的面积
369
+ s1 = (xmax1 - xmin1) * (ymax1 - ymin1) # C的面积
370
+ s2 = (xmax2 - xmin2) * (ymax2 - ymin2) # G的面积
371
+
372
+ # 计算相交矩形
373
+ xmin = max(xmin1, xmin2)
374
+ ymin = max(ymin1, ymin2)
375
+ xmax = min(xmax1, xmax2)
376
+ ymax = min(ymax1, ymax2)
377
+
378
+ w = max(0, xmax - xmin)
379
+ h = max(0, ymax - ymin)
380
+ area = w * h # C∩G的面积
381
+ iou = area / min(s1, s2)
382
+ return iou
383
+
384
+
324
385
  class YOLOCoords(object):
325
386
  def __init__(self, max_boxes=120, norm=False):
326
387
  self.max_boxes = max_boxes
@@ -245,11 +245,11 @@ def video_capture(video_file: int or str, save_video: str or int = None, interva
245
245
  end = min(end, num_frames) # TODO 当num_frames<0时,使用0<end<count继续播放
246
246
  interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
247
247
  save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
248
- count = start
248
+ count = 0
249
249
  video_writer = None
250
250
  while True:
251
251
  ret, frame = video_cap.read()
252
- if count % interval == 0 and count >= 0:
252
+ if count % interval == 0 and count >= start:
253
253
  # TODO 设置抽帧的位置,但某些格式视频容易出现问题
254
254
  # if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
255
255
  # ret, frame = video_cap.read()
@@ -297,11 +297,11 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
297
297
  end = min(end, num_frames) # TODO 当num_frames<0时,使用0<end<count继续播放
298
298
  interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
299
299
  save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
300
- count = start
300
+ count = 0
301
301
  video_writer = None
302
302
  while True:
303
303
  ret, frame = video_cap.read()
304
- if count % interval == 0 and count >= 0:
304
+ if count % interval == 0 and count >= start:
305
305
  # TODO 设置抽帧的位置,但某些格式视频容易出现问题
306
306
  # if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
307
307
  # ret, frame = video_cap.read()
@@ -123,6 +123,10 @@ class Dataset(object):
123
123
  image_id.append(line)
124
124
  return image_id
125
125
 
126
+ @staticmethod
127
+ def read_files(filename, split=None): # TODO 避免兼容问题
128
+ return Dataset.read_file(filename, split=split)
129
+
126
130
  @staticmethod
127
131
  def get_file_list(dir_root, postfix=['*.jpg'], basename=True):
128
132
  """
@@ -26,6 +26,7 @@ class FolderDataset(parser_image_text.TextDataset):
26
26
  :param shuffle:
27
27
  :param disp:
28
28
  """
29
+ self.image_dir = image_dir
29
30
  super(FolderDataset, self).__init__(data_file=image_dir,
30
31
  data_root=None,
31
32
  class_name=class_name,
@@ -38,10 +38,14 @@ class TextDataset(Dataset):
38
38
  :param check:
39
39
  :param kwargs: use_max,use_mean,crop_scale,resample,save_info
40
40
  """
41
- self.kwargs = kwargs
41
+ self.data_file = data_file
42
+ self.data_root = data_root
42
43
  self.use_rgb = use_rgb
43
44
  self.transform = transform
44
45
  self.phase = phase
46
+ self.shuffle = shuffle
47
+ self.check = check
48
+ self.kwargs = kwargs
45
49
  self.label_index = kwargs.get("label_index", "label") # 类别字段key
46
50
  self.class_name, self.class_dict = self.parser_classes(class_name)
47
51
  self.item_list = self.parser_dataset(data_file, data_root=data_root, label_index=self.label_index,
@@ -391,6 +391,7 @@ def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
391
391
  # image = image_utils.draw_key_point_in_image(image, points)
392
392
  image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
393
393
  image_utils.cv_show_image("det", image)
394
+ return image
394
395
 
395
396
 
396
397
  if __name__ == "__main__":
@@ -25,6 +25,7 @@ from tqdm import tqdm
25
25
 
26
26
  IMG_POSTFIX = ['*.jpg', '*.jpeg', '*.png', '*.tif', "*.JPG", "*.bmp"]
27
27
  VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv"]
28
+ AUDIO_POSTFIX = ['*.mp3', '*.wav']
28
29
 
29
30
 
30
31
  def str2bool(v):
@@ -71,6 +72,21 @@ def get_file_size(file, rate=1024):
71
72
  return os.path.getsize(file) / rate
72
73
 
73
74
 
75
+ def replace_elements(items, src, dst, ignore=True):
76
+ """
77
+ 将列表中,值为src改为dst
78
+ :param items:
79
+ :param src:
80
+ :param dst:
81
+ :param ignore: 是否提出空的数据
82
+ :return:
83
+ """
84
+ for i, item in enumerate(items):
85
+ if item == src: items[i] = dst
86
+ if ignore: items = [it for it in items if str(it)]
87
+ return items
88
+
89
+
74
90
  def combine_flags(flags: list, use_time=True, info=True):
75
91
  """
76
92
  :param flags:
@@ -631,6 +631,7 @@ def resize_image_padding(image, size, color=(0, 0, 0), interpolation=cv2.INTER_L
631
631
  :param color: 短边进行填充的color value
632
632
  :return:
633
633
  """
634
+ if not size: return image
634
635
  h, w = image.shape[:2]
635
636
  if w / h > size[0] / size[1] > 0:
636
637
  dsize = (size[0], None)
@@ -1753,8 +1754,6 @@ def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, sco
1753
1754
  return index
1754
1755
 
1755
1756
 
1756
-
1757
-
1758
1757
  def file2base64(file):
1759
1758
  image_base64 = base64.b64encode(open(file, 'rb').read()).decode()
1760
1759
  return image_base64
@@ -2880,15 +2879,15 @@ def frames2gif_by_pil(frames, gif_file="test.gif", fps=2, loop=0, use_rgb=False)
2880
2879
  optimize=False, loop=loop)
2881
2880
 
2882
2881
 
2883
- def image_dir2gif(image_dir, size=None, gif_file=None, interval=1, fps=4, loop=0, padding=True, use_pil=True):
2882
+ def image_dir2gif(image_dir, size=None, gif_file=None, interval=1, fps=4, loop=0, padding=False, crop=[], use_pil=True):
2884
2883
  if not gif_file: gif_file = os.path.join(os.path.dirname(image_dir), os.path.basename(image_dir) + ".gif")
2885
2884
  file_list = file_utils.get_images_list(image_dir)
2886
2885
  image_file2gif(file_list, size=size, gif_file=gif_file, interval=interval, fps=fps, loop=loop,
2887
- padding=padding, use_pil=use_pil)
2886
+ padding=padding, crop=crop, use_pil=use_pil)
2888
2887
 
2889
2888
 
2890
2889
  def image_file2gif(file_list, size=None, gif_file="test.gif", interval=1, fps=4, loop=0,
2891
- padding=True, use_pil=False):
2890
+ padding=True, crop=[], use_pil=False):
2892
2891
  """
2893
2892
  pip install imageio
2894
2893
  uri:合成后的gif动图的名字,可以随意更改。
@@ -2902,6 +2901,7 @@ def image_file2gif(file_list, size=None, gif_file="test.gif", interval=1, fps=4,
2902
2901
  :param size:gif图片的大小
2903
2902
  :param gif_file: 输出的GIF图的路径
2904
2903
  :param fps: 刷新频率
2904
+ :param crop: 裁剪(xmin,ymin,xmax,ymax)
2905
2905
  :param loop: 循环次数
2906
2906
  :param use_pil: True使用PIL库生成GIF图,文件小,但质量较差
2907
2907
  False使用imageio库生成GIF图,文件大,但质量较好
@@ -2912,6 +2912,7 @@ def image_file2gif(file_list, size=None, gif_file="test.gif", interval=1, fps=4,
2912
2912
  if count % interval == 0:
2913
2913
  bgr = cv2.imread(file)
2914
2914
  image = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
2915
+ if len(crop) == 4: image = get_box_crop(image, box=crop)
2915
2916
  if padding:
2916
2917
  image = resize_image_padding(image, size=size)
2917
2918
  else:
@@ -0,0 +1,79 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-10-27 13:42:12
6
+ @Brief :
7
+ """
8
+ import os
9
+ import sys
10
+ from loguru import logger
11
+
12
+ LOG_FORMAT = {
13
+ "simple": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}| {message}",
14
+ "name": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}|{name} {line:4}| {message}", # 打印文件名
15
+ "module": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}|{name}.{module} {line:4}| {message}", # 打印模块名
16
+ "function": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}|{name}.{module}.{function} {line:4}| {message}", # 打印函数
17
+ }
18
+
19
+
20
+ def set_logger(name="", level="debug", logfile=None, format="simple", is_main_process=True):
21
+ """
22
+ logger = set_logger(level="debug", logfile="log.txt")
23
+ url: https://www.cnblogs.com/shiyitongxue/p/17870527.html
24
+ :param level: 设置log输出级别:debug,info,warning,error
25
+ :param logfile: log保存路径,如果为None,则在控制台打印log
26
+ :param is_main_process: 是否是主进程
27
+ :return:
28
+ """
29
+ format = LOG_FORMAT.get(format, LOG_FORMAT.get("simple"))
30
+ if is_main_process:
31
+ logger.configure(handlers=[{"sink": sys.stderr, # 打印到控制台,sys.stderr表示控制台
32
+ "format": format, "colorize": True, "level": level.upper()},
33
+ {"sink": logfile, # 输出到文件,文件名app.log
34
+ "format": format, "colorize": False, "level": level.upper(), "rotation": "100 MB",
35
+ "retention": "10 days"}
36
+ ])
37
+ else:
38
+ logger.configure(handlers=[{"sink": sys.stderr, # 打印到控制台,sys.stderr表示控制台
39
+ "format": format, "colorize": True, "level": "ERROR"}
40
+ ])
41
+ return logger
42
+
43
+
44
+ def set_logger_v2(name="", level="debug", logfile=None, format=None, is_main_process=True):
45
+ """
46
+ logger = set_logger(level="debug", logfile="log.txt")
47
+ url: https://www.cnblogs.com/shiyitongxue/p/17870527.html
48
+ :param level: 设置log输出级别:debug,info,warning,error
49
+ :param logfile: log保存路径,如果为None,则在控制台打印log
50
+ :param is_main_process: 是否是主进程
51
+ :return:
52
+ """
53
+ format = LOG_FORMAT.get(format, LOG_FORMAT.get("line"))
54
+ logger.remove(0) # 去除默认的LOG
55
+ if is_main_process:
56
+ # 每天创建一个新的文件,一个星期定期清理一次
57
+ logger.add(logfile, level=level.upper(), rotation="1 day", retention="7 days", format=format)
58
+ logger.add(sys.stderr, level=level.upper(), format=format)
59
+ else:
60
+ logger.add(sys.stderr, level="ERROR", format=format)
61
+ return logger
62
+
63
+
64
+ def get_logger():
65
+ return logger
66
+
67
+
68
+ def example():
69
+ logger = get_logger()
70
+ logger.debug("debug")
71
+ logger.info("info")
72
+ logger.warning("warning")
73
+ logger.error("error")
74
+
75
+
76
+ if __name__ == '__main__':
77
+ logfile = "./log.log"
78
+ logger = set_logger(logfile=logfile, is_main_process=True, level="debug")
79
+ example()
@@ -13,7 +13,7 @@ import heapq
13
13
 
14
14
  def feature_norm(x, axis=-1):
15
15
  """
16
- 特征归一化:
16
+ 特征归一化,会使得特征L2之和为1, 即||y||=L2(y,axis=-1)
17
17
  y = x / x.norm(dim=-1, keepdim=True) # torch
18
18
  y = x / np.linalg.norm(x, axis=-1, keepdims=True) # numpy
19
19
  :param x: 输入二维矩阵(N,embedding-size),每行是一个样本,样本特征维度为embedding-size
@@ -24,6 +24,21 @@ def feature_norm(x, axis=-1):
24
24
  return y
25
25
 
26
26
 
27
+ def torch_norm(x, axis=-1):
28
+ """
29
+ 特征归一化:
30
+ y = x / x.norm(dim=-1, keepdim=True) # torch
31
+ y = x / np.linalg.norm(x, axis=-1, keepdims=True) # numpy
32
+ :param x: 输入二维矩阵(N,embedding-size),每行是一个样本,样本特征维度为embedding-size
33
+ :param axis:
34
+ :return:
35
+ """
36
+ import torch
37
+ x = torch.from_numpy(x)
38
+ y = x / x.norm(dim=-1, keepdim=True) # torch
39
+ return y
40
+
41
+
27
42
  def feature_similarity(inputs, target):
28
43
  """
29
44
  计算特征相似性
@@ -645,8 +660,11 @@ class Preprocessing(object):
645
660
  if __name__ == "__main__":
646
661
  from pybaseutils import numpy_utils
647
662
 
648
- y = np.array([[0., 0.1, 0], [0, 0.1, 1], [0, 0.1, 2]])
649
- x = np.array([[0, 0.1, 1], [0, 0.1, 2], [0., 0.1, 0]])
650
- x = feature_norm(x)
663
+ y = np.array([[0., 0.1, 0, 1], [0, 0.1, 1, 1], [0, 0.1, 2, 1]])
664
+ x = np.array([[0, 0.1, 1, 1], [0, 0.1, 2, 1], [0., 0.1, 0, 1]])
665
+ x1 = feature_norm(x)
666
+ x2 = torch_norm(x).numpy()
667
+ print(l2(x1, axis=-1))
668
+ print(l2(x2, axis=-1))
651
669
  y = feature_norm(y)
652
- print(feature_matching(x, y))
670
+ print(feature_matching(x1, y))
@@ -1,12 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.1.7
3
+ Version: 2.2.1
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
7
7
  Author-email: 390737991@qq.com
8
8
  License: MIT
9
- Platform: UNKNOWN
10
9
  License-File: LICENCE
11
10
 
12
11
  base-utils
@@ -139,5 +138,3 @@ base_utils(C++)
139
138
  return 0;
140
139
  }
141
140
 
142
-
143
-
@@ -14,6 +14,7 @@ pybaseutils/heatmap_utils.py
14
14
  pybaseutils/image_utils.py
15
15
  pybaseutils/json_utils.py
16
16
  pybaseutils/log.py
17
+ pybaseutils/log_utils.py
17
18
  pybaseutils/logger.py
18
19
  pybaseutils/numpy_utils.py
19
20
  pybaseutils/pandas_utils.py
@@ -132,6 +133,7 @@ test_py/demo_ffmpy.py
132
133
  test_py/demo_for_pair_file.py
133
134
  test_py/demo_for_polygon.py
134
135
  test_py/demo_for_trt.py
136
+ test_py/demo_get_file_label.py
135
137
  test_py/demo_get_file_list.py
136
138
  test_py/demo_gif.py
137
139
  test_py/demo_gif_video.py
@@ -150,6 +152,7 @@ test_py/demo_standard_image .py
150
152
  test_py/demo_standard_video .py
151
153
  test_py/demo_taichi.py
152
154
  test_py/demo_video.py
155
+ test_py/demo_video_crop.py
153
156
  test_py/demo_voc_crop.py
154
157
  test_py/demo_voc_vis.py
155
158
  test_py/demo_word_similar.py
@@ -159,6 +162,8 @@ test_py/get_file_list.py
159
162
  test_py/kafka_worker.py
160
163
  test_py/men_tracemalloc.py
161
164
  test_py/performance.py
165
+ test_py/Image_enhance/__init__.py
166
+ test_py/Image_enhance/dmeo01.py
162
167
  test_py/WebCrawler/__init__.py
163
168
  test_py/WebCrawler/search_image.py
164
169
  test_py/WebCrawler/search_image_for_baidu.py
@@ -238,6 +243,11 @@ test_py/image_correction/__init__.py
238
243
  test_py/image_correction/demo_correction_v1.py
239
244
  test_py/image_correction/demo_correction_v2.py
240
245
  test_py/image_correction/demo_correction_v3.py
246
+ test_py/milvus_demo/__init__.py
247
+ test_py/milvus_demo/demo01.py
248
+ test_py/milvus_demo/demo02.py
249
+ test_py/milvus_demo/hello_milvus.py
250
+ test_py/milvus_demo/milvus_client.py
241
251
  test_py/pose/__init__.py
242
252
  test_py/pose/human_pose.py
243
253
  test_py/redis_py/__init__.py
@@ -0,0 +1,7 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-10-25 19:36:07
6
+ @Brief :
7
+ """
@@ -0,0 +1,31 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-12-31 11:37:30
6
+ @Brief : https://blog.csdn.net/qdPython/article/details/121381363
7
+ """
8
+ import cv2
9
+ import random
10
+ import types
11
+ import numpy as np
12
+ from typing import Callable
13
+ from pybaseutils import image_utils, file_utils, text_utils
14
+ from pybaseutils.cvutils import video_utils
15
+ import cv2
16
+ import re
17
+
18
+
19
+ def equalizeHist(image):
20
+ image = cv2.equalizeHist(image)
21
+ return image
22
+
23
+
24
+ if __name__ == '__main__':
25
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/暗光数据"
26
+ image_list = file_utils.get_images_list(image_dir)
27
+ for image_file in image_list:
28
+ src = cv2.imread(image_file)
29
+ dst = equalizeHist(src)
30
+ image_utils.cv_show_image("dst", dst, delay=10)
31
+ image_utils.cv_show_image("src", src, delay=0)
@@ -0,0 +1,47 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : Pan
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-10-12 16:21:55
6
+ @Brief :
7
+ """
8
+ import sys
9
+ import os
10
+
11
+ sys.path.insert(0, os.getcwd())
12
+ import cv2
13
+ from pybaseutils.converter.convert_labelme2voc import Labelme2VOC
14
+
15
+
16
+ def build_dataset(anno_dir, class_dict=None):
17
+ # anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v1-det/dataset-v01/json"
18
+ data_root = os.path.dirname(anno_dir)
19
+ image_dir = os.path.join(data_root, "JPEGImages")
20
+ # class_dict = {"身穿工作服": "person", "未穿工作服": "person"}
21
+ # out_root = os.path.join(data_root, "person")
22
+ # out_image_dir = os.path.join(data_root, "person")
23
+ print(anno_dir)
24
+ lm = Labelme2VOC(image_dir, anno_dir, class_name=class_dict, shuffle=False)
25
+ lm.build_dataset(data_root, class_dict={}, out_img=False, vis=False, crop=False)
26
+
27
+
28
+ def build_datasets():
29
+ anno_dirs = [
30
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v21/json',
31
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v22/json',
32
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v23/json',
33
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v24/json',
34
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v25/json',
35
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v26/json',
36
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v27/json',
37
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v28/json',
38
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v29/json',
39
+ '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v29-test/json',
40
+ ]
41
+ for anno_dir in anno_dirs:
42
+ build_dataset(anno_dir)
43
+
44
+
45
+ if __name__ == "__main__":
46
+ # 将AIJE项目数据集,转换为VOC数据集
47
+ build_datasets()
@@ -64,7 +64,7 @@ if __name__ == "__main__":
64
64
  '绝缘手套', '绝缘鞋', '脚扣', '螺丝', '身穿工作服', '遮拦杆', '铁架', '铝扎线']
65
65
  室外: []
66
66
  """
67
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v21/json"
67
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/test-v1/aije-action-train-v02/json"
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,7 +77,7 @@ 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.0, 1.0]
80
+ scale = [1.5,1.5]
81
81
  flag = str(scale[0]).replace(".", "p")
82
82
  flag = None
83
83
  # scale = None
@@ -16,12 +16,13 @@ from pybaseutils import image_utils, file_utils
16
16
  def video_converter(inp_dir, out_dir):
17
17
  files = file_utils.get_files_list(inp_dir, postfix=["*.dav"])
18
18
  for video_file in tqdm(files):
19
+ print(video_file)
19
20
  save_video = file_utils.create_dir(out_dir, None, os.path.basename(video_file))
20
21
  save_video = save_video.replace(".dav", ".mp4")
21
22
  video_utils.video2video(video_file, save_video, interval=1, vis=False)
22
23
 
23
24
 
24
25
  if __name__ == '__main__':
25
- inp_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/江门四维数据/江门四维2024-08-06/NVR录像文件"
26
- out_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/江门四维数据/江门四维2024-08-06/MP4录像文件"
26
+ inp_dir = "/home/PKing/Downloads/NVR"
27
+ out_dir = "/home/PKing/Downloads/NVR"
27
28
  video_converter(inp_dir, out_dir)
@@ -0,0 +1,55 @@
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
@@ -8,6 +8,7 @@
8
8
  import cv2
9
9
  import random
10
10
  import types
11
+ import torch
11
12
  import numpy as np
12
13
  from typing import Callable
13
14
  from pybaseutils import image_utils, file_utils, text_utils
@@ -16,9 +17,7 @@ import cv2
16
17
  import re
17
18
 
18
19
  if __name__ == '__main__':
19
- # 示例使用
20
- subs = ["拿", '手*'] #
21
- texts = ["拿着", "手拿安全帽", "手拿绝缘手套", "手拿工具袋"]
22
- # 使用通配符查找子串
23
- matches = text_utils.find_match_texts(texts, subs, org=True)
24
- print(matches)
20
+ accs = np.asarray([0.6205, 0.5752, 0.9296, 0.9906, 0.4833, 0.0756, 0.000001, 0, 0, 0.8205, 0.9205])
21
+ print(accs,np.mean(accs))
22
+ accs = accs[accs > 0]
23
+ print(accs,np.mean(accs))