pybaseutils 2.1.4__tar.gz → 2.1.6__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 (259) hide show
  1. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/PKG-INFO +1 -1
  2. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/__init__.py +1 -1
  3. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/audio_utils.py +49 -7
  4. pybaseutils-2.1.6/pybaseutils/cvutils/nms_utils.py +62 -0
  5. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_image_folder.py +3 -2
  6. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_image_text.py +6 -7
  7. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_labelme.py +2 -2
  8. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/image_utils.py +14 -13
  9. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pandas_utils.py +21 -0
  10. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/PKG-INFO +1 -1
  11. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/SOURCES.txt +5 -0
  12. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_labelme_crop.py +1 -1
  13. pybaseutils-2.1.6/test_py/aije/get_pair_data.py +18 -0
  14. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_lableme_vis.py +1 -1
  15. pybaseutils-2.1.6/test_py/redis_py/__init__.py +7 -0
  16. pybaseutils-2.1.6/test_py/redis_py/knn_search.py +14 -0
  17. pybaseutils-2.1.6/test_py/redis_py/redis_client.py +87 -0
  18. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/LICENCE +0 -0
  19. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/README.md +0 -0
  20. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/__init__.py +0 -0
  21. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/pyaudio_utils.py +0 -0
  22. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/vad_utils.py +0 -0
  23. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/base64_utils.py +0 -0
  24. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/batch_utils.py +0 -0
  25. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/build_utils/__init__.py +0 -0
  26. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/build_utils/cython_utils.py +0 -0
  27. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  28. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/__init__.py +0 -0
  29. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/kmean.py +0 -0
  30. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/maxmin_distance.py +0 -0
  31. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/similarity.py +0 -0
  32. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/color_utils.py +0 -0
  33. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/config_utils.py +0 -0
  34. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/__init__.py +0 -0
  35. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_coco.py +0 -0
  36. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_cvat.py +0 -0
  37. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_labelme.py +0 -0
  38. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_voc.py +0 -0
  39. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/concat_coco.py +0 -0
  40. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  41. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_coco2voc.py +0 -0
  42. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  43. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  44. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  45. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  46. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  47. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2coco.py +0 -0
  48. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  49. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2voc.py +0 -0
  50. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  51. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  52. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/coords_utils.py +0 -0
  53. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/__init__.py +0 -0
  54. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/corner_utils.py +0 -0
  55. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/monitor.py +0 -0
  56. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/mouse_utils.py +0 -0
  57. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/video_utils.py +0 -0
  58. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/__init__.py +0 -0
  59. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/balanced_classes.py +0 -0
  60. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/base_coco.py +0 -0
  61. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/base_dataset.py +0 -0
  62. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/data_resample.py +0 -0
  63. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  64. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  65. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  66. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_voc.py +0 -0
  67. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_yolo.py +0 -0
  68. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  69. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/file_utils.py +0 -0
  70. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/QueueTable.py +0 -0
  71. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/__init__.py +0 -0
  72. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/demo.py +0 -0
  73. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/kalman_filter.py +0 -0
  74. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/mean_filter.py +0 -0
  75. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/motion_filter.py +0 -0
  76. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/pose_filter.py +0 -0
  77. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/font_style/__init__.py +0 -0
  78. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/font_utils.py +0 -0
  79. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/geometry_tools.py +0 -0
  80. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/heatmap_utils.py +0 -0
  81. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/json_utils.py +0 -0
  82. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/log.py +0 -0
  83. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/logger.py +0 -0
  84. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/__init__.py +0 -0
  85. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/accuracy.py +0 -0
  86. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/average_meter.py +0 -0
  87. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/class_report.py +0 -0
  88. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/plot_pr.py +0 -0
  89. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/plot_roc.py +0 -0
  90. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/numpy_utils.py +0 -0
  91. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/plot_utils.py +0 -0
  92. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/__init__.py +0 -0
  93. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/bones_utils.py +0 -0
  94. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/human_pose.py +0 -0
  95. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/pose_utils.py +0 -0
  96. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pycpp/__init__.py +0 -0
  97. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pycpp/demo.py +0 -0
  98. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pycpp/main.py +0 -0
  99. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/server/__init__.py +0 -0
  100. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/server/apm_server.py +0 -0
  101. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/setup_config.py +0 -0
  102. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/singleton_utils.py +0 -0
  103. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/text_utils.py +0 -0
  104. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/thread_utils.py +0 -0
  105. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/time_utils.py +0 -0
  106. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracemalloc_utils.py +0 -0
  107. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracemalloc_utils2.py +0 -0
  108. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/QueueTable.py +0 -0
  109. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/__init__.py +0 -0
  110. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/demo.py +0 -0
  111. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/kalman_filter.py +0 -0
  112. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/mean_filter.py +0 -0
  113. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/motion_filter.py +0 -0
  114. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/pose_filter.py +0 -0
  115. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/__init__.py +0 -0
  116. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/affine_transform.py +0 -0
  117. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/augment_utils.py +0 -0
  118. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/face_alignment.py +0 -0
  119. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/transform_utils.py +0 -0
  120. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/word_utils.py +0 -0
  121. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/worker.py +0 -0
  122. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/yaml_utils.py +0 -0
  123. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/dependency_links.txt +0 -0
  124. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/not-zip-safe +0 -0
  125. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/top_level.txt +0 -0
  126. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/setup.cfg +0 -0
  127. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/setup.py +0 -0
  128. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/WebCrawler/__init__.py +0 -0
  129. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/WebCrawler/search_image.py +0 -0
  130. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  131. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/__init__.py +0 -0
  132. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/__init__.py +0 -0
  133. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/action_dataset.py +0 -0
  134. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/build_cython.py +0 -0
  135. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/build_pyarmor.py +0 -0
  136. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/build_service.py +0 -0
  137. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/convert_cvat2labelme.py +0 -0
  138. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/convert_labelme2coco.py +0 -0
  139. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/convert_labelme2voc.py +0 -0
  140. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/copy_move.py +0 -0
  141. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_video_aije.py +0 -0
  142. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_voc_crop.py +0 -0
  143. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_voc_vis.py +0 -0
  144. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/video_convertor.py +0 -0
  145. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/__init__.py +0 -0
  146. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/demo.py +0 -0
  147. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/main.py +0 -0
  148. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/main_read.py +0 -0
  149. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/segment.py +0 -0
  150. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  151. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/speechbrain_demo.py +0 -0
  152. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/captcha/__init__.py +0 -0
  153. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/captcha/demo.py +0 -0
  154. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/class_attribute.py +0 -0
  155. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/class_names.py +0 -0
  156. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/AffectNet.py +0 -0
  157. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/AsianMovie.py +0 -0
  158. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/BITVehicle2voc.py +0 -0
  159. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/BSTLD2voc.py +0 -0
  160. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/CCPD.py +0 -0
  161. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/CCPD2voc.py +0 -0
  162. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/FL3D_dataset.py +0 -0
  163. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/FreiHAND2coco.py +0 -0
  164. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/MTFL2voc.py +0 -0
  165. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/TT100K.py +0 -0
  166. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/WaterMeters1.py +0 -0
  167. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/WaterMeters2.py +0 -0
  168. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/__init__.py +0 -0
  169. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/concat_coco.py +0 -0
  170. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_coco2voc.py +0 -0
  171. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_cvat2labelme.py +0 -0
  172. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_gesture2hand.py +0 -0
  173. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_labelme2coco.py +0 -0
  174. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_labelme2cvat.py +0 -0
  175. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_labelme2voc.py +0 -0
  176. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_voc2labelme.py +0 -0
  177. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/fatigue_driving.py +0 -0
  178. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/fdd_dataset.py +0 -0
  179. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/get_pair_data.py +0 -0
  180. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/handpose2coco.py +0 -0
  181. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/insects_for_aichallenger.py +0 -0
  182. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/tt100k_utils.py +0 -0
  183. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/ua_detrac2voc.py +0 -0
  184. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/ucf101_dataset.py +0 -0
  185. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/voc_sbd2labelme.py +0 -0
  186. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/__init__.py +0 -0
  187. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/build_cython.py +0 -0
  188. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/build_pyarmor.py +0 -0
  189. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/cryptography_demo.py +0 -0
  190. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/fun_sum.py +0 -0
  191. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/main.py +0 -0
  192. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/model_des_enctypt.py +0 -0
  193. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/model_enctypt.py +0 -0
  194. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo1.py +0 -0
  195. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo2.py +0 -0
  196. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo3.py +0 -0
  197. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_async_await1.py +0 -0
  198. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_async_await2.py +0 -0
  199. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_coco_vis.py +0 -0
  200. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_copy_files.py +0 -0
  201. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_copy_files_for_voc.py +0 -0
  202. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_ffmpy.py +0 -0
  203. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_for_pair_file.py +0 -0
  204. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_for_polygon.py +0 -0
  205. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_for_trt.py +0 -0
  206. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_get_file_list.py +0 -0
  207. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_gif.py +0 -0
  208. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_gif_video.py +0 -0
  209. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_image_crop.py +0 -0
  210. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_kpts.py +0 -0
  211. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_labelme.py +0 -0
  212. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_labelme_crop.py +0 -0
  213. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_metrics.py +0 -0
  214. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_mouse.py +0 -0
  215. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_nii.py +0 -0
  216. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_pandas.py +0 -0
  217. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_plot.py +0 -0
  218. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_rename.py +0 -0
  219. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_standard_image .py +0 -0
  220. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_standard_video .py +0 -0
  221. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_taichi.py +0 -0
  222. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_video.py +0 -0
  223. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_voc_crop.py +0 -0
  224. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_voc_vis.py +0 -0
  225. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_word_similar.py +0 -0
  226. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_worker1.py +0 -0
  227. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_worker2.py +0 -0
  228. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/__init__.py +0 -0
  229. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/demo.py +0 -0
  230. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/detect_face_person.py +0 -0
  231. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/predet_labelme.py +0 -0
  232. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/edit_distance/__init__.py +0 -0
  233. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/edit_distance/demo.py +0 -0
  234. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/edit_distance/text_matching.py +0 -0
  235. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/flask_demo/__init__.py +0 -0
  236. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/flask_demo/func.py +0 -0
  237. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/flask_demo/server.py +0 -0
  238. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/get_file_list.py +0 -0
  239. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/__init__.py +0 -0
  240. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/demo_correction_v1.py +0 -0
  241. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/demo_correction_v2.py +0 -0
  242. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/demo_correction_v3.py +0 -0
  243. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/kafka_worker.py +0 -0
  244. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/men_tracemalloc.py +0 -0
  245. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/performance.py +0 -0
  246. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/pose/__init__.py +0 -0
  247. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/pose/human_pose.py +0 -0
  248. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/__init__.py +0 -0
  249. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/base.py +0 -0
  250. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/component.py +0 -0
  251. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/main.py +0 -0
  252. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/register.py +0 -0
  253. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/GRU.py +0 -0
  254. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/TCN.py +0 -0
  255. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/__init__.py +0 -0
  256. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/demo.py +0 -0
  257. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/test_fr/__init__.py +0 -0
  258. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/test_fr/demo11.py +0 -0
  259. {pybaseutils-2.1.4 → pybaseutils-2.1.6}/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.1.4
