pybaseutils 2.2.9__tar.gz → 2.2.10__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 (276) hide show
  1. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/PKG-INFO +1 -1
  2. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/__init__.py +1 -1
  3. pybaseutils-2.2.10/pybaseutils/http_utils.py +90 -0
  4. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/image_utils.py +27 -21
  5. pybaseutils-2.2.10/pybaseutils/log_utils.py +64 -0
  6. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/text_utils.py +1 -0
  7. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils.egg-info/PKG-INFO +1 -1
  8. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils.egg-info/SOURCES.txt +1 -1
  9. pybaseutils-2.2.10/test_py/demo3.py +98 -0
  10. pybaseutils-2.2.9/pybaseutils/log_utils.py +0 -191
  11. pybaseutils-2.2.9/pybaseutils/logger.py +0 -62
  12. pybaseutils-2.2.9/test_py/demo3.py +0 -16
  13. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/LICENCE +0 -0
  14. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/README.md +0 -0
  15. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/audio/__init__.py +0 -0
  16. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/audio/audio_utils.py +0 -0
  17. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/audio/pyaudio_utils.py +0 -0
  18. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/audio/vad_utils.py +0 -0
  19. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/base64_utils.py +0 -0
  20. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/batch_utils.py +0 -0
  21. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/build_utils/__init__.py +0 -0
  22. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/build_utils/cython_utils.py +0 -0
  23. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  24. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cluster/__init__.py +0 -0
  25. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cluster/kmean.py +0 -0
  26. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cluster/maxmin_distance.py +0 -0
  27. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cluster/similarity.py +0 -0
  28. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/color_utils.py +0 -0
  29. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/config_utils.py +0 -0
  30. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/__init__.py +0 -0
  31. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/build_coco.py +0 -0
  32. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/build_cvat.py +0 -0
  33. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/build_labelme.py +0 -0
  34. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/build_voc.py +0 -0
  35. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/concat_coco.py +0 -0
  36. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  37. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_coco2voc.py +0 -0
  38. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  39. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  40. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  41. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  42. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  43. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_voc2coco.py +0 -0
  44. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  45. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_voc2voc.py +0 -0
  46. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  47. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  48. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/coords_utils.py +0 -0
  49. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cvutils/__init__.py +0 -0
  50. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cvutils/corner_utils.py +0 -0
  51. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cvutils/monitor.py +0 -0
  52. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cvutils/mouse_utils.py +0 -0
  53. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cvutils/nms_utils.py +0 -0
  54. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/cvutils/video_utils.py +0 -0
  55. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/__init__.py +0 -0
  56. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/balanced_classes.py +0 -0
  57. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/base_coco.py +0 -0
  58. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/base_dataset.py +0 -0
  59. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/data_resample.py +0 -0
  60. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  61. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  62. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  63. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  64. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_image_text.py +0 -0
  65. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_labelme.py +0 -0
  66. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_voc.py +0 -0
  67. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/parser_yolo.py +0 -0
  68. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  69. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/file_utils.py +0 -0
  70. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/QueueTable.py +0 -0
  71. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/__init__.py +0 -0
  72. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/demo.py +0 -0
  73. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/kalman_filter.py +0 -0
  74. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/mean_filter.py +0 -0
  75. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/motion_filter.py +0 -0
  76. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/filter/pose_filter.py +0 -0
  77. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/font_style/__init__.py +0 -0
  78. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/font_utils.py +0 -0
  79. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/geometry_tools.py +0 -0
  80. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/heatmap_utils.py +0 -0
  81. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/json_utils.py +0 -0
  82. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/log.py +0 -0
  83. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/metrics/__init__.py +0 -0
  84. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/metrics/accuracy.py +0 -0
  85. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/metrics/average_meter.py +0 -0
  86. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/metrics/class_report.py +0 -0
  87. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/metrics/plot_pr.py +0 -0
  88. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/metrics/plot_roc.py +0 -0
  89. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/numpy_utils.py +0 -0
  90. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pandas_utils.py +0 -0
  91. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/plot_utils.py +0 -0
  92. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pose/__init__.py +0 -0
  93. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pose/bones_utils.py +0 -0
  94. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pose/human_pose.py +0 -0
  95. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pose/pose_utils.py +0 -0
  96. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pycpp/__init__.py +0 -0
  97. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pycpp/demo.py +0 -0
  98. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/pycpp/main.py +0 -0
  99. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/server/__init__.py +0 -0
  100. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/server/apm_server.py +0 -0
  101. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/setup_config.py +0 -0
  102. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/singleton_utils.py +0 -0
  103. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/thread_utils.py +0 -0
  104. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/time_utils.py +0 -0
  105. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracemalloc_utils.py +0 -0
  106. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracemalloc_utils2.py +0 -0
  107. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/QueueTable.py +0 -0
  108. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/__init__.py +0 -0
  109. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/demo.py +0 -0
  110. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/kalman_filter.py +0 -0
  111. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/mean_filter.py +0 -0
  112. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/motion_filter.py +0 -0
  113. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/tracking/pose_filter.py +0 -0
  114. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/transforms/__init__.py +0 -0
  115. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/transforms/affine_transform.py +0 -0
  116. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/transforms/augment_utils.py +0 -0
  117. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/transforms/face_alignment.py +0 -0
  118. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/transforms/transform_utils.py +0 -0
  119. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/word_utils.py +0 -0
  120. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/worker.py +0 -0
  121. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils/yaml_utils.py +0 -0
  122. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils.egg-info/dependency_links.txt +0 -0
  123. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils.egg-info/not-zip-safe +0 -0
  124. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/pybaseutils.egg-info/top_level.txt +0 -0
  125. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/setup.cfg +0 -0
  126. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/setup.py +0 -0
  127. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/Image_enhance/__init__.py +0 -0
  128. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/Image_enhance/dmeo01.py +0 -0
  129. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/WebCrawler/__init__.py +0 -0
  130. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/WebCrawler/search_image.py +0 -0
  131. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  132. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/__init__.py +0 -0
  133. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/__init__.py +0 -0
  134. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/action_dataset.py +0 -0
  135. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/build_cython.py +0 -0
  136. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/build_pyarmor.py +0 -0
  137. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/build_service.py +0 -0
  138. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/convert_cvat2labelme.py +0 -0
  139. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/convert_labelme2coco.py +0 -0
  140. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/convert_labelme2voc.py +0 -0
  141. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/copy_move.py +0 -0
  142. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/demo_labelme_crop.py +0 -0
  143. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/demo_labelme_shock.py +0 -0
  144. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/demo_video_aije.py +0 -0
  145. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/demo_voc_crop.py +0 -0
  146. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/demo_voc_vis.py +0 -0
  147. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/get_pair_data.py +0 -0
  148. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/aije/video_convertor.py +0 -0
  149. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/__init__.py +0 -0
  150. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/demo.py +0 -0
  151. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/main.py +0 -0
  152. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/main_read.py +0 -0
  153. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/segment.py +0 -0
  154. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  155. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/audio/speechbrain_demo.py +0 -0
  156. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/camera/__init__.py +0 -0
  157. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/camera/demo.py +0 -0
  158. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/camera/main.py +0 -0
  159. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/captcha/__init__.py +0 -0
  160. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/captcha/demo.py +0 -0
  161. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/class_attribute.py +0 -0
  162. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/class_names.py +0 -0
  163. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/AffectNet.py +0 -0
  164. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/AsianMovie.py +0 -0
  165. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/BITVehicle2voc.py +0 -0
  166. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/BSTLD2voc.py +0 -0
  167. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/CCPD.py +0 -0
  168. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/CCPD2voc.py +0 -0
  169. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/FL3D_dataset.py +0 -0
  170. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/FreiHAND2coco.py +0 -0
  171. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/MTFL2voc.py +0 -0
  172. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/TT100K.py +0 -0
  173. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/WaterMeters1.py +0 -0
  174. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/WaterMeters2.py +0 -0
  175. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/__init__.py +0 -0
  176. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/concat_coco.py +0 -0
  177. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_coco2voc.py +0 -0
  178. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_cvat2labelme.py +0 -0
  179. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_gesture2hand.py +0 -0
  180. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_labelme2coco.py +0 -0
  181. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_labelme2cvat.py +0 -0
  182. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_labelme2voc.py +0 -0
  183. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/convert_voc2labelme.py +0 -0
  184. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/fatigue_driving.py +0 -0
  185. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/fdd_dataset.py +0 -0
  186. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/get_pair_data.py +0 -0
  187. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/handpose2coco.py +0 -0
  188. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/insects_for_aichallenger.py +0 -0
  189. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/tt100k_utils.py +0 -0
  190. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/ua_detrac2voc.py +0 -0
  191. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/ucf101_dataset.py +0 -0
  192. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/converter/voc_sbd2labelme.py +0 -0
  193. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/__init__.py +0 -0
  194. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/build_cython.py +0 -0
  195. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/build_pyarmor.py +0 -0
  196. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/cryptography_demo.py +0 -0
  197. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/fun_sum.py +0 -0
  198. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/main.py +0 -0
  199. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/model_des_enctypt.py +0 -0
  200. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/cython_build/model_enctypt.py +0 -0
  201. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo1.py +0 -0
  202. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo2.py +0 -0
  203. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_async_await1.py +0 -0
  204. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_async_await2.py +0 -0
  205. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_coco_vis.py +0 -0
  206. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_copy_files.py +0 -0
  207. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_copy_files_for_voc.py +0 -0
  208. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_ffmpy.py +0 -0
  209. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_for_pair_file.py +0 -0
  210. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_for_polygon.py +0 -0
  211. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_for_trt.py +0 -0
  212. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_get_file_label.py +0 -0
  213. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_get_file_list.py +0 -0
  214. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_gif.py +0 -0
  215. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_gif_video.py +0 -0
  216. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_image_crop.py +0 -0
  217. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_kpts.py +0 -0
  218. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_labelme.py +0 -0
  219. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_labelme_crop.py +0 -0
  220. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_lableme_vis.py +0 -0
  221. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_metrics.py +0 -0
  222. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_mouse.py +0 -0
  223. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_nii.py +0 -0
  224. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_pandas.py +0 -0
  225. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_plot.py +0 -0
  226. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_rename.py +0 -0
  227. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_standard_image .py +0 -0
  228. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_standard_video .py +0 -0
  229. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_taichi.py +0 -0
  230. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_video.py +0 -0
  231. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_video_crop.py +0 -0
  232. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_voc_crop.py +0 -0
  233. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_voc_vis.py +0 -0
  234. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_word_similar.py +0 -0
  235. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_worker1.py +0 -0
  236. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/demo_worker2.py +0 -0
  237. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/detector/__init__.py +0 -0
  238. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/detector/demo.py +0 -0
  239. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/detector/detect_face_person.py +0 -0
  240. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/detector/predet_labelme.py +0 -0
  241. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/edit_distance/__init__.py +0 -0
  242. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/edit_distance/demo.py +0 -0
  243. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/edit_distance/text_matching.py +0 -0
  244. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/flask_demo/__init__.py +0 -0
  245. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/flask_demo/func.py +0 -0
  246. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/flask_demo/server.py +0 -0
  247. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/get_file_list.py +0 -0
  248. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/image_correction/__init__.py +0 -0
  249. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/image_correction/demo_correction_v1.py +0 -0
  250. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/image_correction/demo_correction_v2.py +0 -0
  251. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/image_correction/demo_correction_v3.py +0 -0
  252. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/kafka_worker.py +0 -0
  253. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/men_tracemalloc.py +0 -0
  254. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/milvus_demo/__init__.py +0 -0
  255. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/milvus_demo/demo01.py +0 -0
  256. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/milvus_demo/demo02.py +0 -0
  257. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/milvus_demo/hello_milvus.py +0 -0
  258. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/milvus_demo/milvus_client.py +0 -0
  259. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/performance.py +0 -0
  260. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/pose/__init__.py +0 -0
  261. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/pose/human_pose.py +0 -0
  262. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/redis_py/__init__.py +0 -0
  263. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/redis_py/knn_search.py +0 -0
  264. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/redis_py/redis_client.py +0 -0
  265. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/registry/__init__.py +0 -0
  266. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/registry/base.py +0 -0
  267. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/registry/component.py +0 -0
  268. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/registry/main.py +0 -0
  269. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/registry/register.py +0 -0
  270. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/single_class/GRU.py +0 -0
  271. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/single_class/TCN.py +0 -0
  272. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/single_class/__init__.py +0 -0
  273. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/single_class/demo.py +0 -0
  274. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/test_fr/__init__.py +0 -0
  275. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/test_py/test_fr/demo11.py +0 -0
  276. {pybaseutils-2.2.9 → pybaseutils-2.2.10}/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.9
