pybaseutils 1.2.0__tar.gz → 2.0.0__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 (238) hide show
  1. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/PKG-INFO +1 -1
  2. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/__init__.py +1 -1
  3. pybaseutils-2.0.0/pybaseutils/converter/build_cvat.py +53 -0
  4. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_cvat2labelme.py +3 -3
  5. pybaseutils-2.0.0/pybaseutils/converter/convert_labelme2cvat.py +39 -0
  6. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_labelme2voc.py +1 -1
  7. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/coords_utils.py +1 -1
  8. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cvutils/video_utils.py +69 -58
  9. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/parser_labelme.py +3 -2
  10. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/parser_voc.py +1 -0
  11. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/parser_yolo.py +1 -0
  12. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/font_utils.py +1 -1
  13. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/image_utils.py +213 -147
  14. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/word_utils.py +2 -2
  15. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils.egg-info/PKG-INFO +1 -1
  16. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils.egg-info/SOURCES.txt +3 -0
  17. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/demo_labelme_crop.py +4 -4
  18. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/AffectNet.py +1 -1
  19. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/AsianMovie.py +1 -1
  20. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/WaterMeters1.py +1 -1
  21. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/WaterMeters2.py +1 -1
  22. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/convert_cvat2labelme.py +3 -3
  23. pybaseutils-2.0.0/test_py/converter/convert_labelme2cvat.py +23 -0
  24. pybaseutils-2.0.0/test_py/demo1.py +82 -0
  25. pybaseutils-2.0.0/test_py/demo2.py +25 -0
  26. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_gif_video.py +6 -5
  27. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_image_crop.py +1 -1
  28. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_lableme_vis.py +2 -1
  29. pybaseutils-1.2.0/test_py/demo1.py +0 -51
  30. pybaseutils-1.2.0/test_py/demo2.py +0 -39
  31. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/LICENCE +0 -0
  32. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/README.md +0 -0
  33. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/audio/__init__.py +0 -0
  34. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/audio/audio_utils.py +0 -0
  35. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/audio/pyaudio_utils.py +0 -0
  36. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/audio/vad_utils.py +0 -0
  37. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/base64_utils.py +0 -0
  38. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/batch_utils.py +0 -0
  39. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/build_utils/__init__.py +0 -0
  40. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/build_utils/cython_utils.py +0 -0
  41. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
  42. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cluster/__init__.py +0 -0
  43. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cluster/kmean.py +0 -0
  44. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cluster/maxmin_distance.py +0 -0
  45. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cluster/similarity.py +0 -0
  46. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/color_utils.py +0 -0
  47. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/config_utils.py +0 -0
  48. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/__init__.py +0 -0
  49. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/build_coco.py +0 -0
  50. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/build_labelme.py +0 -0
  51. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/build_voc.py +0 -0
  52. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/concat_coco.py +0 -0
  53. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_coco2labelme.py +0 -0
  54. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_coco2voc.py +0 -0
  55. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_labelme2coco.py +0 -0
  56. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
  57. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_voc2coco.py +0 -0
  58. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_voc2labelme.py +0 -0
  59. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_voc2voc.py +0 -0
  60. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_voc2yolo.py +0 -0
  61. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/converter/convert_yolo2voc.py +0 -0
  62. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cvutils/__init__.py +0 -0
  63. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cvutils/corner_utils.py +0 -0
  64. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cvutils/monitor.py +0 -0
  65. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/cvutils/mouse_utils.py +0 -0
  66. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/__init__.py +0 -0
  67. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/base_coco.py +0 -0
  68. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/base_dataset.py +0 -0
  69. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/parser_coco_det.py +0 -0
  70. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
  71. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
  72. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
  73. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/file_utils.py +0 -0
  74. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/QueueTable.py +0 -0
  75. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/__init__.py +0 -0
  76. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/demo.py +0 -0
  77. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/kalman_filter.py +0 -0
  78. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/mean_filter.py +0 -0
  79. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/motion_filter.py +0 -0
  80. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/filter/pose_filter.py +0 -0
  81. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/font_style/__init__.py +0 -0
  82. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/geometry_tools.py +0 -0
  83. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/heatmap_utils.py +0 -0
  84. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/json_utils.py +0 -0
  85. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/log.py +0 -0
  86. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/logger.py +0 -0
  87. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/metrics/__init__.py +0 -0
  88. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/metrics/accuracy.py +0 -0
  89. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/metrics/average_meter.py +0 -0
  90. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/metrics/class_report.py +0 -0
  91. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/metrics/plot_pr.py +0 -0
  92. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/metrics/plot_roc.py +0 -0
  93. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/numpy_utils.py +0 -0
  94. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pandas_utils.py +0 -0
  95. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/plot_utils.py +0 -0
  96. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pose/__init__.py +0 -0
  97. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pose/bones_utils.py +0 -0
  98. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pose/human_pose.py +0 -0
  99. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pose/pose_utils.py +0 -0
  100. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pycpp/__init__.py +0 -0
  101. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pycpp/demo.py +0 -0
  102. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/pycpp/main.py +0 -0
  103. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/server/__init__.py +0 -0
  104. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/server/apm_server.py +0 -0
  105. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/setup_config.py +0 -0
  106. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/singleton_utils.py +0 -0
  107. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/thread_utils.py +0 -0
  108. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/time_utils.py +0 -0
  109. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracemalloc_utils.py +0 -0
  110. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracemalloc_utils2.py +0 -0
  111. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/QueueTable.py +0 -0
  112. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/__init__.py +0 -0
  113. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/demo.py +0 -0
  114. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/kalman_filter.py +0 -0
  115. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/mean_filter.py +0 -0
  116. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/motion_filter.py +0 -0
  117. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/tracking/pose_filter.py +0 -0
  118. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/transforms/__init__.py +0 -0
  119. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/transforms/affine_transform.py +0 -0
  120. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/transforms/face_alignment.py +0 -0
  121. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/transforms/transform_utils.py +0 -0
  122. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/worker.py +0 -0
  123. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils/yaml_utils.py +0 -0
  124. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils.egg-info/dependency_links.txt +0 -0
  125. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils.egg-info/not-zip-safe +0 -0
  126. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/pybaseutils.egg-info/top_level.txt +0 -0
  127. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/setup.cfg +0 -0
  128. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/setup.py +0 -0
  129. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/WebCrawler/__init__.py +0 -0
  130. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/WebCrawler/search_image.py +0 -0
  131. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
  132. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/__init__.py +0 -0
  133. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/__init__.py +0 -0
  134. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/convert_labelme2coco.py +0 -0
  135. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/convert_labelme2voc.py +0 -0
  136. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/copy_move.py +0 -0
  137. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/demo_video_aije.py +0 -0
  138. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/demo_voc_crop.py +0 -0
  139. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/demo_voc_vis.py +0 -0
  140. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/aije/video_demo.py +0 -0
  141. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/__init__.py +0 -0
  142. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/demo.py +0 -0
  143. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/main.py +0 -0
  144. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/main_read.py +0 -0
  145. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/segment.py +0 -0
  146. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
  147. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/audio/speechbrain_demo.py +0 -0
  148. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/captcha/__init__.py +0 -0
  149. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/captcha/demo.py +0 -0
  150. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/class_attribute.py +0 -0
  151. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/class_names.py +0 -0
  152. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/BITVehicle2voc.py +0 -0
  153. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/BSTLD2voc.py +0 -0
  154. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/CCPD.py +0 -0
  155. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/CCPD2voc.py +0 -0
  156. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/FL3D_dataset.py +0 -0
  157. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/FreiHAND2coco.py +0 -0
  158. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/MTFL2voc.py +0 -0
  159. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/TT100K.py +0 -0
  160. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/__init__.py +0 -0
  161. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/concat_coco.py +0 -0
  162. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/convert_coco2voc.py +0 -0
  163. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/convert_gesture2hand.py +0 -0
  164. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/convert_labelme2coco.py +0 -0
  165. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/convert_labelme2voc.py +0 -0
  166. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/convert_voc2labelme.py +0 -0
  167. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/fatigue_driving.py +0 -0
  168. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/fdd_dataset.py +0 -0
  169. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/handpose2coco.py +0 -0
  170. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/insects_for_aichallenger.py +0 -0
  171. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/tt100k_utils.py +0 -0
  172. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/ua_detrac2voc.py +0 -0
  173. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/converter/voc_sbd2labelme.py +0 -0
  174. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/__init__.py +0 -0
  175. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/build_cython.py +0 -0
  176. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/build_pyarmor.py +0 -0
  177. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/cryptography_demo.py +0 -0
  178. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/fun_sum.py +0 -0
  179. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/main.py +0 -0
  180. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/model_des_enctypt.py +0 -0
  181. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/cython_build/model_enctypt.py +0 -0
  182. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo3.py +0 -0
  183. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_async_await1.py +0 -0
  184. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_async_await2.py +0 -0
  185. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_coco_vis.py +0 -0
  186. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_copy_files.py +0 -0
  187. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_copy_files_for_voc.py +0 -0
  188. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_ffmpy.py +0 -0
  189. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_for_pair_file.py +0 -0
  190. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_for_polygon.py +0 -0
  191. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_for_trt.py +0 -0
  192. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_get_file_list.py +0 -0
  193. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_gif.py +0 -0
  194. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_labelme.py +0 -0
  195. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_labelme_crop.py +0 -0
  196. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_metrics.py +0 -0
  197. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_mouse.py +0 -0
  198. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_nii.py +0 -0
  199. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_pandas.py +0 -0
  200. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_plot.py +0 -0
  201. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_rename.py +0 -0
  202. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_standard_image .py +0 -0
  203. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_standard_video .py +0 -0
  204. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_taichi.py +0 -0
  205. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_video.py +0 -0
  206. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_voc_crop.py +0 -0
  207. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_voc_vis.py +0 -0
  208. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_word_similar.py +0 -0
  209. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_worker1.py +0 -0
  210. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/demo_worker2.py +0 -0
  211. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/detector/__init__.py +0 -0
  212. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/detector/demo.py +0 -0
  213. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/detector/detect_face_person.py +0 -0
  214. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/detector/predet_labelme.py +0 -0
  215. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/edit_distance/__init__.py +0 -0
  216. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/edit_distance/demo.py +0 -0
  217. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/edit_distance/text_matching.py +0 -0
  218. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/edit_distance/text_utils.py +0 -0
  219. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/flask_demo/__init__.py +0 -0
  220. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/flask_demo/func.py +0 -0
  221. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/flask_demo/server.py +0 -0
  222. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/image_correction/__init__.py +0 -0
  223. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/image_correction/demo_correction_v1.py +0 -0
  224. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/image_correction/demo_correction_v2.py +0 -0
  225. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/image_correction/demo_correction_v3.py +0 -0
  226. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/kafka_worker.py +0 -0
  227. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/men_tracemalloc.py +0 -0
  228. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/performance.py +0 -0
  229. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/pose/__init__.py +0 -0
  230. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/pose/human_pose.py +0 -0
  231. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/registry/__init__.py +0 -0
  232. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/registry/base.py +0 -0
  233. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/registry/component.py +0 -0
  234. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/registry/main.py +0 -0
  235. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/registry/register.py +0 -0
  236. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/test_fr/__init__.py +0 -0
  237. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/test_fr/demo11.py +0 -0
  238. {pybaseutils-1.2.0 → pybaseutils-2.0.0}/test_py/test_fr/idcardocr.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybaseutils
3
- Version: 1.2.0
3
+ Version: 2.0.0
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__ = '1.2.0'
8
+ __version__ = '2.0.0'
@@ -0,0 +1,53 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : Pan
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-09-05 19:48:52
6
+ @Brief :
7
+ """
8
+ import os
9
+ import numpy as np
10
+ import cv2
11
+ from pybaseutils import image_utils, file_utils
12
+ import xmltodict
13
+
14
+
15
+ def maker_cvat(xml_file, points, labels, image_name, image_size):
16
+ """
17
+ 制作CVAT数据格式
18
+ :param xml_file: 保存xml文件路径
19
+ :param points: (num_labels,num_points,2), points = image_utils.boxes2polygons(boxes)
20
+ :param labels: (num_labels,)
21
+ :param image_name: 图片名称,如果存在则进行拷贝到json_file同一级目录
22
+ :param image_size: (W,H)
23
+ :return:
24
+ """
25
+ assert len(points) == len(labels)
26
+ file_utils.create_file_path(xml_file)
27
+ objects = []
28
+ for idx, (point, label) in enumerate(zip(points, labels)):
29
+ if isinstance(point, np.ndarray): point = point.tolist()
30
+ if not isinstance(point[0], list): point = [point]
31
+ pt = [{'x': p[0], 'y': p[1]} for p in point]
32
+ item = {'name': label,
33
+ 'deleted': '0',
34
+ 'verified': '0',
35
+ 'occluded': 'no',
36
+ 'date': None,
37
+ 'id': idx,
38
+ 'parts': {'hasparts': None, 'ispartof': None},
39
+ 'polygon': {'pt': pt, 'username': None},
40
+ 'attributes': None}
41
+ objects.append(item)
42
+ data_info = {
43
+ "annotation": {
44
+ 'filename': os.path.basename(image_name),
45
+ 'folder': "",
46
+ 'source': {'sourceImage': None, 'sourceAnnotation': 'Datumaro'},
47
+ 'imagesize': {'nrows': image_size[1], 'ncols': image_size[0]},
48
+ 'object': objects
49
+ }}
50
+ xml_info = xmltodict.unparse(data_info)
51
+ with open(xml_file, 'w') as xml_file:
52
+ xml_file.write(xml_info)
53
+ return data_info
@@ -41,13 +41,13 @@ def parser_annotations(xml_file):
41
41
  def convert_cvat2labelme(anno_dir, image_dir="", vis=False):
42
42
  """