3
+ Version: 2.1.6
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -5,4 +5,4 @@
5
5
  @Date : 2019-05-07 17:40:27
6
6
  """
7
7
 
8
- __version__ = '2.1.4'
8
+ __version__ = '2.1.6'
@@ -20,6 +20,7 @@ import matplotlib.pyplot as plt
20
20
  from scipy.fft import fft
21
21
  from IPython.display import Audio, display
22
22
  from playsound import playsound
23
+ from scipy.io import wavfile
23
24
 
24
25
  import numpy as np
25
26
 
@@ -158,27 +159,56 @@ def save_pcm_from_numpy(audio_data: np.ndarray, pcm_file, data_type=np.int16):
158
159
  return bytes
159
160
 
160
161
 
161
- def read_audio(audio_file, sr=16000, mono=True):
162
+ def librosa_load(audio_file, sr=None, mono=True):
162
163
  """
163
164
  默认将多声道音频文件转换为单声道,并返回一维数组;
164
165
  如果你需要处理多声道音频文件,可以使用 mono=False,参数来保留所有声道,并返回二维数组。
165
166
  :param audio_file:
166
- :param sr: sampling rate
167
+ :param sr: sampling rate 16000
167
168
  :param mono: 设置为true是单通道,否则是双通道
168
169
  :return:
169
170
  """
170
- audio_data, sr = librosa.load(audio_file, sr=sr, mono=mono)
171
+ audio_data, sr = librosa.load(audio_file, sr=sr, mono=mono) # 非常耗时
171
172
  return audio_data, sr
172
173
 
173
174
 
174
- def read_audio_sf(audio_file, sr=16000):
175
+ def soundfile_load(audio_file, sr=None, mono=True):
175
176
  """
176
177
  默认会将多声道音频文件的每个声道分别存储在二维数组的不同列中,因此返回的是一个二维数组
177
178
  :param audio_file:
179
+ :param sr: sampling rate 当设置的采样率与音频原始采样率不一致时,会进行重采样,导致非常耗时
180
+ :param mono: 设置为true是单通道,否则是双通道
181
+ :return:
182
+ """
183
+ audio_data, orig_sr = sf.read(audio_file, samplerate=None, dtype="float32") # 不能直接修改samplerate
184
+ if mono and audio_data.ndim == 2:
185
+ audio_data = np.mean(audio_data, axis=-1)
186
+ if sr is None or orig_sr == sr:
187
+ sr = orig_sr
188
+ else:
189
+ audio_data = librosa.resample(y=audio_data, orig_sr=orig_sr, target_sr=sr) # 使用librosa进行重采样至目标采样率
190
+ return audio_data, sr
191
+
192
+
193
+ def wavfile_load(audio_file):
194
+ sr, wav_data = wavfile.read(audio_file) # int16类型
195
+ # 转为float64类型
196
+ wav_data = wav_data / (32768)
197
+ # wav_data:[-0.03305054 -0.03561401 -0.038114697]
198
+ return wav_data, sr
199
+
200
+
201
+ def read_audio(audio_file, sr=16000, mono=True):
202
+ """
203
+ 默认将多声道音频文件转换为单声道,并返回一维数组;
204
+ 如果你需要处理多声道音频文件,可以使用 mono=False,参数来保留所有声道,并返回二维数组。
205
+ :param audio_file:
178
206
  :param sr: sampling rate