3
+ Version: 2.2.10
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.2.9'
8
+ __version__ = '2.2.10'
@@ -0,0 +1,90 @@
1
+ # -*- coding:utf-8 -*-
2
+ import logging
3
+ import time
4
+ import requests
5
+ import json
6
+ from pybaseutils import log_utils
7
+
8
+ logger = log_utils.get_logger()
9
+
10
+
11
+ def post(url, params, timeout=6, max_retries=1, **kwargs):
12
+ """
13
+ :param url: 请求URL
14
+ :param params: 请求参数
15
+ :param timeout: 设置超时
16
+ :return:
17
+ """
18
+ result = None
19
+ counts = 0
20
+ while counts < max_retries:
21
+ try:
22
+ t1 = time.time()
23
+ # r = requests.get(url, params=params, timeout=timeout,**kwargs)
24
+ r = requests.post(url, json=params, timeout=timeout, **kwargs)
25
+ t2 = time.time()
26
+ elapsed = (t2 - t1) * 1000
27
+ code = r.status_code
28
+ if code == 200:
29
+ logger.info(f'code={code}, url={url}, elapsed:{elapsed:3.3f}ms')
30
+ result = r.json()
31
+ break
32
+ else:
33
+ r.raise_for_status() # 如果响应状态码不是200,抛出异常
34
+ except Exception as e:
35
+ counts += 1
36
+ logger.error(f'Error msg:{e}, try to retry times={counts}/{max_retries}')
37
+ time.sleep(0.1)
38
+ return result
39
+
40
+
41
+ def get(url, params, timeout=6, max_retries=1, **kwargs):
42
+ """
43
+ :param url: 请求URL
44
+ :param params: 请求参数
45
+ :param timeout: 设置超时
46
+ :return:
47
+ """
48
+ result = None
49
+ counts = 0
50
+ while counts < max_retries:
51
+ try:
52
+ t1 = time.time()
53
+ r = requests.get(url, params=params, timeout=timeout, **kwargs)
54
+ # r = requests.post(url, json=params, timeout=timeout, **kwargs)
55
+ t2 = time.time()
56
+ elapsed = (t2 - t1) * 1000
57
+ code = r.status_code
58
+ if code == 200:
59
+ logger.info(f'code={code}, url={url}, elapsed:{elapsed:3.3f}ms')
60
+ result = r.json()
61
+ break
62
+ else:
63
+ r.raise_for_status() # 如果响应状态码不是200,抛出异常
64
+ except Exception as e:
65
+ counts += 1
66
+ logger.error(f'Error msg:{e}, try to retry times={counts}/{max_retries}')
67
+ time.sleep(0.1)
68
+ return result
69
+
70
+
71
+ def tojson(data: dict, keys: list):
72
+ """
73
+ 指定需要反序列的数据
74
+ :param data:
75
+ :param keys:
76
+ :return:
77
+ """
78
+ if isinstance(data, dict):
79
+ for k, v in data.items():
80
+ if k in keys:
81
+ try:
82
+ data[k] = json.loads(v)
83
+ except Exception as e:
84
+ print(e)
85
+ else:
86
+ data[k] = tojson(v, keys=keys)
87
+ elif isinstance(data, list):
88
+ for i in range(len(data)):
89
+ data[i] = tojson(data[i], keys=keys)
90
+ return data
@@ -166,25 +166,6 @@ def check_point(point):
166
166
  return r
