pybaseutils 2.2.12__tar.gz → 2.2.16__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 (279) hide show
  1. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/PKG-INFO +10 -4
  2. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/README.md +3 -1
  3. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/__init__.py +1 -1
  4. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/file_utils.py +1 -1
  5. pybaseutils-2.2.16/pybaseutils/font_style/__init__.py +73 -0
  6. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/font_utils.py +30 -24
  7. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/image_utils.py +63 -54
  8. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/numpy_utils.py +35 -0
  9. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/plot_utils.py +4 -1
  10. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/time_utils.py +15 -2
  11. pybaseutils-2.2.16/pybaseutils/web/__init__.py +7 -0
  12. pybaseutils-2.2.16/pybaseutils/web/st_image_web.py +111 -0
  13. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils.egg-info/PKG-INFO +10 -4
  14. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils.egg-info/SOURCES.txt +5 -0
  15. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/setup.py +56 -56
  16. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/speechbrain_asr_indoor_prod.py +737 -737
  17. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/camera/demo.py +147 -147
  18. pybaseutils-2.2.16/test_py/date_dataset.py +138 -0
  19. pybaseutils-2.2.16/test_py/date_demo.py +18 -0
  20. pybaseutils-2.2.16/test_py/datedataset_bk.py +102 -0
  21. pybaseutils-2.2.16/test_py/demo1.py +48 -0
  22. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_voc_vis.py +1 -1
  23. pybaseutils-2.2.12/pybaseutils/font_style/__init__.py +0 -21
  24. pybaseutils-2.2.12/test_py/demo1.py +0 -17
  25. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/LICENCE +0 -0
  26. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/audio/__init__.py +0 -0
  27. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/audio/audio_utils.py +0 -0
  28. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/audio/pyaudio_utils.py +0 -0
  29. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/audio/vad_utils.py +0 -0
  30. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/base64_utils.py +0 -0
  31. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/batch_utils.py +0 -0
  32. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/build_utils/__init__.py +0 -0
  33. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/build_utils/cython_utils.py +0 -0
  34. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  35. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cluster/__init__.py +0 -0
  36. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cluster/kmean.py +0 -0
  37. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cluster/maxmin_distance.py +0 -0
  38. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cluster/similarity.py +0 -0
  39. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/color_utils.py +0 -0
  40. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/config_utils.py +0 -0
  41. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/__init__.py +0 -0
  42. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/build_coco.py +0 -0
  43. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/build_cvat.py +0 -0
  44. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/build_labelme.py +0 -0
  45. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/build_voc.py +0 -0
  46. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/concat_coco.py +0 -0
  47. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  48. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_coco2voc.py +0 -0
  49. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
  50. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  51. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
  52. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_labelme2voc.py +0 -0
  53. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  54. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_voc2coco.py +0 -0
  55. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  56. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_voc2voc.py +0 -0
  57. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  58. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  59. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/coords_utils.py +0 -0
  60. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cvutils/__init__.py +0 -0
  61. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cvutils/corner_utils.py +0 -0
  62. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cvutils/monitor.py +0 -0
  63. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cvutils/mouse_utils.py +0 -0
  64. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cvutils/nms_utils.py +0 -0
  65. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/cvutils/video_utils.py +0 -0
  66. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/__init__.py +0 -0
  67. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/balanced_classes.py +0 -0
  68. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/base_coco.py +0 -0
  69. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/base_dataset.py +0 -0
  70. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/data_resample.py +0 -0
  71. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  72. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  73. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  74. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_image_folder.py +0 -0
  75. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_image_text.py +0 -0
  76. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_labelme.py +0 -0
  77. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_voc.py +0 -0
  78. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/parser_yolo.py +0 -0
  79. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  80. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/QueueTable.py +0 -0
  81. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/__init__.py +0 -0
  82. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/demo.py +0 -0
  83. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/kalman_filter.py +0 -0
  84. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/mean_filter.py +0 -0
  85. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/motion_filter.py +0 -0
  86. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/filter/pose_filter.py +0 -0
  87. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/geometry_tools.py +0 -0
  88. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/heatmap_utils.py +0 -0
  89. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/http_utils.py +0 -0
  90. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/json_utils.py +0 -0
  91. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/log.py +0 -0
  92. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/log_utils.py +0 -0
  93. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/metrics/__init__.py +0 -0
  94. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/metrics/accuracy.py +0 -0
  95. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/metrics/average_meter.py +0 -0
  96. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/metrics/class_report.py +0 -0
  97. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/metrics/plot_pr.py +0 -0
  98. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/metrics/plot_roc.py +0 -0
  99. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pandas_utils.py +0 -0
  100. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pose/__init__.py +0 -0
  101. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pose/bones_utils.py +0 -0
  102. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pose/human_pose.py +0 -0
  103. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pose/pose_utils.py +0 -0
  104. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pycpp/__init__.py +0 -0
  105. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pycpp/demo.py +0 -0
  106. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/pycpp/main.py +0 -0
  107. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/server/__init__.py +0 -0
  108. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/server/apm_server.py +0 -0
  109. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/setup_config.py +0 -0
  110. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/singleton_utils.py +0 -0
  111. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/text_utils.py +0 -0
  112. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/thread_utils.py +0 -0
  113. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracemalloc_utils.py +0 -0
  114. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracemalloc_utils2.py +0 -0
  115. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/QueueTable.py +0 -0
  116. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/__init__.py +0 -0
  117. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/demo.py +0 -0
  118. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/kalman_filter.py +0 -0
  119. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/mean_filter.py +0 -0
  120. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/motion_filter.py +0 -0
  121. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/tracking/pose_filter.py +0 -0
  122. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/transforms/__init__.py +0 -0
  123. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/transforms/affine_transform.py +0 -0
  124. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/transforms/augment_utils.py +0 -0
  125. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/transforms/face_alignment.py +0 -0
  126. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/transforms/transform_utils.py +0 -0
  127. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/word_utils.py +0 -0
  128. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/worker.py +0 -0
  129. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils/yaml_utils.py +0 -0
  130. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils.egg-info/dependency_links.txt +0 -0
  131. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils.egg-info/not-zip-safe +0 -0
  132. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/pybaseutils.egg-info/top_level.txt +0 -0
  133. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/setup.cfg +0 -0
  134. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/Image_enhance/__init__.py +0 -0
  135. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/Image_enhance/dmeo01.py +0 -0
  136. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/WebCrawler/__init__.py +0 -0
  137. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/WebCrawler/search_image.py +0 -0
  138. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  139. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/__init__.py +0 -0
  140. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/__init__.py +0 -0
  141. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/action_dataset.py +0 -0
  142. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/build_cython.py +0 -0
  143. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/build_pyarmor.py +0 -0
  144. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/build_service.py +0 -0
  145. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/convert_cvat2labelme.py +0 -0
  146. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/convert_labelme2coco.py +0 -0
  147. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/convert_labelme2voc.py +0 -0
  148. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/copy_move.py +0 -0
  149. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/demo_labelme_crop.py +0 -0
  150. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/demo_labelme_shock.py +0 -0
  151. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/demo_video_aije.py +0 -0
  152. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/demo_voc_crop.py +0 -0
  153. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/demo_voc_vis.py +0 -0
  154. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/get_pair_data.py +0 -0
  155. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/aije/video_convertor.py +0 -0
  156. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/__init__.py +0 -0
  157. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/demo.py +0 -0
  158. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/main.py +0 -0
  159. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/main_read.py +0 -0
  160. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/segment.py +0 -0
  161. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/audio/speechbrain_demo.py +0 -0
  162. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/camera/__init__.py +0 -0
  163. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/captcha/__init__.py +0 -0
  164. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/captcha/demo.py +0 -0
  165. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/class_attribute.py +0 -0
  166. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/class_names.py +0 -0
  167. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/AffectNet.py +0 -0
  168. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/AsianMovie.py +0 -0
  169. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/BITVehicle2voc.py +0 -0
  170. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/BSTLD2voc.py +0 -0
  171. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/CCPD.py +0 -0
  172. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/CCPD2voc.py +0 -0
  173. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/FL3D_dataset.py +0 -0
  174. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/FreiHAND2coco.py +0 -0
  175. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/MTFL2voc.py +0 -0
  176. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/TT100K.py +0 -0
  177. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/WaterMeters1.py +0 -0
  178. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/WaterMeters2.py +0 -0
  179. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/__init__.py +0 -0
  180. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/concat_coco.py +0 -0
  181. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_coco2voc.py +0 -0
  182. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_cvat2labelme.py +0 -0
  183. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_gesture2hand.py +0 -0
  184. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_labelme2coco.py +0 -0
  185. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_labelme2cvat.py +0 -0
  186. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_labelme2voc.py +0 -0
  187. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/convert_voc2labelme.py +0 -0
  188. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/fatigue_driving.py +0 -0
  189. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/fdd_dataset.py +0 -0
  190. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/get_pair_data.py +0 -0
  191. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/handpose2coco.py +0 -0
  192. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/insects_for_aichallenger.py +0 -0
  193. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/tt100k_utils.py +0 -0
  194. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/ua_detrac2voc.py +0 -0
  195. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/ucf101_dataset.py +0 -0
  196. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/converter/voc_sbd2labelme.py +0 -0
  197. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/__init__.py +0 -0
  198. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/build_cython.py +0 -0
  199. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/build_pyarmor.py +0 -0
  200. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/cryptography_demo.py +0 -0
  201. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/fun_sum.py +0 -0
  202. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/main.py +0 -0
  203. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/model_des_enctypt.py +0 -0
  204. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/cython_build/model_enctypt.py +0 -0
  205. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo2.py +0 -0
  206. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo3.py +0 -0
  207. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_async_await1.py +0 -0
  208. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_async_await2.py +0 -0
  209. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_coco_vis.py +0 -0
  210. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_copy_files.py +0 -0
  211. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_copy_files_for_voc.py +0 -0
  212. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_ffmpy.py +0 -0
  213. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_for_pair_file.py +0 -0
  214. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_for_polygon.py +0 -0
  215. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_for_trt.py +0 -0
  216. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_get_file_label.py +0 -0
  217. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_get_file_list.py +0 -0
  218. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_gif.py +0 -0
  219. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_gif_video.py +0 -0
  220. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_image_crop.py +0 -0
  221. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_kpts.py +0 -0
  222. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_labelme.py +0 -0
  223. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_labelme_crop.py +0 -0
  224. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_lableme_vis.py +0 -0
  225. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_metrics.py +0 -0
  226. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_mouse.py +0 -0
  227. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_nii.py +0 -0
  228. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_pandas.py +0 -0
  229. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_plot.py +0 -0
  230. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_rename.py +0 -0
  231. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_standard_image .py +0 -0
  232. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_standard_video .py +0 -0
  233. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_taichi.py +0 -0
  234. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_video.py +0 -0
  235. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_video_crop.py +0 -0
  236. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_voc_crop.py +0 -0
  237. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_word_similar.py +0 -0
  238. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_worker1.py +0 -0
  239. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/demo_worker2.py +0 -0
  240. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/detector/__init__.py +0 -0
  241. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/detector/demo.py +0 -0
  242. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/detector/detect_face_person.py +0 -0
  243. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/detector/predet_labelme.py +0 -0
  244. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/edit_distance/__init__.py +0 -0
  245. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/edit_distance/demo.py +0 -0
  246. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/edit_distance/text_matching.py +0 -0
  247. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/flask_demo/__init__.py +0 -0
  248. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/flask_demo/func.py +0 -0
  249. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/flask_demo/server.py +0 -0
  250. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/get_file_list.py +0 -0
  251. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/image_correction/__init__.py +0 -0
  252. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/image_correction/demo_correction_v1.py +0 -0
  253. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/image_correction/demo_correction_v2.py +0 -0
  254. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/image_correction/demo_correction_v3.py +0 -0
  255. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/kafka_worker.py +0 -0
  256. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/men_tracemalloc.py +0 -0
  257. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/milvus_demo/__init__.py +0 -0
  258. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/milvus_demo/demo01.py +0 -0
  259. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/milvus_demo/demo02.py +0 -0
  260. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/milvus_demo/hello_milvus.py +0 -0
  261. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/milvus_demo/milvus_client.py +0 -0
  262. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/performance.py +0 -0
  263. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/pose/__init__.py +0 -0
  264. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/pose/human_pose.py +0 -0
  265. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/redis_py/__init__.py +0 -0
  266. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/redis_py/knn_search.py +0 -0
  267. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/redis_py/redis_client.py +0 -0
  268. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/registry/__init__.py +0 -0
  269. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/registry/base.py +0 -0
  270. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/registry/component.py +0 -0
  271. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/registry/main.py +0 -0
  272. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/registry/register.py +0 -0
  273. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/single_class/GRU.py +0 -0
  274. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/single_class/TCN.py +0 -0
  275. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/single_class/__init__.py +0 -0
  276. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/single_class/demo.py +0 -0
  277. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/test_fr/__init__.py +0 -0
  278. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/test_fr/demo11.py +0 -0
  279. {pybaseutils-2.2.12 → pybaseutils-2.2.16}/test_py/test_fr/idcardocr.py +0 -0