207
+ :param mono: 设置为true是单通道,否则是双通道
179
208
  :return:
180
209
  """
181
- audio_data, sr = sf.read(audio_file, samplerate=sr)
210
+ audio_data, sr = librosa_load(audio_file, sr=sr, mono=mono) # 巨慢
211
+ # audio_data, sr = soundfile_load(audio_file, sr=sr, mono=mono) # 巨慢
182
212
  return audio_data, sr
183
213
 
184
214
 
@@ -412,6 +442,16 @@ def display_freq_domain(audio, sr=16000):
412
442
  plt.show()
413
443
 
414
444
 
445
+ def test_time(audio_file, sr=None):
446
+ from pybaseutils import time_utils
447
+ for i in range(10):
448
+ with time_utils.Performance("soundfile_load") as p:
449
+ audio_data1, sr1 = soundfile_load(audio_file, sr=sr)
450
+ with time_utils.Performance("librosa_load") as p:
451
+ audio_data2, sr2 = librosa_load(audio_file, sr=sr)
452
+ print(np.sum(np.abs(audio_data2 - audio_data1)))
453
+
454
+
415
455
  if __name__ == '__main__':
416
456
  # video_file = "../data/video/kunkun_cut.mp4"
417
457
  # audio_file = "../data/video/kunkun_cut.mp3"
@@ -420,8 +460,10 @@ if __name__ == '__main__':
420
460
  audio_file = "../../data/video/kunkun_cut.mp3"
421
461
  video_out = "../../data/video/test-video-result.mp4"
422
462
  audio_file = "../../data/audio/bus_chinese.wav"
463
+
464
+ test_time(audio_file)
423
465
  # playsound(audio_file)
424
466
  # playsound(audio_file)
425
- display_time_domain(audio_file)
426
- display_freq_domain(audio_file)
467
+ # display_time_domain(audio_file)
468
+ # display_freq_domain(audio_file)
427
469
  # merge_video_audio(video_file, audio_file, video_out)
@@ -0,0 +1,62 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-10-09 14:19:18
6
+ @Brief :
7
+ """
8
+ import cv2
9
+ import numpy as np
10
+ import torch
11
+ import torchvision
12
+ from pybaseutils import image_utils
13
+
14
+
15
+ def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, score_threshold=0.5, nms_threshold=0.5,
16
+ top_k=None, use_batch=True):
17
+ """
18
+ :param boxes:
19
+ :param scores:
20
+ :param labels:
21
+ :param score_threshold:
22
+ :param nms_threshold:
23
+ :param top_k:
24
+ :return:
25
+ """
26
+ if use_batch:
27
+ # TODO opencv4.7.0版本中增加了NMSBoxesBatched函数,可分类做nms
28
+ xywh = image_utils.xyxy2xywh(boxes)
29
+ index = cv2.dnn.NMSBoxesBatched(xywh.tolist(), scores.tolist(), labels.tolist(),
30
+ score_threshold=score_threshold, nms_threshold=nms_threshold, top_k=top_k)
31
+ else:
32
+ # TODO CV2 NMSBoxes没有区分类别
33
+ # 如果你不想每个类别都做一次nms,而是所有类别一起做nms
34
+ # 就需要把不同类别的目标框尽量没有重合,不至于把不同类别的IOU大的目标框滤掉
35
+ # 先用每个类别id乘一个很大的数,作为offset,把每个类别的box坐标都加上相应的offset,这是batched nms
36
+ max_wh = 7680
37
+ c = (labels * max_wh).reshape(-1, 1).astype(np.float32) # classes
38
+ boxes_ = boxes + c # boxes (offset by class)
39
+ xywh = image_utils.xyxy2xywh(boxes_)
40
+ index = cv2.dnn.NMSBoxes(xywh.tolist(), scores.tolist(), score_threshold=score_threshold,
41
+ nms_threshold=nms_threshold,top_k=top_k)
42
+ return index
43
+
44
+
45
+ def nms_boxes_torch(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, score_threshold=0.5, nms_threshold=0.5,
46
+ top_k=None):
47
+ """
48
+ :param boxes:
49
+ :param scores:
50
+ :param labels:
51
+ :param score_threshold:
52
+ :param nms_threshold:
53
+ :param top_k:
54
+ :return:
55
+ """
56
+ max_wh = 7680
57
+ c = (labels * max_wh).reshape(-1, 1).astype(np.float32) # classes
58
+ boxes_ = boxes + c # boxes (offset by class)
59
+ index = torchvision.ops.nms(torch.from_numpy(boxes_),
60
+ torch.from_numpy(scores),
61
+ iou_threshold=nms_threshold) # NMS
62
+ return index
@@ -56,7 +56,8 @@ class FolderDataset(parser_image_text.TextDataset):
56
56
  for i, dir in enumerate(data_file):