167
167
 
168
168
 
169
- def transpose(data):
170
- data = data.transpose(2, 0, 1) # HWC->CHW
171
- return data
172
-
173
-
174
- def untranspose(data):
175
- if len(data.shape) == 3:
176
- data = data.transpose(1, 2, 0).copy() # 通道由[c,h,w]->[h,w,c]
177
- else:
178
- data = data.transpose(1, 0).copy()
179
- return data
180
-
181
-
182
- def swap_image(image):
183
- # image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
184
- image = image[:, :, ::-1] # RGB->BGR
185
- return image
186
-
187
-
188
169
  def show_batch_image(title, batch_images, index=0):
189
170
  '''
190
171
  批量显示图片
@@ -332,6 +313,31 @@ def get_prewhiten_image(x):
332
313
  return y
333
314
 
334
315
 
316
+ def transpose(data):
317
+ data = data.transpose(2, 0, 1) # HWC->CHW
318
+ return data
319
+
320
+
321
+ image_hwc2chw = transpose
322
+
323
+
324
+ def untranspose(data):
325
+ if len(data.shape) == 3:
326
+ data = data.transpose(1, 2, 0).copy() # 通道由[c,h,w]->[h,w,c]
327
+ else:
328
+ data = data.transpose(1, 0).copy()
329
+ return data
330
+
331
+
332
+ image_chw2hwc = untranspose
333
+
334
+
335
+ def swap_image(image):
336
+ # image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
337
+ image = image[:, :, ::-1] # RGB->BGR
338
+ return image
339
+
340
+
335
341
  def image_normalize(image, mean=None, std=None):
336
342
  '''