@@ -1,12 +1,18 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pybaseutils
3
- Version: 2.2.12
3
+ Version: 2.2.16
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
9
  License-File: LICENCE
10
+ Dynamic: author
11
+ Dynamic: author-email
12
+ Dynamic: description
13
+ Dynamic: home-page
14
+ Dynamic: license
15
+ Dynamic: summary
10
16
 
11
17
  base-utils
12
18
  ==========
@@ -30,8 +36,8 @@ pybaseutils(Python)
30
36
 
31
37
  pybaseutils是个人开发常用的python库,集成了python等常用的算法
32
38
 
33
- - 安装方法1:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
34
- pybaseutils (有延时,可能不是最新版本)
39
+ - 安装方法1:pip install
40
+ - pybaseutils (有延时,可能不是最新版本)
35
41
  - 安装方法2:pip install –upgrade -i https://pypi.org/simple
36
42
  pybaseutils (从pypi源下载最新版本)
37
43
 
@@ -6,6 +6,7 @@
6
6
 
7
7
  ## base_utils(C++)
8
8
 
9
+
9
10
  base_util是个人开发常用的C++库,集成了C/C++ OpenCV等常用的算法
10
11
 
11
12
  - 增加了debug测试宏定义,如时间测试,LOG信息等
@@ -17,7 +18,8 @@ base_util是个人开发常用的C++库,集成了C/C++ OpenCV等常用的算
17
18
 