57
57
  if not os.path.exists(dir): raise Exception("文件不存在,image_dir:{}".format(dir))
58
58
  paths, labels = file_utils.get_files_labels(dir, postfix=file_utils.IMG_POSTFIX)
59
- print("loading data from:{},have {}".format(dir, len(paths)))
59
+ if len(paths) == 0: raise Exception("文件为空:{}".format(dir))
60
+ print("loading data from:{},have {},label:{}".format(dir, len(paths), list(set(labels))))
60
61
  # TODO # 避免多个数据集的相同的label
61
62
  if use_sub: labels = [os.path.join(str(i), l) for l in labels]
62
63
  data = [{"file": p, "label": l} for p, l in zip(paths, labels)]
@@ -69,7 +70,7 @@ if __name__ == '__main__':
69
70
  from torchvision import transforms
70
71
 
71
72
  image_dir = ['/home/PKing/nasdata/release/infrastructure/DMClassification/data/dataset/train']
72
- class_name = None
73
+ class_name = []
73
74
  input_size = [224, 224]
74
75
  rgb_mean = [0., 0., 0.]
75
76
  rgb_std = [1.0, 1.0, 1.0]
@@ -57,19 +57,18 @@ class TextDataset(Dataset):
57
57
  balance_nums = self.data_resample.balance_nums # resample后,每个类别的分布