337
343
  正则化,归一化
@@ -357,9 +363,9 @@ def image_normalize(image, mean=None, std=None):
357
363
 
358
364
  def image_unnormalize(image, mean=None, std=None):
359
365
  """
360
- 正则化,归一化
366
+ 反归一化
361
367
  image = image/255.0
362
- image[channel] = (image[channel] - mean[channel]) / std[channel]
368
+ image[channel] = image[channel] * std[channel]+ mean[channel])
363
369
  :param image: numpy image
364
370
  :param mean: [0.5,0.5,0.5]
365
371
  :param std: [0.5,0.5,0.5]
@@ -0,0 +1,64 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PKing
4
+ @E-mail :
5
+ @Date : 2024-12-10 22:22:58
6
+ @Brief :
7
+ """
8
+ import os
9
+ import sys
10
+ import logging
11
+ from logging.handlers import TimedRotatingFileHandler
12
+
13
+
14
+ def get_logger(name='APPLOG', level="info", logfile=None, is_main_process=True):
15
+ """
16
+ :param name:
17
+ :param logfile:
18
+ :param level: CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET
19
+ :return:
20
+ """
21
+ # 创建logger对象
22
+ if is_main_process:
23
+ logger = logging.getLogger(name)
24
+ # 如果logger已经有,则不添加
25
+ if logger.handlers: return logger
26
+ logger.setLevel(level.upper())
27
+ # 创建格式化器
28
+ formatter = logging.Formatter(
29
+ fmt="%(asctime)s|%(levelname)6s|%(filename)20s|%(funcName)20s|Line%(lineno)4s|%(message)s",
30
+ datefmt="%Y-%m-%d %H:%M:%S"
31
+ )
32
+ # 创建控制台处理器
33
+ console_handler = logging.StreamHandler(sys.stdout)
34
+ console_handler.setFormatter(formatter)
35
+ logger.addHandler(console_handler)
36
+
37
+ # 创建日志目录
38
+ if logfile:
39
+ os.makedirs(os.path.dirname(logfile), exist_ok=True)
40
+ # 创建文件处理器(按时间轮转)
41
+ file_handler = TimedRotatingFileHandler(
42
+ logfile,
43
+ when='midnight', # 每天午夜切换新文件
44
+ interval=1, # 间隔为1天
45
+ backupCount=30, # 保留30天的日志文件
46
+ encoding='utf-8'
47
+ )
48
+ file_handler.setFormatter(formatter)
49
+ logger.addHandler(file_handler)
50
+ else:
51
+ logger = logging.getLogger(name)
52
+ logger.setLevel("warning")
53
+ return logger
54
+
55
+
56
+ if __name__ == '__main__':
57
+ logger = get_logger(name='APPLOG', level="debug", logfile="./log.log")
58
+ # 测试日志输出
59
+ logger.debug('-----------------')
60
+ logger.debug('这是一条调试信息')
61
+ logger.info('这是一条信息')
62
+ logger.warning('这是一条警告')
63
+ logger.error('这是一条错误信息')
64
+ logger.critical('这是一条严重错误信息')
@@ -32,6 +32,7 @@ def find_match_texts(texts: list, pattern: list, org=True):
32
32
  :param org: True,返回匹配成功的原始字符串,False 返回匹配成功的子串