18
19
  pybaseutils是个人开发常用的python库,集成了python等常用的算法
19
20
 
20
- - 安装方法1:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pybaseutils (有延时,可能不是最新版本)
21
+ - 安装方法1:pip install
22
+ - pybaseutils (有延时,可能不是最新版本)
21
23
  - 安装方法2:pip install --upgrade -i https://pypi.org/simple pybaseutils (从pypi源下载最新版本)
22
24
 
23
25
 
@@ -5,4 +5,4 @@
5
5
  @Date : 2019-05-07 17:40:27
6
6
  """
7
7
 
8
- __version__ = '2.2.12'
8
+ __version__ = '2.2.16'
@@ -240,7 +240,7 @@ def read_data(filename, split=",", convertNum=True):
240
240
  return lines
241
241
 
242
242
 
243
- def str2number(x: str | int | float):
243
+ def str2number(x):
244
244
  """
245
245
  :param x:
246
246
  :return:
@@ -0,0 +1,73 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : Pan
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2019-05-07 17:40:27
6
+ """
7
+ import os
8
+
9
+ # TODO 如果字体缺失,可以把字体拷贝到系统字体目录:cp -r fonts/* ~/.local/share/fonts/
10
+ # windows: C:\Windows\Fonts可查看系统支持的字体
11
+ # Linux : /usr/share/fonts/truetype 或者~/.local/share/fonts中 可查看系统支持的字体
12
+
13
+ BASE_FONT = os.path.dirname(__file__)
14
+
15
+ # 可能的字体路径列表
16
+ FONT_ROOT = [
17
+ os.path.expanduser("~/.local/share/fonts"),
18
+ os.path.expanduser("~/.local/share/truetype"),
19
+ os.path.expanduser("~/.fonts"), # 用户字体目录
20
+ BASE_FONT, # 用户字体目录
21
+ "/usr/share/fonts",
22
+ "/usr/share/fonts/truetype",
23
+ "/usr/share/fonts/opentype",
24
+ ]
25
+
26
+
27
+ def get_all_files(file_dir, postfix=[]):
28
+ """获取file_dir目录下,所有文本路径,包括子目录文件"""
29
+ file_list = []
30
+ for walk in os.walk(file_dir):
31
+ # paths = [os.path.join(walk[0], file).replace("\\", "/") for file in walk[2]]
32
+ paths = [os.path.join(walk[0], file) for file in walk[2]]
33
+ file_list.extend(paths)
34
+ if not file_list: return file_list
35
+ out_list = []
36
+ for file in file_list:
37
+ p = f"*.{os.path.basename(file).split('.')[-1]}"
38
+ if p in postfix: out_list.append(file)
39
+ return out_list
40
+
41
+
42
+ def get_system_fonts(root=[]):
43
+ """
44
+ 获得字体路径
45
+ 默认字体:ImageFont.load_default()
46
+ :param root: 字体路径
47
+ :return:
48
+ """
49
+ if root and isinstance(root, str): root = [root]
50
+ font_root = root if root else FONT_ROOT
51
+ font_tables = {
52
+ "楷体": os.path.join(BASE_FONT, "simkai.ttf"),
53
+ "simkai": os.path.join(BASE_FONT, "simkai.ttf"),
54
+ "宋体": os.path.join(BASE_FONT, "simsun.ttc"),
55
+ "simsun": os.path.join(BASE_FONT, "simsun.ttc"),
56
+ "仿宋": os.path.join(BASE_FONT, "simfang.ttf"),
57
+ "simfang": os.path.join(BASE_FONT, "simfang.ttf"),
58
+ "黑体": os.path.join(BASE_FONT, "simhei.ttf"),
59
+ "simhei": os.path.join(BASE_FONT, "simhei.ttf"),
60
+ "方正": os.path.join(BASE_FONT, "方正粗黑宋简体.ttf"),
61
+ # "等线": os.path.join(FONT_ROOT, "Deng.ttf"),
62
+ }
63
+ for dir in font_root:
64
+ files = get_all_files(dir, postfix=['*.ttf', '*.ttc', '*.otf'])
65
+ for file in files:
66
+ name = os.path.basename(file).split(".")[0]
67
+ font_tables[name] = file
68
+ for name in list(font_tables.keys()):
69
+ if not os.path.exists(font_tables[name]): font_tables.pop(name)
70
+ return font_tables
71
+
72
+
73
+ FONT_TABLES = get_system_fonts()
@@ -9,20 +9,22 @@
9
9
  import os
10
10
  import cv2
11
11
  import re
12
+ import glob
12
13
  import PIL
13
14
  import platform
14
15
  import numpy as np
15
16
  from PIL import Image, ImageDraw, ImageFont
16
- from pybaseutils import image_utils, file_utils
17
- from pybaseutils.font_style import FONT_TYPE, FONT_ROOT
17
+ from pybaseutils import image_utils
18
+ from pybaseutils.font_style import FONT_TABLES, get_system_fonts
18
19
  from fontTools.ttLib import TTFont
19
20
 
20
21
  ROOT = os.path.dirname(__file__)
21
22
 
22
23
 
23
24
  class FontType(object):
24
- def __init__(self, root=FONT_ROOT, style="宋体", size=20):
25
+ def __init__(self, root=[], style="DejaVuSans", size=20):
25
26
  """