58
58
  self.class_count = self.count_class_info(self.item_list, class_name=self.class_name,
59
59
  label_index=self.label_index)
60
- self.num_images = len(self.item_list)
61
60
  self.classes = list(self.class_dict.values())
62
61
  self.num_classes = max(self.classes) + 1
62
+ self.num_samples = len(self.item_list)
63
63
  self.info(save_info=kwargs.get("save_info", ""))
64
64
 
65
65
  def info(self, save_info=""):
66
66
  print("----------------------- {} DATASET INFO -----------------------".format(self.phase.upper()))
67
- print("Dataset have images :{}".format(len(self.item_list)))
67
+ print("Dataset num_samples :{}".format(len(self.item_list)))
68
+ print("Dataset num_classes :{}".format(self.num_classes))
68
69
  print("Dataset class_name :{}".format(self.class_name))
69
70
  print("Dataset class_dict :{}".format(self.class_dict))
70
71
  print("Dataset class_count :{}".format(self.class_count))
71
- print("Dataset num images :{}".format(len(self.item_list)))
72
- print("Dataset num_classes :{}".format(self.num_classes))
73
72
  print("Dataset resample :{}".format(self.resample))
74
73
  if save_info:
75
74
  if not os.path.exists(save_info): os.makedirs(save_info)
@@ -88,7 +87,7 @@ class TextDataset(Dataset):
88
87
  def parser_dataset(self, data_file, data_root="", label_index="label", shuffle=False, check=False):
89
88
  """
90
89
  保存格式:[path,label] 或者 [path,label,xmin,ymin,xmax,ymax]
91
- :param data_file:
90
+ :param data_file: List([])
92
91
  :param data_root:
93
92
  :param label_index: label index
94
93
  :param shuffle:
@@ -164,7 +163,7 @@ class TextDataset(Dataset):
164
163
  print("no file:{}".format(file))
165
164
  continue
166
165
  dst_list.append(item)
167
- print("have nums image:{},legal image:{}".format(len(item_list), len(dst_list)))
166
+ print("have nums samples:{},legal samples:{}".format(len(item_list), len(dst_list)))
168
167
  return dst_list
169
168
 
170
169
  def __getitem__(self, index):
@@ -180,7 +179,7 @@ class TextDataset(Dataset):
180
179
  image = Image.fromarray(image)
181
180
  image = self.transform(image)
182
181
  if image is None:
183
- index = int(random.uniform(0, self.num_images))
182
+ index = int(random.uniform(0, self.num_samples))
184
183
  return self.__getitem__(index)
185
184
  return {"image": image, "label": label, "file": file}
186
185
 
@@ -41,10 +41,10 @@ class LabelMeDataset(Dataset):
41
41
  :param data_root:
42
42
  :param anno_dir:
43
43
  :param image_dir:
44
- :param class_name: 当为name时,会获得由于类别
44
+ :param class_name: 当class_name=None且check=True,将自动获取所有class,当class_name=[]会直接返回name
45
45
  :param use_rgb:
46
46
  :param shuffle:
47
- :param check:
47
+ :param check: 当class_name=None且check=True,将自动获取所有class
48
48
  :param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
49
49
  :param kwargs:
50
50
  """
@@ -1728,8 +1728,8 @@ def save_image(image_file, image, uint8=False, use_rgb=False):
1728
1728
  cv2.imwrite(image_file, image)
1729
1729
 
1730
1730
 
1731
- def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, image_size=(),
1732
- score_threshold=0.5, nms_threshold=0.45, eta=None, top_k=None):
1731
+ def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, score_threshold=0.5, nms_threshold=0.45,
1732
+ eta=None, top_k=None, use_class=True):
1733
1733
  """
1734
1734
  NMS
1735
1735
  fix a bug: cv2.dnn.NMSBoxe bboxes, scores params must be list and float data,can not be float32 or int
@@ -1741,17 +1741,18 @@ def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, ima
1741
1741
  :param nms_threshold:
1742
1742
  :return:
1743
1743
  """