43
43
  将CVAT标注格式(LabelMe 3.0)转换labelme通用格式
44
- :param anno_dire:
45
- :param image_dir:
44
+ :param anno_dir: 标注文件目录,输出json文件与anno_dir同目录
45
+ :param image_dir: 图片文件目录
46
46
  :param vis:
47
47
  :return:
48
48
  """
49
49
  xml_list = file_utils.get_files_lists(anno_dir, postfix=["*.xml"])
50
- for xml_file in xml_list:
50
+ for xml_file in tqdm(xml_list):
51
51
  image_name, annos, w, h = parser_annotations(xml_file)
52
52
  points = [an['points'] for an in annos if len(an['points']) > 0]
53
53
  labels = [an['label'] for an in annos if an['label']]
@@ -0,0 +1,39 @@
1
+ # -*-coding: utf-8 -*-
2
+ """
3
+ @Author : Pan
4
+ @E-mail : 390737991@qq.com
5
+ @Date : 2022-10-12 16:21:55
6
+ @Brief :
7
+ """
8
+ import os
9
+ import numpy as np
10
+ import cv2
11
+ from tqdm import tqdm
12
+ from pybaseutils.dataloader import parser_voc, parser_labelme
13
+ from pybaseutils.converter import build_voc, build_labelme, build_cvat
14
+ from pybaseutils import file_utils, image_utils, json_utils
15
+
16
+
17
+ def convert_labelme2cvat(anno_dir, image_dir="", vis=False):
18
+ """
19
+ 将labelme文件转换为CVAT标注格式(LabelMe 3.0)
20
+ :param anno_dir: 标注文件目录,
21
+ :param image_dir: 图片文件目录,输出xml文件与anno_dir同目录
22
+ :param vis:
23
+ :return:
24
+ """
25
+ image_list = file_utils.get_images_list(image_dir)
26
+ for image_file in tqdm(image_list):
27
+ image_name = os.path.basename(image_file)
28
+ json_file = os.path.join(anno_dir, image_name.split(".")[0] + ".json")
29
+ xml_file = os.path.join(image_dir, image_name.split(".")[0] + ".xml")
30
+ boxes, labels, points, groups = parser_labelme.parser_labelme(json_file, class_dict={})
31
+ image = cv2.imread(image_file)
32
+ h, w = image.shape[:2]
33
+ build_cvat.maker_cvat(xml_file, points, labels, image_name, image_size=[w, h])
34
+
35
+
36
+ if __name__ == "__main__":
37
+ image_dir = "/home/PKing/Downloads/dataset-label/image"
38
+ anno_dir = "/home/PKing/Downloads/dataset-label/json"
39
+ convert_labelme2cvat(image_dir=image_dir, anno_dir=anno_dir, vis=False)
@@ -106,7 +106,7 @@ class Labelme2VOC(object):
106
106
  for i, item in enumerate(objects):
107
107
  label = item["name"]
108
108
  box = item["bndbox"]
109
- img = image_utils.get_bbox_crop(image, bbox=box)
109
+ img = image_utils.get_box_crop(image, box=box)
110
110
  file = os.path.join(out_dir, str(label), "{}_{}_{:0=3d}.jpg".format(image_id, label, i))
111
111
  file_utils.create_file_path(file)
112
112
  cv2.imwrite(file, img)
@@ -328,7 +328,7 @@ def show_image(name, image, boxes, labels, center2bboxes=False, untranspose=Fals
328
328
  boxes = cxcywh2xyxy(boxes)
329
329
  if untranspose:
330
330
  image = image_utils.untranspose(image)
331
- image = image_utils.show_image_bboxes_text(name, image, boxes, labels, delay=waitKey)
331
+ image = image_utils.show_image_boxes_texts(name, image, boxes, labels, delay=waitKey)
332
332
  return image
333
333
 
334
334
 
@@ -244,17 +244,8 @@ def resize_video(video_file, save_video, size=(), start=0, interval=1, vis=True,
244
244
  video_writer.release()
245
245
 
246
246
 
247
- def video_task(frame, **kwargs):
248
- # TODO
249
- delay = kwargs.get("delay", 0)
250
- title = kwargs.get("title", "image")
251
- cv2.imshow(title, frame)
252
- cv2.moveWindow(title, 0, 0)
253
- cv2.waitKey(delay)
254
- return frame
255
-
256
-
257
- def video_capture(video_file: int or str, save_video: str = None, interval=1, task: Callable = video_task, **kwargs):
247
+ def video_capture(video_file: int or str, save_video: str or int = None, interval=1, task: Callable = None,
248
+ vis=True, **kwargs):
258
249
  """