27
+ Linux ~/.local/share/fonts
26
28
  :param root: 安装字体的路径
27
29
  :param style: 选择字体风格
28
30
  :param size: 旋转字体大小
@@ -30,10 +32,13 @@ class FontType(object):
30
32
  self.font_root = root
31
33
  self.font_style = style
32
34
  self.font_size = size
33
- self.font_file = os.path.join(self.font_root, FONT_TYPE[style])
34
- self.font_type = None
35
- if os.path.exists(self.font_file):
35
+ self.font_table = get_system_fonts(root=root)
36
+ self.font_file = self.font_table.get(style, "")
37
+ try:
36
38
  self.font_type = ImageFont.truetype(self.font_file, size=self.font_size, encoding="utf-8")
39
+ except:
40
+ print(f"字体{style}{self.font_file}加载失败,使用系统默认字体")
41
+ self.font_type = ImageFont.load_default()
37
42
 
38
43
  def set_root(self, root):
39
44
  """设置字体的路径"""
@@ -53,7 +58,7 @@ class FontType(object):
53
58
  return self.font_type
54
59
 
55
60
 
56
- font_type = FontType()
61
+ # font_type = FontType()
57
62
 
58
63
 
59
64
  def get_font_type(size, font=""):
@@ -72,10 +77,9 @@ def get_font_type(size, font=""):
72
77
  elif platform.system().lower() == 'windows':