1744
- if isinstance(boxes, np.ndarray): boxes = boxes.tolist()
1745
- if isinstance(scores, np.ndarray): scores = scores.tolist()
1746
- indices = cv2.dnn.NMSBoxes(boxes, scores, score_threshold=score_threshold, nms_threshold=nms_threshold,
1747
- eta=eta, top_k=top_k)
1748
- if isinstance(boxes, list): boxes = np.asarray(boxes)
1749
- if isinstance(scores, list): scores = np.asarray(scores)
1750
- if isinstance(labels, list): labels = np.asarray(labels)
1751
- dst_boxes = boxes[indices]
1752
- dst_score = scores[indices]
1753
- dst_label = labels[indices]
1754
- return dst_boxes, dst_score, dst_label
1744
+ if use_class:
1745
+ # TODO opencv4.7.0版本中增加了NMSBoxesBatched函数,可分类做nms
1746
+ index = cv2.dnn.NMSBoxesBatched(boxes.tolist(), scores.tolist(), labels.tolist(),
1747
+ score_threshold=score_threshold, nms_threshold=nms_threshold,
1748
+ eta=eta, top_k=top_k)
1749
+ else:
1750
+ # TODO NMSBoxes没有区分类别
1751
+ index = cv2.dnn.NMSBoxes(boxes.tolist(), scores.tolist(), score_threshold=score_threshold,
1752
+ nms_threshold=nms_threshold, eta=eta, top_k=top_k)
1753
+ return index
1754
+
1755
+
1755
1756
 
1756
1757
 
1757
1758
  def file2base64(file):
@@ -74,6 +74,19 @@ def construct_pd(index, columns_name, content, filename=None):
74
74
  return df
75
75
 
76
76
 
77
+ def dict2pd(data: dict, T=False):
78
+ """
79
+ :param data:
80
+ :param T:
81
+ :return:
82
+ """
83
+ if T:
84
+ df = pd.DataFrame.from_dict(data) # 键按照列进行转换
85
+ else:
86
+ df = pd.DataFrame.from_dict(data, orient='index') # 键按照行进行转换
87
+ return df
88
+
89
+
77
90
  if __name__ == "__main__":
78
91
  class_name = ['C1', 'C2', 'C3']
79
92
  labels = [100, 200, 300]
@@ -85,3 +98,11 @@ if __name__ == "__main__":
85
98
  filename = "my_test.csv"
86
99
  df = construct_pd(index, columns_name, content, filename)
87
100
  print(df)
101
+
102
+ data = {
103
+ 'name1': ["A0", "A1", "A2"],
104
+ 'name2': ["B0", "B1", "B2"],
105
+ 'name3': ["C0", "C1", "C2"]
106
+ }
107
+ df = dict2pd(data)
108
+ save_csv("data.csv", df)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.1.4
3
+ Version: 2.1.6
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -66,6 +66,7 @@ pybaseutils/cvutils/__init__.py
66
66
  pybaseutils/cvutils/corner_utils.py
67
67
  pybaseutils/cvutils/monitor.py
68
68
  pybaseutils/cvutils/mouse_utils.py
69
+ pybaseutils/cvutils/nms_utils.py
69
70
  pybaseutils/cvutils/video_utils.py
70
71
  pybaseutils/dataloader/__init__.py
71
72
  pybaseutils/dataloader/balanced_classes.py
@@ -174,6 +175,7 @@ test_py/aije/demo_labelme_crop.py
174
175
  test_py/aije/demo_video_aije.py
175
176
  test_py/aije/demo_voc_crop.py
176
177
  test_py/aije/demo_voc_vis.py
178
+ test_py/aije/get_pair_data.py
177
179
  test_py/aije/video_convertor.py
178
180
  test_py/audio/__init__.py
179
181
  test_py/audio/demo.py
@@ -238,6 +240,9 @@ test_py/image_correction/demo_correction_v2.py
238
240
  test_py/image_correction/demo_correction_v3.py
239
241
  test_py/pose/__init__.py
240
242
  test_py/pose/human_pose.py
243
+ test_py/redis_py/__init__.py
244
+ test_py/redis_py/knn_search.py
245
+ test_py/redis_py/redis_client.py
241
246
  test_py/registry/__init__.py
242
247
  test_py/registry/base.py
243
248
  test_py/registry/component.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-v2-det/dataset-v25/json"