259
250
  读取摄像头或者视频流
260
251
  :param video_file: String 视频文件,如*.avi,*.mp4,...
@@ -267,66 +258,86 @@ def video_capture(video_file: int or str, save_video: str = None, interval=1, ta
267
258
  title: 控制显示窗口名
268
259
  :return:
269
260
  """
270
- # cv2.moveWindow("test", 1000, 100)
271
- video_cap = get_video_capture(video_file)
272
- width, height, num_frames, fps = get_video_info(video_cap)
261
+ video_cap = image_utils.get_video_capture(video_file)
262
+ width, height, num_frames, fps = image_utils.get_video_info(video_cap)
263
+ # video_writer = get_video_writer(save_video, width, height, fps)
273
264
  video_writer = None
274
- # fps = max((fps + interval - 1) // interval, 2)
275
265
  fps = max(fps // interval, 2)
276
- if save_video: video_writer = get_video_writer(save_video, width, height, fps)
277
- # freq = int(fps / detect_freq)
278
- count = 0
266
+ count = int(kwargs.get("start", 0) * fps)
279
267
  while True:
280
- if count % interval == 0:
268
+ # if count % interval == 0:
269
+ if count % interval == 0 and count >= 0:
281
270
  # 设置抽帧的位置
282
271
  if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
283
272
  isSuccess, frame = video_cap.read()
284
273
  if not isSuccess or 0 < num_frames < count: break
285
274
  if task: frame = task(frame, **kwargs)
275
+ height, width = frame.shape[:2]
276
+ if vis: image_utils.cv_show_image(kwargs.get("title", "video"), frame, delay=kwargs.get("delay", 10))
286
277
  if save_video:
278
+ if not video_writer: video_writer = image_utils.get_video_writer(save_video, width, height, fps)
287
279
  video_writer.write(frame)
288
280
  count += 1
289
281
  video_cap.release()
282
+ if video_writer:
283
+ print("save video:{}".format(save_video))
284
+ video_writer.release()
290
285
 
291
286
 
292
- class CVVideo():
293
- def __init__(self):
294
- pass
295
-
296
- def video_capture(self, video_file, save_video=None, interval=1):
297
- """
298
- start capture video
299
- :param video_file: *.avi,*.mp4,...
300
- :param save_video: *.avi
301
- :param interval:
302
- :return:
303
- """
304
- # cv2.moveWindow("test", 1000, 100)
305
- video_cap = get_video_capture(video_file)
306
- width, height, num_frames, fps = get_video_info(video_cap)
307
- video_writer = None
308
- if save_video: video_writer = get_video_writer(save_video, width, height, fps)
309
- # freq = int(fps / detect_freq)
310
- count = 0
311
- while True:
312
- if count % interval == 0:
313
- # 设置抽帧的位置
314
- if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
315
- isSuccess, frame = video_cap.read()
316
- if not isSuccess or 0 < num_frames < count: break
317
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
318
- frame = self.task(frame)
319
- if save_video:
320
- video_writer.write(frame)
321
- count += 1
322
- video_cap.release()
323
-
324
- def task(self, frame):
325
- # TODO
326
- cv2.imshow("image", frame)
327
- cv2.moveWindow("image", 0, 0)
328
- cv2.waitKey(10)
329
- return frame
287
+ def video_iterator(video_file: int or str, save_video: str or int = None, interval=1, task: Callable = None,
288
+ vis=False, **kwargs):
289
+ """
290
+ 读取摄像头或者视频流迭代器
291
+ Usage:
292
+ from pybaseutils.cvutils import video_utils
293
+ video_cap = video_utils.video_iterator(video_file, save_video, start=4, end=10)
294
+ for data_info in video_cap:
295
+ frame = data_info["frame"]
296
+ ...
297
+ :param video_file: String 视频文件,如*.avi,*.mp4,...
298
+ Int 摄像头ID,如0,1,2
299
+ :param save_video: 保存task视频处理后的结果
300
+ :param interval: 抽帧处理间隔,当interval=-1,表示当interval=fps,即一秒一帧
301
+ :param task: 回调函数: def task(frame, **kwargs)
302
+ :param kwargs:回调函数输入参数,
303
+ delay: 控制显示延时,默认10S
304
+ title: 控制显示窗口名,默认video
305
+ start: 开始播放时间,单位S
306
+ end: 结束播放时间,单位S
307
+ speed: 播放速度
308
+ :return: frame, count, w, h, fps =data_info['frame'],data_info['count'],data_info['w'],data_info['h'],data_info['fps']
309
+ """
310
+ video_cap = image_utils.get_video_capture(video_file)
311
+ w, h, num_frames, fps = image_utils.get_video_info(video_cap)
312
+ start = int(kwargs.get("start", 0) * fps)
313
+ end = int(kwargs.get("end", num_frames / fps) * fps)
314
+ end = min(end, num_frames)
315
+ interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
316
+ save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
317
+ count = start
318
+ video_writer = None
319
+ while True:
320
+ # if count % interval == 0:
321
+ if count % interval == 0 and count >= 0:
322
+ # 设置抽帧的位置
323
+ if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
324
+ isSuccess, frame = video_cap.read()
325
+ if not isSuccess or 0 < end < count or frame is None: break
326
+ if task: frame = task(frame, **kwargs)
327
+ data_info = {"frame": frame, "count": count, "w": w, "h": h, "fps": fps}
328
+ # TODO 返回data_info
329
+ yield data_info
330
+ frame = data_info["frame"]
331
+ h, w = frame.shape[:2]
332
+ if vis: image_utils.cv_show_image(kwargs.get("title", "video"), frame, delay=kwargs.get("delay", 10))
333
+ if save_video:
334
+ if not video_writer: video_writer = image_utils.get_video_writer(save_video, w, h, save_fps)
335
+ video_writer.write(frame)
336
+ count += 1
337
+ video_cap.release()
338
+ if video_writer:
339
+ print("save video:{}".format(save_video))
340
+ video_writer.release()
330
341
 
331
342
 
332
343
  def resize_task(frame, **kwargs):
@@ -342,7 +353,7 @@ def rotation_task(frame, **kwargs):
342
353
  angle = angle + angle[::-1]
343
354
  h, w = frame.shape[:2]
344
355
  frame = image_utils.image_rotation(frame, angle=alpha * angle[count % len(angle)])
345
- frame = image_utils.get_bbox_crop(frame, bbox=[0, 70, w, h - 70])
356
+ frame = image_utils.get_box_crop(frame, box=[0, 70, w, h - 70])
346
357
  return frame
347
358
 
348
359
 
@@ -155,6 +155,7 @@ class LabelMeDataset(Dataset):
155
155
  image_ids = [os.path.basename(f) for f in image_ids]
156
156
  # assert os.path.exists(image_dir), Exception("no directory:{}".format(image_dir))
157
157
  # assert os.path.exists(anno_dir), Exception("no directory:{}".format(anno_dir))
158
+ assert len(image_ids) > 0, f"image_dir={image_dir} is empty"
158
159
  return data_root, anno_dir, image_dir, image_ids
159
160
 
160
161
  def __getitem__(self, index):
@@ -380,12 +381,12 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
380
381
  return bboxes, labels, points, groups
381
382
 
382
383
 
383
- def show_target_image(image, bboxes, labels, points):
384
+ def show_target_image(image, bboxes, labels, points, color=()):
384
385
  # image = image_utils.draw_image_bboxes_text(image, bboxes, labels, color=(255, 0, 0),
385
386
  # thickness=2, fontScale=1.2, drawType="chinese")
386
387
  # image = image_utils.draw_landmark(image, points, color=(0, 255, 0))
387
388
  # image = image_utils.draw_key_point_in_image(image, points)
388
- image = image_utils.draw_image_contours(image, points, labels)
389
+ image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=1)
389
390
  image_utils.cv_show_image("det", image)
390
391
 
391
392
 
@@ -147,6 +147,7 @@ class VOCDataset(Dataset):
147
147
 
148
148
  files = self.get_file_list(image_dir, postfix=file_utils.IMG_POSTFIX, basename=False)
149
149
  self.postfix = os.path.basename(files[0]).split(".")[-1] if files else "jpg"
150
+ assert len(image_ids) > 0, f"image_dir={image_dir} is empty"
150
151
  return data_root, anno_dir, image_dir, image_ids
151
152
 
152
153
  def convert_target(self, boxes, labels):
@@ -204,6 +204,7 @@ class YOLODataset(Dataset):
204
204
  image_ids = [os.path.basename(f) for f in image_ids]
205
205
  # assert os.path.exists(image_dir), Exception("no directory:{}".format(image_dir))
206
206
  # assert os.path.exists(anno_dir), Exception("no directory:{}".format(anno_dir))
207
+ assert len(image_ids) > 0, f"image_dir={image_dir} is empty"
207
208
  return data_root, anno_dir, image_dir, image_ids
208
209
 
209
210
  def __getitem__(self, index):
@@ -122,7 +122,7 @@ def draw_font(text, style="楷体", scale=1.0, size=20, c1=(255, 255, 255), c2=(
122
122
  if np.sum(image) < 1: return None
123
123
  mask = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
124
124
  box = image_utils.get_mask_boundrect_cv(mask, binarize=True, shift=10)
125
- image = image_utils.get_bbox_crop(image, box)
125
+ image = image_utils.get_box_crop(image, box)
126
126
  image = image_utils.resize_image_padding(image, size=(size, size), color=(0, 0, 0))
127
127
  else:
128
128
  image = image_utils.create_image(shape=(size, size, 3), color=c2)