73
78
  font = ImageFont.truetype("simhei.ttf", size, encoding="utf-8") # simsun.ttc 宋体
74
79
  elif platform.system().lower() == 'linux':
75
- # font = ImageFont.truetype("uming.ttc", size, encoding="utf-8")
76
- font = ImageFont.truetype("NotoSansCJK-Regular.ttc", size, encoding="utf-8")
80
+ font = ImageFont.truetype(FONT_TABLES['simhei'], size, encoding="utf-8") # simsun.ttc 宋体
77
81
  else:
78
- font = ImageFont.truetype(os.path.join(ROOT, "font_style/simhei.ttf"), size, encoding="utf-8")
82
+ font = ImageFont.load_default()
79
83
  return font
80
84
 
81
85
 
@@ -104,32 +108,32 @@ def draw_image_text(image, point, text, style="楷体", size=20, color=(255, 255
104
108
  return image
105
109
 
106
110
 
107
- def draw_font(text, style="楷体", scale=1.0, size=20, c1=(255, 255, 255), c2=(0, 0, 0), center=True):
111
+ def draw_font(text, style="楷体", scale=1.0, size=20, fg=(255, 255, 255), bg=(0, 0, 0), center=True):
108
112
  """
109
113
  绘制汉字
110
114
  :param text:
111
115
  :param style: 字体风格
112
116
  :param scale: 缩放因子
113
117
  :param size: 字体大小
114
- :param c1:字体颜色
115
- :param c2:背景颜色
118
+ :param fg:字体颜色
119
+ :param bg:背景颜色
116
120
  :param center: 是否居中显示
117
121
  :return:
118
122
  """
119
123
  if center:
120
- image = image_utils.create_image(shape=(size * 2, size * 2, 3), color=c2)
121
- image = draw_image_text(image, (0, 0), text, style=style, size=size, color=c1)
124
+ image = image_utils.create_image(shape=(size * 2, size * 2, 3), color=bg)
125
+ image = draw_image_text(image, (0, 0), text, style=style, size=size, color=fg)
122
126
  if np.sum(image) < 1: return None
123
127
  mask = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
124
128
  box = image_utils.get_mask_boundrect_cv(mask, binarize=True, shift=10)
125
129
  image = image_utils.get_box_crop(image, box)
126
- image = image_utils.resize_image_padding(image, size=(size, size), color=(0, 0, 0))
130
+ image = image_utils.resize_image_padding(image, size=(size, size), color=bg)
127
131
  else:
128
- image = image_utils.create_image(shape=(size, size, 3), color=c2)
129
- image = draw_image_text(image, (0, 0), text, style=style, size=size, color=c1)
132
+ image = image_utils.create_image(shape=(size, size, 3), color=bg)
133
+ image = draw_image_text(image, (0, 0), text, style=style, size=size, color=fg)
130
134
  if np.sum(image) < 1: return None
131
135
  if scale < 1.0:
132
- image = image_utils.get_scale_image(image, scale=scale, offset=(0, 0), color=c2)
136
+ image = image_utils.get_scale_image(image, scale=scale, offset=(0, 0), color=bg)
133
137
  return image
134
138
 
135
139
 
@@ -210,10 +214,11 @@ def get_font_char(font_file, only_chinese=False):
210
214
  def draw_font_example():
211
215
  size = 512
212
216
  string = "我"
213
- for style, path in FONT_TYPE.items():
214
- style = "/home/dm/nasdata/dataset-dmai/ziku/1200款精品字体/书法字体库 37款/国祥手写体.ttf"
215
- image = draw_font(string, style=style, size=size, scale=0.8, c2=(100, 0, 255))
217
+ for style, path in FONT_TABLES.items():
218
+ print(style, path)
219
+ image = draw_font(string, style=style, size=size, scale=0.8, fg=(255, 255, 255), bg=(128, 128, 128))
216
220
  image_utils.cv_show_image("style", image, use_rgb=False)
221
+ # cv2.imwrite("./style.png", image)
217
222
 
218
223
 
219
224
  def re_example():
@@ -225,5 +230,6 @@ def re_example():
225
230
 
226
231
 
227
232
  if __name__ == "__main__":
228
- # draw_font_example()
229
- re_example()
233
+ draw_font_example()
234
+ # get_system_fonts()
235
+ # re_example()
@@ -22,6 +22,7 @@ from typing import List, Dict, Tuple
22
22
  from PIL import ImageDraw, ImageFont
23
23
  from math import cos, sin
24
24
  from pybaseutils import file_utils, color_utils
25
+ from pybaseutils import font_style
25
26
  from pybaseutils.coords_utils import *
26
27
  from pybaseutils.cvutils import corner_utils
27
28
 
@@ -46,29 +47,6 @@ mpii_skeleton = [[0, 1], [1, 2], [3, 4], [4, 5], [2, 6], [6, 3], [12, 11], [7, 1
46
47
  [11, 10], [13, 14], [14, 15], [8, 9], [8, 7], [6, 7], [7, 13]]
47
48
 
48
49
 
49
- def get_font_type(size, font=""):
50
- """
51
- Windows字体路径 : /usr/share/fonts/楷体.ttf
52
- Linux(Ubuntu)字体路径:/usr/share/fonts/楷体.ttf
53
- >> fc-list 查看所有的字体
54
- >> fc-list :lang=zh 查看所有的中文字体
55
- :param size: 字体大小
56
- :param font: simsun.ttc 宋体;simhei.ttf 黑体
57
- :return:
58
- """
59
- # 参数1:字体文件路径,参数2:字体大小;Windows系统“simhei.ttf”默认存储在路径:
60
- if font:
61
- font = ImageFont.truetype(font, size, encoding="utf-8")
62
- elif platform.system().lower() == 'windows':
63
- font = ImageFont.truetype("simhei.ttf", size, encoding="utf-8") # simsun.ttc 宋体
64
- elif platform.system().lower() == 'linux':
65
- # font = ImageFont.truetype("uming.ttc", size, encoding="utf-8")
66
- font = ImageFont.truetype("NotoSansCJK-Regular.ttc", size, encoding="utf-8")
67
- else:
68
- font = ImageFont.truetype(os.path.join(root, "font_style/simhei.ttf"), size, encoding="utf-8")
69
- return font
70
-
71
-
72
50
  def create_image(shape, color=(255, 255, 255), dtype=np.uint8, use_rgb=False):
73
51
  """
74
52
  生成一张图片
@@ -697,16 +675,17 @@ def resize_image(image, size: Tuple, interpolation=cv2.INTER_LINEAR):
697
675
  def image_boxes_resize_padding(image, input_size, boxes=None, points=None, color=(0, 0, 0)):
698
676
  """
699
677
  等比例图像resize,保持原始图像内容比,避免失真,短边会0填充
700
- input_size = [300, 300]
701
- image_path = "test.jpg"
702
- src_boxes = [[8.20251, 1, 242.2412, 699.2236],
703
- [201.14865, 204.18265, 468.605, 696.36163]]
704
- src_boxes = np.asarray(src_boxes)
705
- image = read_image(image_path)
706
- image1, boxes1 = image_boxes_resize_padding(image, input_size, src_boxes)
707
- image1 = show_image_boxes("Det", image1, boxes1, color=(255, 0, 0), delay=3)
708
- boxes = image_boxes_resize_padding_inverse(image.shape, input_size, boxes1)
709
- show_image_boxes("image", image, boxes)
678
+ >> example:
679
+ input_size = [300, 300]
680
+ image_path = "../data/test_image/grid1.png"
681
+ boxes = [[120, 50, 250, 180]]
682
+ boxes = np.asarray(boxes)
683
+ image0 = read_image(image_path)
684
+ show_image_boxes("image0", image0, boxes, color=(255, 0, 0), delay=3)
685
+ image1 = image_boxes_resize_padding(image0, input_size, boxes)
686
+ show_image_boxes("image1", image1, boxes, color=(0, 255, 0), delay=3)
687
+ boxes = image_boxes_resize_padding_inverse((image0.shape[1], image0.shape[0]), input_size, boxes)
688
+ show_image_boxes("image2", image0, boxes, color=(0, 0, 255))
710
689
  :param size:
711
690
  """
712
691
  height, width = image.shape[:2]
@@ -1417,9 +1396,16 @@ def draw_image_box_text(image, bbox, color, text, thickness=2, fontScale=0.8, dr
1417
1396
  :return:
1418
1397
  """
1419
1398
  thickness, fontScale = get_linesize(max(image.shape), thickness=thickness, fontScale=fontScale)
1420
- text_loc = (bbox[0], bbox[1]) if top else (bbox[0], bbox[3])
1399
+ # text_loc = (bbox[0], bbox[1]) if top else (bbox[0], bbox[3])
1421
1400
  if not text: drawType = "simple"
1401
+ text_size, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_SIMPLEX, fontScale, thickness)
1402
+ if top:
1403
+ # text_loc = (bbox[0], bbox[1] + text_size[1]) # 在左上角下方绘制文字
1404
+ text_loc = (bbox[0], bbox[1] - baseline // 2) # 在左上角上方绘制文字
1405
+ else:
1406
+ text_loc = (bbox[0], bbox[3] + text_size[1] + baseline // 2)
1422
1407
  if drawType == "chinese" or drawType == "ch":
1408
+ if not top: text_loc = (text_loc[0], text_loc[1] - baseline)
1423
1409
  cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness)
1424
1410
  cv2_putText(image, str(text), text_loc, color=color, fontScale=fontScale, thickness=thickness)
1425
1411
  elif drawType == "simple" or drawType == "en":
@@ -1427,13 +1413,7 @@ def draw_image_box_text(image, bbox, color, text, thickness=2, fontScale=0.8, dr
1427
1413
  cv2.putText(image, str(text), text_loc, cv2.FONT_HERSHEY_SIMPLEX, fontScale, color, thickness)
1428
1414
  elif drawType == "custom":
1429
1415
  cv2.rectangle(image, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, thickness)
1430
- text_size, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_SIMPLEX, fontScale, thickness)
1431
- if top:
1432
- # text_loc = (bbox[0], bbox[1] + text_size[1]) # 在左上角下方绘制文字
1433
- text_loc = (bbox[0], bbox[1] - baseline // 2) # 在左上角上方绘制文字
1434
- else:
1435
- text_loc = (bbox[0], bbox[3])
1436
- bg1 = (text_loc[0], text_loc[1] - text_size[1])
1416
+ bg1 = (text_loc[0], text_loc[1] - text_size[1] - baseline // 2)
1437
1417
  bg2 = (text_loc[0] + text_size[0], text_loc[1] + baseline // 2) # 底纹等于字体的宽度
1438
1418
  # bg2 = (max(bbox[2], text_loc[0] + text_size[0]), text_loc[1] + baseline // 2) # 底纹等于box的宽度
1439
1419
  cv2.rectangle(image, bg1, bg2, color, thickness) # 先绘制框,再填充
@@ -1484,12 +1464,36 @@ def draw_text_pil(image, point, text, size=10, color_color=(255, 0, 0)):
1484
1464
  return image
1485
1465
 
1486
1466
 
1467
+ def get_font_type(size, font=""):
1468
+ """
1469
+ Windows字体路径 : /usr/share/fonts/楷体.ttf
1470
+ Linux(Ubuntu)字体路径:/usr/share/fonts/楷体.ttf
1471
+ >> fc-list 查看所有的字体
1472
+ >> fc-list :lang=zh 查看所有的中文字体
1473
+ :param size: 字体大小
1474
+ :param font: simsun.ttc 宋体;simhei.ttf 黑体
1475
+ :return:
1476
+ """
1477
+ # 参数1:字体文件路径,参数2:字体大小;Windows系统“simhei.ttf”默认存储在路径:
1478
+ if font:
1479
+ font = ImageFont.truetype(font, size, encoding="utf-8")
1480
+ elif platform.system().lower() == 'windows':
1481
+ font = ImageFont.truetype("simhei.ttf", size, encoding="utf-8") # simsun.ttc 宋体
1482
+ elif platform.system().lower() == 'linux':
1483
+ font = ImageFont.truetype(font_style.FONT_TABLES['simhei'], size, encoding="utf-8") # simsun.ttc 宋体
1484
+ # font = ImageFont.load_default()
1485
+ else:
1486
+ font = ImageFont.load_default()
1487
+ return font
1488
+
1489
+
1487
1490
  def cv2_putText(img, text, point, fontFace=None, fontScale=0.8, color=(255, 0, 0), thickness=None):
1488
1491
  # cv2.putText(img, str(text), point, fontFace, fontScale, color=color, thickness=thickness)
1492
+ text_size, baseline = cv2.getTextSize(str(text), cv2.FONT_HERSHEY_SIMPLEX, fontScale, thickness)
1489
1493
  pilimg = Image.fromarray(img) # Image.fromarray()将数组类型转成图片格式,与np.array()相反
1490
1494
  draw = ImageDraw.Draw(pilimg) # PIL图片上打印汉字
1491
- size = int(fontScale * 10 * thickness)
1492
- point = (point[0], point[1] - int(size * 1.3))
1495
+ size = text_size[1] # 字体大小
1496
+ point = (point[0], point[1] - text_size[1] + baseline // 2)
1493
1497
  font = get_font_type(size=size)
1494
1498
  draw.text(point, text, color, font)
1495
1499
  img[:] = np.asarray(pilimg)
@@ -1841,7 +1845,8 @@ def softmax(x, axis=1):
1841
1845
  # 计算每行的最大值
1842
1846
  row_max = x.max(axis=axis)
1843
1847
  # 每行元素都需要减去对应的最大值,否则求exp(x)会溢出,导致inf情况
1844
- row_max = row_max.reshape(-1, 1)
1848
+ # row_max = row_max.reshape(-1, 1)
1849
+ row_max = row_max[:, :, np.newaxis]
1845
1850
  x = x - row_max
1846
1851
  # 计算e的指数次幂
1847
1852
  x_exp = np.exp(x)
@@ -1850,6 +1855,10 @@ def softmax(x, axis=1):
1850
1855
  return s
1851
1856
 
1852
1857
 
1858
+ def sigmoid(x):
1859
+ return 1 / (1 + np.exp(-x))
1860
+
1861
+
1853
1862
  def convert_anchor(anchors, height, width):
1854
1863
  """
1855
1864
  height, width, _ = image.shape
@@ -2996,13 +3005,13 @@ def get_video_writer(video_file, width, height, fps):
2996
3005
  if __name__ == "__main__":
2997
3006
  # from utils import image_utils
2998
3007
 
2999
- input_size = [int(490 / 2), int(800 / 2)]
3000
- image_path = "test.jpg"
3001
- src_boxes = [[8.20251, 1, 242.2412, 699.2236],
3002
- [201.14865, 204.18265, 468.605, 696.36163]]
3003
- src_boxes = np.asarray(src_boxes)
3004
- image = read_image(image_path) # (800, 490, 3)
3005
- image1, boxes1 = image_boxes_resize_padding(image, input_size, src_boxes)
3006
- image1 = show_image_boxes("Det", image1, boxes1, color=(255, 0, 0), delay=3)
3007
- boxes = image_boxes_resize_padding_inverse((image.shape[1], image.shape[0]), input_size, boxes1)
3008
- show_image_boxes("image", image, boxes)
3008
+ input_size = [300, 300]
3009
+ image_path = "../data/test_image/grid1.png"
3010
+ boxes = [[120, 50, 250, 180]]
3011
+ boxes = np.asarray(boxes)
3012
+ image0 = read_image(image_path) # (800, 490, 3)
3013
+ show_image_boxes("image0", image0, boxes, color=(255, 0, 0), delay=3)
3014
+ image1 = image_boxes_resize_padding(image0, input_size, boxes)
3015
+ show_image_boxes("image1", image1, boxes, color=(0, 255, 0), delay=3)
3016
+ boxes = image_boxes_resize_padding_inverse((image0.shape[1], image0.shape[0]), input_size, boxes)
3017
+ show_image_boxes("image2", image0, boxes, color=(0, 0, 255))
@@ -11,6 +11,41 @@ from sklearn import metrics, preprocessing
11
11
  import heapq
12
12
 
13
13
 
14
+ def softmax(x, axis=1):
15
+ # 计算每行的最大值
16
+ row_max = x.max(axis=axis)
17
+ # 每行元素都需要减去对应的最大值,否则求exp(x)会溢出,导致inf情况
18
+ # row_max = row_max.reshape(-1, 1)
19
+ row_max = row_max[:, :, np.newaxis]
20
+ x = x - row_max
21
+ # 计算e的指数次幂
22
+ x_exp = np.exp(x)
23
+ x_sum = np.sum(x_exp, axis=axis, keepdims=True)
24
+ s = x_exp / x_sum
25
+ return s
26
+
27
+ def sigmoid(x):
28
+ return 1 / (1 + np.exp(-x))
29
+
30
+
31
+ def gaussian_impulse(x, c=0, sigma=0.1):
32
+ """
33
+ 高斯脉冲
34
+ :param x: 输入数据x
35
+ :param c: 脉冲中心点
36
+ :param sigma:标准差,越小脉冲越尖锐
37
+ :return: 生成高斯脉冲
38
+ """
39
+ y = np.exp(-((x - c) ** 2) / (2 * sigma ** 2))
40
+ return y
41
+
42
+
43
+ def power(x, n=1):
44
+ """幂函数"""
45
+ y = np.power(x, n)
46
+ return y
47
+
48
+
14
49
  def feature_norm(x, axis=-1):
15
50
  """
16
51
  特征归一化,会使得特征L2之和为1, 即||y||=L2(y,axis=-1)
@@ -7,12 +7,15 @@
7
7
  @Date : 2019-07-13 16:30:10
8
8
  """
9
9
  import os
10
+ import matplotlib
10
11
  import numpy as np
11
12
  import matplotlib.pyplot as plt
12
13
  import PIL.Image as Image
13
14
  import platform
14
15
  from matplotlib.font_manager import FontProperties
15
16
 
17
+ matplotlib.use('TkAgg')
18
+
16
19
  ROOT = os.path.dirname(__file__)
17
20
 
18
21
 
@@ -91,7 +94,7 @@ def plot_bar(x, y, xlabel="X", ylabel="Y", title="bar", bin_width=1, vis=True, s
91
94
  font = get_font_type(size=14)
92
95
  # 准备数据
93
96
  # 用 Matplotlib 画条形图
94
- plt.bar(x=x, height=y, width=bin_width, align="center", yerr=0.000001,)
97
+ plt.bar(x=x, height=y, width=bin_width, align="center", yerr=0.000001, )
95
98
  # plt.xlim([0.0, 1.0])
96
99
  # plt.ylim([0.0, 1.05])
97
100
  # 设置横纵坐标的名称以及对应字体格式
@@ -6,10 +6,21 @@
6
6
  @Brief :
7
7
  """
8
8
  import time
9
+ from datetime import datetime
9
10
  import numpy as np
10
11
  from typing import Dict, List
11
12
 
12
13
 
14
+ def date2stamp(date, format='%Y-%m-%d %H:%M:%S'):
15
+ """将日期格式转换为时间戳"""
16
+ return time.mktime(time.strptime(date, format))
17
+
18
+
19
+ def stamp2date(stamp, format='%Y-%m-%d %H:%M:%S'):
20
+ """将时间戳转换为日期格式"""
21
+ return datetime.fromtimestamp(stamp).strftime(format)
22
+
23
+
13
24
  class Recorder(object):
14
25
  def __init__(self):
15
26
  self.content: Dict = {}
@@ -51,8 +62,10 @@ def performance(tag=""):
51
62
  content["avg"],
52
63
  content["total"],
53
64
  content["count"])
54
- tag_ = f"{tag} " if tag else ""
55
- print("{:20s}{:20s} elapsed: {}".format(tag_, func.__name__, elapsed))
65
+ if tag:
66
+ print("{:20s}{:20s} elapsed: {}".format(tag, func.__name__, elapsed))
67
+ else:
68
+ print("{:20s} elapsed: {}".format(func.__name__, elapsed))
56
69
  return result
57
70
 
58
71
  return wrapper
@@ -0,0 +1,7 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : PanJinquan
4
+ @E-mail :
5
+ @Date : 2025-02-17 10:17:17
6
+ @Brief :
7
+ """