33
33
  :return:
34
34
  """
35
+ if isinstance(pattern, str): pattern = [pattern]
35
36
  out = []
36
37
  for text in texts:
37
38
  for sub in pattern:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 2.2.9
3
+ Version: 2.2.10
4
4
  Summary: pybaseutils
5
5
  Home-page: https://github.com/PanJinquan/base-utils
6
6
  Author: PanJinquan
@@ -11,11 +11,11 @@ pybaseutils/file_utils.py
11
11
  pybaseutils/font_utils.py
12
12
  pybaseutils/geometry_tools.py
13
13
  pybaseutils/heatmap_utils.py
14
+ pybaseutils/http_utils.py
14
15
  pybaseutils/image_utils.py
15
16
  pybaseutils/json_utils.py
16
17
  pybaseutils/log.py
17
18
  pybaseutils/log_utils.py
18
- pybaseutils/logger.py
19
19
  pybaseutils/numpy_utils.py
20
20
  pybaseutils/pandas_utils.py
21
21
  pybaseutils/plot_utils.py
@@ -0,0 +1,98 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : panjq
4
+ @E-mail : pan_jinquan@163.com
5
+ @Date : 2022-08-30 09:45:44
6
+ @Brief :
7
+ """
8
+
9
+ import os
10
+ import numpy as np
11
+ import cv2
12
+ from tqdm import tqdm
13
+ from pybaseutils import image_utils, file_utils
14
+ from pybaseutils.converter import build_voc
15
+
16
+
17
+ def save_voc_dataset(bboxes, labels, image_file, image_shape, out_xml_dir):
18
+ """
19
+ 保存VOC数据集
20
+ :param bboxes:
21
+ :param labels:
22
+ :param image_file:
23
+ :param image_shape:
24
+ :param out_xml_dir:
25
+ :return:
26
+ """
27
+ basename = os.path.basename(image_file)
28
+ image_id = basename.split(".")[0]
29
+ objects = []
30
+ for box, name in zip(bboxes, labels):
31
+ objects.append({"name": name, "bndbox": box})
32
+ xml_path = file_utils.create_dir(out_xml_dir, None, "{}.xml".format(image_id))
33
+ build_voc.write_voc_xml_objects(basename, image_shape, objects, xml_path)
34
+
35
+
36
+ def save_crop_dataset(image, bboxes, labels, image_file, crop_root):
37
+ """
38
+ 裁剪检测区域
39
+ :param image:
40
+ :param bboxes:
41
+ :param labels:
42
+ :param image_file:
43
+ :param crop_root:
44
+ :return:
45
+ """
46
+ basename = os.path.basename(image_file)
47
+ image_id = basename.split(".")[0]
48
+ crops = image_utils.get_bboxes_image(image, bboxes, size=None)
49
+ for i, (img, label) in enumerate(zip(crops, labels)):
50
+ file = file_utils.create_dir(crop_root, label, "{}_{:0=3d}.jpg".format(image_id, i))
51
+ cv2.imwrite(file, img)
52
+
53
+
54
+ def convert_HaGRID_dataset(data_root, vis=True):
55
+ """
56
+ 将HaGRID转换为VOC和分类数据集
57
+ :param data_root: HaGRID数据集个根目录
58
+ :param vis: 是否可视化效果
59
+ :return:
60
+ """
61
+ sub_list = file_utils.get_sub_paths(data_root)
62
+ class_names = []
63
+ for sub in sub_list:
64
+ anno_file = os.path.join(data_root, sub, "{}.json".format(sub))
65
+ annotation = file_utils.read_json_data(anno_file)
66
+ image_list = file_utils.get_images_list(os.path.join(data_root, sub, "JPEGImages"))
67
+ print("process:{},nums:{}".format(anno_file, len(image_list)))
68
+ # 保存VOC格式的xml文件
69
+ out_xml_dir = os.path.join(data_root, sub, "Annotations")
70
+ # 裁剪并保存标注框区域的图片
71
+ out_crop_dir = os.path.join(data_root, sub, "Classification")
72
+ for image_file in tqdm(image_list):
73
+ basename = os.path.basename(image_file)
74
+ image_id = basename.split(".")[0]
75
+ image = cv2.imread(image_file)
76
+ anno = annotation[image_id]
77
+ h, w = image.shape[:2]
78
+ # [top left X pos, top left Y pos, width, height]
79
+ bboxes = image_utils.rects2bboxes(anno['bboxes'])
80
+ bboxes = np.asarray(bboxes) * [w, h, w, h]
81
+ labels = anno['labels']
82
+ class_names += labels
83
+ image_shape = image.shape
84
+ assert len(bboxes) == len(labels)
85
+ if out_xml_dir:
86
+ save_voc_dataset(bboxes, labels, image_file, image_shape, out_xml_dir)
87
+ if out_crop_dir:
88
+ save_crop_dataset(image, bboxes, labels, image_file, out_crop_dir)
89
+ if vis:
90
+ image = image_utils.draw_image_bboxes_text(image, bboxes, labels, color=(255, 0, 0))
91
+ image_utils.cv_show_image("image", image, use_rgb=False)
92
+ class_names = set(class_names)
93
+ print(class_names)
94
+
95
+
96
+ if __name__ == "__main__":
97
+ data_root = "path/to/gesture/HaGRID/trainval"
98
+ convert_HaGRID_dataset(data_root, vis=True)
@@ -1,191 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- # --------------------------------------------------------
4
- # @Author : Pan
5
- # @Date : 2019-9-20 13:18:34
6
- # --------------------------------------------------------
7
- """
8
- import os
9
- import datetime
10
- import logging
11
- import threading
12
- import re
13
- import time
14
- from logging.handlers import TimedRotatingFileHandler
15
-
16
-
17
- # from memory_profiler import profile
18
-
19
-
20
- def singleton(cls):
21
- _instance_lock = threading.Lock()
22
- instances = {}
23
-
24
- def _singleton(*args, **kwargs):
25
- with _instance_lock:
26
- if cls not in instances:
27
- instances[cls] = cls(*args, **kwargs)
28
- return instances[cls]
29
-
30
- return _singleton
31
-
32
-
33
- @singleton # 使用singleton,会出现loger的level失效的问题
34
- class CustomLogger(logging.Logger):
35
- def __init__(self, name="LOG", level="debug"):
36
- """
37
- Initialize the logger with a name and an optional level.
38
- Args:
39
- name:
40
- level: debug,info,warning,critical,fatal
41
- """
42
- super().__init__(name)
43
- # super(CustomLogger, self).__init__(name)
44
- self.setLevel(level=level)
45
-
46
- @staticmethod
47
- def levels(level):
48
- if level == 'debug':
49
- return logging.DEBUG
50
- if level == 'info':
51
- return logging.INFO
52
- if level == 'warning':
53
- return logging.WARN
54
- if level == 'critical':
55
- return logging.CRITICAL
56
- if level == 'fatal':
57
- return logging.FATAL
58
- return logging.DEBUG
59
-
60
- def setLevel(self, level):
61
- """
62
- Args:
63
- level: debug,info,warning,critical,fatal
64
- Returns:
65
- """
66
- level = self.levels(level)
67
- super().setLevel(level)
68
-
69
- @staticmethod
70
- def set_format(handler, format):
71
- # handler.suffix = "%Y%m%d"
72
- if format:
73
- logFormatter = logging.Formatter("%(asctime)s %(filename)s %(funcName)s %(levelname)s: %(message)s",
74
- "%Y-%m-%d %H:%M:%S")
75
- else:
76
- logFormatter = logging.Formatter("%(levelname)s: %(message)s")
77
- handler.setFormatter(logFormatter)
78
-
79
- def show_batch_tensor(self, title, batch_imgs, index=0):
80
- pass
81
-
82
-
83
- class FileHandler(TimedRotatingFileHandler):
84
- def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False,
85
- atTime=None):
86
- logging.handlers.BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
87
- self.when = when.upper()
88
- self.backupCount = backupCount
89
- self.utc = utc
90
- self.atTime = atTime
91
- if self.when == 'S':
92
- self.interval = 1 # one second
93
- self.suffix = "%Y-%m-%d_%H-%M-%S"
94
- self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(\.\w+)?$"
95
- elif self.when == 'M':
96
- self.interval = 60 # one minute
97
- self.suffix = "%Y-%m-%d_%H-%M"
98
- self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}(\.\w+)?$"
99
- elif self.when == 'H':
100
- self.interval = 60 * 60 # one hour
101
- self.suffix = "%Y-%m-%d_%H"
102
- self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}(\.\w+)?$"
103
- elif self.when == 'D' or self.when == 'MIDNIGHT':
104
- self.interval = 60 * 60 * 24 # one day
105
- self.suffix = "%Y-%m-%d"
106
- self.extMatch = r"^\d{4}-\d{2}-\d{2}(\.\w+)?$"
107
- elif self.when.startswith('W'):
108
- self.interval = 60 * 60 * 24 * 7 # one week
109
- if len(self.when) != 2:
110
- raise ValueError("You must specify a day for weekly rollover from 0 to 6 (0 is Monday): %s" % self.when)
111
- if self.when[1] < '0' or self.when[1] > '6':
112
- raise ValueError("Invalid day specified for weekly rollover: %s" % self.when)
113
- self.dayOfWeek = int(self.when[1])
114
- self.suffix = "%Y-%m-%d"
115
- self.extMatch = r"^\d{4}-\d{2}-\d{2}(\.\w+)?$"
116
- elif self.when == 'Y':
117
- self.interval = 60 * 60 * 24 * 365 # one yes
118
- self.suffix = "%Y-%m-%d"
119
- self.extMatch = r"^\d{4}-\d{2}-\d{2}(\.\w+)?$"
120
- else:
121
- raise ValueError("Invalid rollover interval specified: %s" % self.when)
122
-
123
- self.extMatch = re.compile(self.extMatch, re.ASCII)
124
- self.interval = self.interval * interval # multiply by units requested
125
- # The following line added because the filename passed in could be a
126
- # path object (see Issue #27493), but self.baseFilename will be a string
127
- filename = self.baseFilename
128
- if os.path.exists(filename):
129
- t = os.stat(filename)[logging.handlers.ST_MTIME]
130
- else:
131
- t = int(time.time())
132
- self.rolloverAt = self.computeRollover(t)
133
-
134
-
135
- def set_logger(name="LOG", level="debug", logfile=None, format=False, is_main_process=True):
136
- """
137
- logger = set_logging(name="LOG", level="debug", logfile="log.txt", format=False)
138
- url:https://cuiqingcai.com/6080.html
139
- level级别:debug>info>warning>error>critical
140
- :param level: 设置log输出级别
141
- :param logfile: log保存路径,如果为None,则在控制台打印log
142
- :param is_main_process: 是否是主进程
143
- :return:
144
- """
145
- if not is_main_process:
146
- level = "fatal"
147
- logfile = None
148
- # logger = logging.getLogger(name)
149
- logger = CustomLogger(name, level=level)
150
- if logfile and os.path.exists(logfile):
151
- os.remove(logfile)
152
- # define a FileHandler write messages to file
153
- if logfile:
154
- # filehandler = logging.handlers.RotatingFileHandler(filename="./log.txt")
155
- # filehandler = TimedRotatingFileHandler(logfile, when="midnight", interval=1)
156
- filehandler = FileHandler(logfile, when="Y", interval=1)
157
- logger.set_format(filehandler, format)
158
- logger.addHandler(filehandler)
159
-
160
- # define a StreamHandler print messages to console
161
- console = logging.StreamHandler()
162
- logger.set_format(console, format)
163
- logger.addHandler(console)
164
- return logger
165
-
166
-
167
- def print_args(args):
168
- logger = get_logger()
169
- logger.info("---" * 10)
170
- args = args.__dict__
171
- for k, v in args.items():
172
- # print("{}: {}".format(k, v))
173
- logger.info("{}: {}".format(k, v))
174
- logger.info("---" * 10)
175
-
176
-
177
- def get_logger(name="LOG", level="debug"):
178
- logger = CustomLogger(name)
179
- # if logger.isEnabledFor(CustomLogger.levels(level)):
180
- # logger = CustomLogger(name, level=level)
181
- return logger
182
-
183
-
184
- if __name__ == '__main__':
185
- logger = set_logger(logfile=None, level="debug")
186
- logger1 = get_logger()
187
- logger1.info("---" * 20)
188
- logger1.debug("work_space:{}".format("work_dir"))
189
- logger1.info("work_space:{}".format("work_dir"))
190
- logger1.error("work_space:{}".format("work_dir"))
191
- logger1.fatal("work_space:{}".format("work_dir"))
@@ -1,62 +0,0 @@
1
- import os
2
- import logging
3
- import threading
4
- import sys
5
- import time
6
-
7
- local = threading.local()
8
- operateid_key = "operateid"
9
-
10
-
11
- def set_operate_id(val):
12
- local.__setattr__(operateid_key, val)
13
-
14
-
15
- class ThreadLocalFormatter(logging.Formatter):
16
-
17
- def format(self, record):
18
- msg = super(ThreadLocalFormatter, self).format(record)
19
- try:
20
- opid = local.__getattribute__(operateid_key)
21
- msg = opid + " " + msg
22
- except Exception:
23
- pass
24
-
25
- return msg
26
-
27
-
28
- log_level = os.getenv("LOG_LEVEL", "info").upper()
29
- # LOG_FORMAT = "%(asctime)s %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"
30
- LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s"
31
- logging.Formatter.default_msec_format = '%s.%03d'
32
- logging.Formatter.default_time_format = '%Y-%m-%dT%H:%M:%S'
33
-
34
- stream_handler = logging.StreamHandler()
35
- stream_handler.setFormatter(ThreadLocalFormatter(fmt=LOG_FORMAT))
36
- # 直接设置datefmt毫秒时间戳无效 有疑问请查看logging.Formatter代码 不推荐使用handlers配置
37
- # logging.basicConfig(level=log_level, format=LOG_FORMAT, handlers=[stream_handler])
38
- logging.basicConfig(level=log_level, format=LOG_FORMAT)
39
-
40
- # 重置handlers
41
- for h in logging.root.handlers:
42
- logging.root.removeHandler(h)
43
- logging.root.addHandler(stream_handler)
44
-
45
- log = logging.getLogger("EP")
46
-
47
-
48
- def run_time_decorator(title=""):
49
- def decorator(func):
50
- def wrapper(*args, **kwargs):
51
- # torch.cuda.synchronize()
52
- t0 = time.time()
53
- result = func(*args, **kwargs)
54
- # torch.cuda.synchronize()
55
- t1 = time.time()
56
- # print("{} call {} elapsed: {}ms ".format(title, func.__name__, (t1 - t0) * 1000))
57
- log.info("{}\t call {} \t elapsed:{:4.3f}ms \t".format(title, func.__name__, (t1 - t0) * 1000))
58
- return result
59
-
60
- return wrapper
61
-
62
- return decorator
@@ -1,16 +0,0 @@
1
- # -*-coding: utf-8 -*-
2
- """
3
- @Author : PKing
4
- @E-mail : 390737991@qq.com
5
- @Date : 2022-12-31 11:37:30
6
- @Brief :
7
- """
8
-
9
- import numpy as np
10
- import xmltodict
11
- from pybaseutils import image_utils
12
- import cv2
13
-
14
- if __name__ == '__main__':
15
- """
16
- """
File without changes
File without changes