67
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v21/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,
@@ -0,0 +1,18 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-08-24 11:05:52
6
+ @Brief :
7
+ """
8
+ import os
9
+ import numpy as np
10
+ import itertools
11
+ from pybaseutils import file_utils, image_utils
12
+
13
+ if __name__ == '__main__':
14
+ image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/train-v2/dataset/all_action"
15
+ pairs_file = os.path.join(image_dir, "pairs.txt")
16
+ # pairs = file_utils.get_pair_data(image_dir, pair_num=-1)
17
+ pairs = file_utils.get_pair_data(image_dir, pair_num=10000)
18
+ file_utils.write_data(pairs_file, pairs)
@@ -24,7 +24,7 @@ if __name__ == "__main__":
24
24
  # anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v01/json"
25
25
  # anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v23/json"
26
26
  anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-test/json"
27
- anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v24/json"
27
+ anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/第3批数据/json"
28
28
  names = None
29
29
  # names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
30
30
  dataset = parser_labelme.LabelMeDatasets(filename=None,
@@ -0,0 +1,7 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-10-09 19:53:29
6
+ @Brief :
7
+ """
@@ -0,0 +1,14 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-10-09 19:55:10
6
+ @Brief :
7
+ """
8
+ from test_py.redis_py.redis_client import r_client, CacheMethod
9
+ from redisearch import Client, Query
10
+
11
+ if __name__ == "__main__":
12
+ CacheMethod.set("name", "test")
13
+ keys = CacheMethod().get_all_keys()
14
+ print(keys)
@@ -0,0 +1,87 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ redis client
4
+ """
5
+ import redis
6
+ from redis import StrictRedis
7
+
8
+ REDIS_URI = 'redis://@10.12.51.100:6379'
9
+ pool = redis.ConnectionPool().from_url(REDIS_URI)
10
+ r_client = StrictRedis(connection_pool=pool)
11
+
12
+
13
+ class CacheMethod:
14
+ """redis method"""
15
+
16
+ def __init__(self):
17
+ pass
18
+
19
+ @staticmethod
20
+ def get_client():
21
+ return r_client
22
+
23
+ @staticmethod
24
+ def set(key, value):
25
+ return r_client.set(key, value)
26
+
27
+ @staticmethod
28
+ def get(key):
29
+ return r_client.get(key)
30
+
31
+ @staticmethod
32
+ def exists(key):
33
+ return r_client.exists(key)
34
+
35
+ @staticmethod
36
+ def delete(key):
37
+ return r_client.delete(key)
38
+
39
+ @staticmethod
40
+ def keys(key):
41
+ return r_client.keys(key)
42
+
43
+ @staticmethod
44
+ def incr(key):
45
+ return r_client.incr(key)
46
+
47
+ @staticmethod
48
+ def decr(key):
49
+ return r_client.decr(key)
50
+
51
+ @staticmethod
52
+ def expire(key, time):
53
+ """设置,过期删除时间,必须创建后再设置"""
54
+ return r_client.expire(key, time)
55
+
56
+ @staticmethod
57
+ def get_all_keys():
58
+ """获得所有keys"""
59
+ keys = r_client.keys('*')
60
+ keys = keys if keys else []
61
+ keys = [k.decode('utf-8') for k in keys]
62
+ return keys
63
+
64
+ @staticmethod
65
+ def del_all_keys(ignore=[]):
66
+ """删除所有keys"""
67
+ keys = CacheMethod.get_all_keys()
68
+ try:
69
+ for k in keys:
70
+ if k in ignore: continue
71
+ CacheMethod.delete(k)
72
+ print("INFO: Redis delete key:{}".format(k))
73
+ except Exception as e:
74
+ print(e)
75
+ print("Error: Redis delete key:{}".format(k))
76
+
77
+ @staticmethod
78
+ def set_all_expire(time, ignore=[]):
79
+ """设置所有keys的过期时间"""
80
+ keys = CacheMethod.get_all_keys()
81
+ try:
82
+ for k in keys:
83
+ if k in ignore: continue
84
+ CacheMethod.expire(k, time=time)
85
+ print("INFO: Redis set key={}, expire={}s".format(k, time))
86
+ except Exception as e:
87
+ print(e)
File without changes
File without changes