pybaseutils 2.0.4__tar.gz → 2.0.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/PKG-INFO +1 -1
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_cvat2labelme.py +15 -7
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2yolo.py +3 -3
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_yolo2voc.py +1 -1
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_labelme.py +7 -4
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/image_utils.py +24 -1
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/plot_roc.py +58 -5
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/PKG-INFO +1 -1
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/SOURCES.txt +5 -1
- pybaseutils-2.0.6/test_py/aije/action_dataset.py +86 -0
- pybaseutils-2.0.6/test_py/aije/convert_cvat2labelme.py +21 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_labelme_crop.py +3 -2
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_voc_crop.py +7 -7
- pybaseutils-2.0.6/test_py/aije/video_convertor.py +27 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_cvat2labelme.py +5 -3
- pybaseutils-2.0.6/test_py/converter/get_pair_data.py +57 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo1.py +18 -8
- pybaseutils-2.0.6/test_py/demo2.py +29 -0
- pybaseutils-2.0.6/test_py/demo_kpts.py +68 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_lableme_vis.py +12 -3
- pybaseutils-2.0.4/test_py/aije/video_demo.py +0 -47
- pybaseutils-2.0.4/test_py/demo2.py +0 -25
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/LICENCE +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/README.md +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/cvutils/video_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/file_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/log.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/logger.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/augment_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/setup.cfg +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/setup.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/WebCrawler/search_image.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/main.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/class_names.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo3.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_video.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/edit_distance/text_utils.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/flask_demo/func.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/flask_demo/server.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/performance.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/base.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/component.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/main.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/registry/register.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.0.4 → pybaseutils-2.0.6}/test_py/test_fr/idcardocr.py +0 -0
|
@@ -38,17 +38,21 @@ def parser_annotations(xml_file):
|
|
|
38
38
|
return filename, annos, width, height
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
def convert_cvat2labelme(anno_dir, image_dir="", thickness=1, fontScale=1.0, vis=False):
|
|
41
|
+
def convert_cvat2labelme(anno_dir, image_dir="", out_dir="", thickness=1, fontScale=1.0, vis=False):
|
|
42
42
|
"""
|
|
43
43
|
将CVAT标注格式(LabelMe 3.0)转换labelme通用格式
|
|
44
|
-
:param anno_dir:
|
|
44
|
+
:param anno_dir: 标注文件目录,默认输出json文件与anno_dir同目录
|
|
45
45
|
:param image_dir: 图片文件目录
|
|
46
|
+
:param out_dir: 输出labelme *.json文件目录
|
|
46
47
|
:param vis:
|
|
47
48
|
:return:
|
|
48
49
|
"""
|
|
50
|
+
if not out_dir: out_dir = os.path.join(os.path.dirname(anno_dir), "json")
|
|
49
51
|
xml_list = file_utils.get_files_lists(anno_dir, postfix=["*.xml"])
|
|
50
52
|
for xml_file in tqdm(xml_list):
|
|
51
53
|
image_name, annos, w, h = parser_annotations(xml_file)
|
|
54
|
+
image_id = os.path.basename(xml_file).split(".")[0]
|
|
55
|
+
image_name = "{}.{}".format(image_id, image_name.split(".")[1])
|
|
52
56
|
points = [an['points'] for an in annos if len(an['points']) > 0]
|
|
53
57
|
labels = [an['label'] for an in annos if an['label']]
|
|
54
58
|
if len(points) == 0 or len(labels) == 0:
|
|
@@ -59,14 +63,18 @@ def convert_cvat2labelme(anno_dir, image_dir="", thickness=1, fontScale=1.0, vis
|
|
|
59
63
|
image = cv2.imread(image_file)
|
|
60
64
|
h, w = image.shape[:2]
|
|
61
65
|
if vis:
|
|
62
|
-
|
|
66
|
+
print(image_file, "labels:{}".format(labels))
|
|
67
|
+
image = image_utils.draw_image_contours(image, points, texts=labels, thickness=thickness,
|
|
68
|
+
fontScale=fontScale)
|
|
63
69
|
image_utils.cv_show_image("det", image)
|
|
64
70
|
image_id = image_name.split(".")[0]
|
|
65
|
-
json_file = os.path.join(
|
|
71
|
+
json_file = os.path.join(out_dir, f"{image_id}.json")
|
|
66
72
|
build_labelme.maker_labelme(json_file, points, labels, image_name, image_size=[w, h], image_bs64=None)
|
|
67
73
|
|
|
68
74
|
|
|
69
75
|
if __name__ == "__main__":
|
|
70
|
-
image_dir = "/home/PKing/
|
|
71
|
-
anno_dir = image_dir
|
|
72
|
-
|
|
76
|
+
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/aije-action-train-v02/JPEGImages"
|
|
77
|
+
anno_dir = os.path.join(os.path.dirname(image_dir), "xml")
|
|
78
|
+
json_dir = os.path.join(os.path.dirname(image_dir), "json")
|
|
79
|
+
convert_cvat2labelme.convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, out_dir=json_dir,
|
|
80
|
+
thickness=1, fontScale=2.0, vis=True)
|
|
@@ -80,7 +80,7 @@ def convert_voc2yolo_file(filename, out_text_dir, out_image_dir=None, class_name
|
|
|
80
80
|
format = "jpg"
|
|
81
81
|
newname = "{}.{}".format(image_id, format)
|
|
82
82
|
text_path = file_utils.create_dir(out_text_dir, None, "{}.txt".format(image_id))
|
|
83
|
-
labels = np.asarray(labels).astype(np.
|
|
83
|
+
labels = np.asarray(labels).astype(np.int32).reshape(-1)
|
|
84
84
|
contents = create_yolo_dets(bboxes, labels, width=w, height=h)
|
|
85
85
|
file_utils.write_data(text_path, contents)
|
|
86
86
|
if out_image_dir:
|
|
@@ -131,7 +131,7 @@ def convert_voc2yolo(data_root, out_text_dir, out_image_dir=None, class_name=Non
|
|
|
131
131
|
format = "jpg"
|
|
132
132
|
newname = "{}.{}".format(image_id, format)
|
|
133
133
|
text_path = file_utils.create_dir(out_text_dir, None, "{}.txt".format(image_id))
|
|
134
|
-
labels = np.asarray(labels).astype(np.
|
|
134
|
+
labels = np.asarray(labels).astype(np.int32).reshape(-1)
|
|
135
135
|
contents = create_yolo_dets(bboxes, labels, width=w, height=h)
|
|
136
136
|
file_utils.write_data(text_path, contents, split=" ")
|
|
137
137
|
if out_image_dir:
|
|
@@ -183,7 +183,7 @@ def convert_voc2yolo_segment(data_root, out_text_dir, out_image_dir=None, class_
|
|
|
183
183
|
format = "jpg"
|
|
184
184
|
newname = "{}.{}".format(image_id, format)
|
|
185
185
|
text_path = file_utils.create_dir(out_text_dir, None, "{}.txt".format(image_id))
|
|
186
|
-
labels = np.asarray(labels).astype(np.
|
|
186
|
+
labels = np.asarray(labels).astype(np.int32).reshape(-1)
|
|
187
187
|
contents = create_yolo_segs(bboxes, labels, width=w, height=h)
|
|
188
188
|
file_utils.write_data(text_path, contents, split=" ")
|
|
189
189
|
if out_image_dir:
|
|
@@ -50,7 +50,7 @@ def convert_yolo2voc(filename, out_xml_dir=None, out_image_dir=None, class_name=
|
|
|
50
50
|
format = "jpg"
|
|
51
51
|
newname = "{}.{}".format(image_id, format)
|
|
52
52
|
xml_path = file_utils.create_dir(out_xml_dir, None, "{}.xml".format(image_id))
|
|
53
|
-
labels = np.asarray(labels).astype(np.
|
|
53
|
+
labels = np.asarray(labels).astype(np.int32).reshape(-1)
|
|
54
54
|
objects = build_voc.create_objects(bboxes, labels, keypoints=None, class_name=class_name)
|
|
55
55
|
build_voc.write_voc_xml_objects(newname, image_shape, objects, xml_path)
|
|
56
56
|
if out_image_dir:
|
|
@@ -107,8 +107,7 @@ class LabelMeDataset(Dataset):
|
|
|
107
107
|
"""
|
|
108
108
|
print("Please wait, it's in checking")
|
|
109
109
|
dst_ids = []
|
|
110
|
-
|
|
111
|
-
# image_ids = image_ids[100:]
|
|
110
|
+
class_name = []
|
|
112
111
|
for image_id in tqdm(image_ids):
|
|
113
112
|
image_file, anno_file, image_id = self.get_image_anno_file(image_id)
|
|
114
113
|
if not os.path.exists(anno_file):
|
|
@@ -122,6 +121,10 @@ class LabelMeDataset(Dataset):
|
|
|
122
121
|
if len(label) == 0:
|
|
123
122
|
continue
|
|
124
123
|
dst_ids.append(image_id)
|
|
124
|
+
class_name += label
|
|
125
|
+
if self.class_name is None:
|
|
126
|
+
class_name = sorted(list(set(class_name)))
|
|
127
|
+
self.class_name, self.class_dict = self.parser_classes(class_name)
|
|
125
128
|
print("have nums image:{},legal image:{}".format(len(image_ids), len(dst_ids)))
|
|
126
129
|
return dst_ids
|
|
127
130
|
|
|
@@ -381,12 +384,12 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
|
|
|
381
384
|
return bboxes, labels, points, groups
|
|
382
385
|
|
|
383
386
|
|
|
384
|
-
def show_target_image(image, bboxes, labels, points, color=()):
|
|
387
|
+
def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
|
|
385
388
|
# image = image_utils.draw_image_bboxes_text(image, bboxes, labels, color=(255, 0, 0),
|
|
386
389
|
# thickness=2, fontScale=1.2, drawType="chinese")
|
|
387
390
|
# image = image_utils.draw_landmark(image, points, color=(0, 255, 0))
|
|
388
391
|
# image = image_utils.draw_key_point_in_image(image, points)
|
|
389
|
-
image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=
|
|
392
|
+
image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
|
|
390
393
|
image_utils.cv_show_image("det", image)
|
|
391
394
|
|
|
392
395
|
|
|
@@ -2452,7 +2452,7 @@ def draw_image_contours(image, contours: List[np.ndarray], texts=[], color=(), a
|
|
|
2452
2452
|
"""
|
|
2453
2453
|
for i in range(0, len(contours)):
|
|
2454
2454
|
c = color if color else color_table[i + 1]
|
|
2455
|
-
t = texts[i] if texts else ""
|
|
2455
|
+
t = str(texts[i]) if texts else ""
|
|
2456
2456
|
p = np.asarray(contours[i], dtype=np.int32)
|
|
2457
2457
|
b = (min(p[:, 0]), min(p[:, 1]), max(p[:, 0]), max(p[:, 1]))
|
|
2458
2458
|
if len(p.shape) == 2: p = [p]
|
|
@@ -2482,6 +2482,29 @@ def draw_mask_contours(contours: List[np.ndarray], size, value=255):
|
|
|
2482
2482
|
return mask
|
|
2483
2483
|
|
|
2484
2484
|
|
|
2485
|
+
def contours_interpolation(contours, n=1000):
|
|
2486
|
+
"""
|
|
2487
|
+
对图像轮廓或者对直线进行线性差值,来源于ultralytics/utils/ops.py
|
|
2488
|
+
轮廓插值,线性插值,直线插值
|
|
2489
|
+
Inputs a list of contours (n,2) and returns a list of contours (n,2) up-sampled to n points each.
|
|
2490
|
+
|
|
2491
|
+
Args:
|
|
2492
|
+
contours (list): a list of (n,2) arrays, where n is the number of points in the segment.
|
|
2493
|
+
n (int): number of points to resample the segment to. Defaults to 1000
|
|
2494
|
+
|
|
2495
|
+
Returns:
|
|
2496
|
+
contours (list): the resampled contours.
|
|
2497
|
+
"""
|
|
2498
|
+
for i, s in enumerate(contours):
|
|
2499
|
+
s = np.concatenate((s, s[0:1, :]), axis=0)
|
|
2500
|
+
x = np.linspace(0, len(s) - 1, n)
|
|
2501
|
+
xp = np.arange(len(s))
|
|
2502
|
+
contours[i] = (
|
|
2503
|
+
np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)], dtype=np.float32).reshape(2, -1).T
|
|
2504
|
+
) # segment xy
|
|
2505
|
+
return contours
|
|
2506
|
+
|
|
2507
|
+
|
|
2485
2508
|
def get_mask_boundrect_cv(mask, binarize=False, shift=0):
|
|
2486
2509
|
"""
|
|
2487
2510
|
获得mask的最大外接矩形框(其速度比get_mask_boundrect快2倍左右)
|
|
@@ -39,9 +39,9 @@ def plot_roc_curve(true_labels, pred_scores, vis=True):
|
|
|
39
39
|
# 绘制ROC曲线
|
|
40
40
|
if vis:
|
|
41
41
|
plt_roc_curve([fpr], [tpr], [roc_auc], names=[""])
|
|
42
|
-
print("FPR :{}".format(fpr))
|
|
43
|
-
print("TPR :{}".format(tpr))
|
|
44
|
-
print("Threshold :{}".format(threshold))
|
|
42
|
+
# print("FPR :{}".format(fpr))
|
|
43
|
+
# print("TPR :{}".format(tpr))
|
|
44
|
+
# print("Threshold :{}".format(threshold))
|
|
45
45
|
print("AUC(ROC) :{}".format(roc_auc))
|
|
46
46
|
print("best_threshold:{} ".format(threshold[optimal_index]))
|
|
47
47
|
return fpr, tpr, roc_auc, threshold, optimal_index
|
|
@@ -134,8 +134,61 @@ def custom_roc_curve(y_true, y_score):
|
|
|
134
134
|
plt.show()
|
|
135
135
|
|
|
136
136
|
|
|
137
|
+
def get_best_accuracy(true_labels, pred_scores, threshold=(0, 1.0, 0.05), vis=False):
|
|
138
|
+
"""
|
|
139
|
+
计算最佳准确率和阈值
|
|
140
|
+
:param true_labels:
|
|
141
|
+
:param pred_scores:
|
|
142
|
+
:param vis:
|
|
143
|
+
:return: best_acc, best_th
|
|
144
|
+
"""
|
|
145
|
+
true_labels, pred_scores = np.asarray(true_labels), np.asarray(pred_scores)
|
|
146
|
+
threshold = np.arange(threshold[0], threshold[1], threshold[2])
|
|
147
|
+
acc_list = []
|
|
148
|
+
for th in threshold:
|
|
149
|
+
pred_labels = np.asarray(pred_scores > th, dtype=np.int32)
|
|
150
|
+
acc = metrics.accuracy_score(y_true=true_labels, y_pred=pred_labels)
|
|
151
|
+
acc_list.append(acc)
|
|
152
|
+
index = np.argmax(acc_list)
|
|
153
|
+
best_th = threshold[index]
|
|
154
|
+
best_acc = acc_list[index]
|
|
155
|
+
if vis:
|
|
156
|
+
print("best threshold :{}".format(best_th))
|
|
157
|
+
print("best Accuracy :{}".format(best_acc))
|
|
158
|
+
plt_curve(x=threshold, y=acc_list, xlabel="threshold", ylabel="Accuracy",
|
|
159
|
+
line=f"Acc={best_acc:1.3f}", title="", grid=True)
|
|
160
|
+
return best_acc, best_th
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def plt_curve(x, y, line="", xlabel="", ylabel="", title="", grid=True):
|
|
164
|
+
"""
|
|
165
|
+
绘制PR-threshold曲线
|
|
166
|
+
:param x: Precision
|
|
167
|
+
:param recall: Recall
|
|
168
|
+
:param y
|
|
169
|
+
:param title:曲线名称
|
|
170
|
+
:return:
|
|
171
|
+
"""
|
|
172
|
+
lw = 2
|
|
173
|
+
plt.figure(figsize=(10, 10))
|
|
174
|
+
colors = ["b", "r", "c", "m", "g", "y", "k", "w"]
|
|
175
|
+
plt.plot(x, y, color=colors[0], lw=lw, label=line)
|
|
176
|
+
plt.xlim([0.0, 1.05])
|
|
177
|
+
plt.ylim([0.0, 1.05])
|
|
178
|
+
# 设置横纵坐标的名称以及对应字体格式
|
|
179
|
+
font = {'weight': 'normal', 'size': 20}
|
|
180
|
+
plt.xlabel(xlabel, font)
|
|
181
|
+
plt.ylabel(ylabel, font)
|
|
182
|
+
plt.title(title, font)
|
|
183
|
+
plt.legend(loc="lower right") # "upper right"
|
|
184
|
+
# plt.legend(loc="upper right")#"upper right"
|
|
185
|
+
plt.grid(grid) # 显示网格;
|
|
186
|
+
plt.show()
|
|
187
|
+
|
|
188
|
+
|
|
137
189
|
if __name__ == "__main__":
|
|
138
190
|
true_labels = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] # 真实类别
|
|
139
|
-
pred_scores = [0.1, 0.
|
|
191
|
+
pred_scores = [0.1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] # 预测类别分数
|
|
140
192
|
# pred_scores = [0.11, 0.21, 0.71, 0.31, 0.41, 0.51, 0.21, 0.71, 0.81, 0.91] # 预测类别分数
|
|
141
|
-
plot_roc_curve(true_labels, pred_scores)
|
|
193
|
+
# plot_roc_curve(true_labels, pred_scores)
|
|
194
|
+
print(get_best_accuracy(true_labels, pred_scores, vis=True))
|
|
@@ -130,6 +130,7 @@ test_py/demo_get_file_list.py
|
|
|
130
130
|
test_py/demo_gif.py
|
|
131
131
|
test_py/demo_gif_video.py
|
|
132
132
|
test_py/demo_image_crop.py
|
|
133
|
+
test_py/demo_kpts.py
|
|
133
134
|
test_py/demo_labelme.py
|
|
134
135
|
test_py/demo_labelme_crop.py
|
|
135
136
|
test_py/demo_lableme_vis.py
|
|
@@ -155,9 +156,11 @@ test_py/WebCrawler/__init__.py
|
|
|
155
156
|
test_py/WebCrawler/search_image.py
|
|
156
157
|
test_py/WebCrawler/search_image_for_baidu.py
|
|
157
158
|
test_py/aije/__init__.py
|
|
159
|
+
test_py/aije/action_dataset.py
|
|
158
160
|
test_py/aije/build_cython.py
|
|
159
161
|
test_py/aije/build_pyarmor.py
|
|
160
162
|
test_py/aije/build_service.py
|
|
163
|
+
test_py/aije/convert_cvat2labelme.py
|
|
161
164
|
test_py/aije/convert_labelme2coco.py
|
|
162
165
|
test_py/aije/convert_labelme2voc.py
|
|
163
166
|
test_py/aije/copy_move.py
|
|
@@ -165,7 +168,7 @@ test_py/aije/demo_labelme_crop.py
|
|
|
165
168
|
test_py/aije/demo_video_aije.py
|
|
166
169
|
test_py/aije/demo_voc_crop.py
|
|
167
170
|
test_py/aije/demo_voc_vis.py
|
|
168
|
-
test_py/aije/
|
|
171
|
+
test_py/aije/video_convertor.py
|
|
169
172
|
test_py/audio/__init__.py
|
|
170
173
|
test_py/audio/demo.py
|
|
171
174
|
test_py/audio/main.py
|
|
@@ -198,6 +201,7 @@ test_py/converter/convert_labelme2voc.py
|
|
|
198
201
|
test_py/converter/convert_voc2labelme.py
|
|
199
202
|
test_py/converter/fatigue_driving.py
|
|
200
203
|
test_py/converter/fdd_dataset.py
|
|
204
|
+
test_py/converter/get_pair_data.py
|
|
201
205
|
test_py/converter/handpose2coco.py
|
|
202
206
|
test_py/converter/insects_for_aichallenger.py
|
|
203
207
|
test_py/converter/tt100k_utils.py
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail : 390737991@qq.com
|
|
5
|
+
@Date : 2022-11-29 18:11:47
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import cv2
|
|
10
|
+
from tqdm import tqdm
|
|
11
|
+
from pybaseutils.dataloader import parser_labelme
|
|
12
|
+
from pybaseutils import image_utils, file_utils
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def save_object_crops(data_info, out_dir, class_name=None, scale=[], square=False,
|
|
16
|
+
padding=False, min_size=20 * 20 * 3, flag="", vis=False):
|
|
17
|
+
"""
|
|
18
|
+
对VOC的数据目标进行裁剪
|
|
19
|
+
:param image:
|
|
20
|
+
:param out_dir:
|
|
21
|
+
:param bboxes:
|
|
22
|
+
:param labels:
|
|
23
|
+
:param image_id:
|
|
24
|
+
:param class_name:
|
|
25
|
+
:param scale:
|
|
26
|
+
:param square:
|
|
27
|
+
:param padding:
|
|
28
|
+
:param flag:
|
|
29
|
+
:param vis:
|
|
30
|
+
:return:
|
|
31
|
+
"""
|
|
32
|
+
image, points, boxes, labels = data_info["image"], data_info["points"], data_info["boxes"], data_info["labels"]
|
|
33
|
+
if len(boxes) == 0: return
|
|
34
|
+
image_file = data_info["image_file"]
|
|
35
|
+
h, w = image.shape[:2]
|
|
36
|
+
image_id = os.path.basename(image_file).split(".")[0]
|
|
37
|
+
if square:
|
|
38
|
+
boxes = image_utils.get_square_boxes(boxes, use_max=True, baseline=-1)
|
|
39
|
+
if scale:
|
|
40
|
+
boxes = image_utils.extend_xyxy(boxes, scale=scale)
|
|
41
|
+
if padding:
|
|
42
|
+
crops = image_utils.get_bboxes_crop_padding(image, boxes)
|
|
43
|
+
else:
|
|
44
|
+
crops = image_utils.get_bboxes_crop(image, boxes)
|
|
45
|
+
if vis:
|
|
46
|
+
m = image_utils.draw_image_bboxes_labels(image.copy(), boxes, labels, class_name=class_name,
|
|
47
|
+
thickness=2, fontScale=0.8, drawType="chinese")
|
|
48
|
+
image_utils.cv_show_image("image", m, use_rgb=False, delay=0)
|
|
49
|
+
for i, img in enumerate(crops):
|
|
50
|
+
if img.size < min_size: continue
|
|
51
|
+
name = class_name[int(labels[i])] if class_name else labels[i]
|
|
52
|
+
if out_dir:
|
|
53
|
+
file_name = "{}_{:0=4d}_{}.jpg".format(image_id, i, flag) if flag else "{}_{:0=4d}.jpg".format(image_id, i)
|
|
54
|
+
img_file = file_utils.create_dir(out_dir, name, file_name)
|
|
55
|
+
cv2.imwrite(img_file, img)
|
|
56
|
+
if vis: image_utils.cv_show_image("crop", img, use_rgb=False, delay=0)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
if __name__ == "__main__":
|
|
60
|
+
"""
|
|
61
|
+
对VOC的数据目标进行裁剪
|
|
62
|
+
室内:['主杆', '从此进出标示牌', '其他鞋', '吊物绳', '在此工作标示牌', '垫子', '安全带', '安全帽', '安全绳',
|
|
63
|
+
'导线头', '尖嘴钳', '工具袋', '手', '扳手', '抹布', '未穿工作服','柱式绝缘子', '止步高压危险标示牌',
|
|
64
|
+
'绝缘手套', '绝缘鞋', '脚扣', '螺丝', '身穿工作服', '遮拦杆', '铁架', '铝扎线']
|
|
65
|
+
室外: []
|
|
66
|
+
"""
|
|
67
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-det/aije-action-train-v01/json"
|
|
68
|
+
class_name = None # 室内
|
|
69
|
+
out_dir = os.path.join(os.path.dirname(anno_dir), "crops")
|
|
70
|
+
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
71
|
+
data_root=None,
|
|
72
|
+
anno_dir=anno_dir,
|
|
73
|
+
image_dir=None,
|
|
74
|
+
class_name=class_name,
|
|
75
|
+
check=False,
|
|
76
|
+
phase="val",
|
|
77
|
+
shuffle=False)
|
|
78
|
+
print("have num:{}".format(len(dataset)))
|
|
79
|
+
class_name = dataset.class_name
|
|
80
|
+
scale = [2.0, 2.0]
|
|
81
|
+
flag = str(scale[0]).replace(".", "p")
|
|
82
|
+
flag = None
|
|
83
|
+
# scale = None
|
|
84
|
+
for i in tqdm(range(len(dataset))):
|
|
85
|
+
data_info = dataset.__getitem__(i)
|
|
86
|
+
save_object_crops(data_info, out_dir, class_name=class_name, scale=scale, flag=flag, vis=False)
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
|
13
|
+
from pybaseutils.converter import build_voc, build_labelme, convert_cvat2labelme
|
|
14
|
+
from pybaseutils import file_utils, image_utils, json_utils
|
|
15
|
+
|
|
16
|
+
if __name__ == "__main__":
|
|
17
|
+
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/aije-action-train-v01/JPEGImages"
|
|
18
|
+
anno_dir = os.path.join(os.path.dirname(image_dir), "xml")
|
|
19
|
+
json_dir = os.path.join(os.path.dirname(image_dir), "json")
|
|
20
|
+
convert_cvat2labelme.convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, out_dir=json_dir,
|
|
21
|
+
thickness=1, fontScale=2.0, vis=False)
|
|
@@ -67,10 +67,11 @@ if __name__ == "__main__":
|
|
|
67
67
|
# anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v9/json"
|
|
68
68
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v0/json"
|
|
69
69
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det-fix/dataset-v12/json"
|
|
70
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-det/aije-action-train-v20/json"
|
|
70
71
|
# anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v10/json"
|
|
71
72
|
# anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-person-coco/json"
|
|
72
|
-
class_name = ['手', '绝缘手套', '手穿绝缘手套', '棉纱手套', '手穿棉纱手套']
|
|
73
|
-
|
|
73
|
+
# class_name = ['手', '绝缘手套', '手穿绝缘手套', '棉纱手套', '手穿棉纱手套']
|
|
74
|
+
class_name = None # 室内
|
|
74
75
|
out_dir = os.path.join(os.path.dirname(anno_dir), "crops")
|
|
75
76
|
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
76
77
|
data_root=None,
|
|
@@ -12,13 +12,13 @@ from pybaseutils.dataloader import parser_voc
|
|
|
12
12
|
from pybaseutils import image_utils, file_utils
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def save_object_crops(image, out_dir,
|
|
15
|
+
def save_object_crops(image, out_dir, boxes, labels, image_id, class_name=None,
|
|
16
16
|
scale=[], square=False, padding=False, flag="", vis=False):
|
|
17
17
|
"""
|
|
18
18
|
对VOC的数据目标进行裁剪
|
|
19
19
|
:param image:
|
|
20
20
|
:param out_dir:
|
|
21
|
-
:param
|
|
21
|
+
:param boxes:
|
|
22
22
|
:param labels:
|
|
23
23
|
:param image_id:
|
|
24
24
|
:param class_name:
|
|
@@ -31,15 +31,15 @@ def save_object_crops(image, out_dir, bboxes, labels, image_id, class_name=None,
|
|
|
31
31
|
"""
|
|
32
32
|
image_id = image_id.split(".")[0]
|
|
33
33
|
if square:
|
|
34
|
-
|
|
34
|
+
boxes = image_utils.get_square_boxes(boxes, use_max=True, baseline=-1)
|
|
35
35
|
if scale:
|
|
36
|
-
|
|
36
|
+
boxes = image_utils.extend_xyxy(boxes, scale=scale)
|
|
37
37
|
if padding:
|
|
38
|
-
crops = image_utils.get_bboxes_crop_padding(image,
|
|
38
|
+
crops = image_utils.get_bboxes_crop_padding(image, boxes)
|
|
39
39
|
else:
|
|
40
|
-
crops = image_utils.get_bboxes_crop(image,
|
|
40
|
+
crops = image_utils.get_bboxes_crop(image, boxes)
|
|
41
41
|
if vis:
|
|
42
|
-
m = image_utils.draw_image_bboxes_labels(image.copy(),
|
|
42
|
+
m = image_utils.draw_image_bboxes_labels(image.copy(), boxes, labels, class_name=class_name,
|
|
43
43
|
thickness=2, fontScale=0.8, drawType="custom")
|
|
44
44
|
image_utils.cv_show_image("image", m, use_rgb=False, delay=0)
|
|
45
45
|
for i, img in enumerate(crops):
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2023-08-25 17:42:55
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import cv2
|
|
10
|
+
import numpy as np
|
|
11
|
+
from tqdm import tqdm
|
|
12
|
+
from pybaseutils.cvutils import video_utils
|
|
13
|
+
from pybaseutils import image_utils, file_utils
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def video_converter(inp_dir, out_dir):
|
|
17
|
+
files = file_utils.get_files_list(inp_dir, postfix=["*.dav"])
|
|
18
|
+
for video_file in tqdm(files):
|
|
19
|
+
save_video = file_utils.create_dir(out_dir, None, os.path.basename(video_file))
|
|
20
|
+
save_video = save_video.replace(".dav", ".mp4")
|
|
21
|
+
video_utils.video2video(video_file, save_video, interval=1, vis=False)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == '__main__':
|
|
25
|
+
inp_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/江门四维数据/江门四维2024-08-06/NVR录像文件"
|
|
26
|
+
out_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/江门四维数据/江门四维2024-08-06/MP4录像文件"
|
|
27
|
+
video_converter(inp_dir, out_dir)
|
|
@@ -14,6 +14,8 @@ from pybaseutils.converter import build_voc, build_labelme, convert_cvat2labelme
|
|
|
14
14
|
from pybaseutils import file_utils, image_utils, json_utils
|
|
15
15
|
|
|
16
16
|
if __name__ == "__main__":
|
|
17
|
-
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-
|
|
18
|
-
anno_dir = "
|
|
19
|
-
|
|
17
|
+
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/aije-action-train-v02/JPEGImages"
|
|
18
|
+
anno_dir = os.path.join(os.path.dirname(image_dir), "xml")
|
|
19
|
+
json_dir = os.path.join(os.path.dirname(image_dir), "json")
|
|
20
|
+
convert_cvat2labelme.convert_cvat2labelme(image_dir=image_dir, anno_dir=anno_dir, out_dir=json_dir,
|
|
21
|
+
thickness=1, fontScale=2.0, vis=True)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-08-24 11:05:52
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import numpy as np
|
|
10
|
+
import itertools
|
|
11
|
+
from pybaseutils import file_utils, image_utils
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_combinations_pair_data(image_dir, pair_num=0):
|
|
15
|
+
"""
|
|
16
|
+
获得图片对数据
|
|
17
|
+
:param image_dir:
|
|
18
|
+
:param pair_num:
|
|
19
|
+
:return:
|
|
20
|
+
"""
|
|
21
|
+
max_nums = int(pair_num / 2)
|
|
22
|
+
image_list = file_utils.get_files_lists(image_dir)
|
|
23
|
+
image_list = file_utils.get_sub_list(image_list, dirname=image_dir)
|
|
24
|
+
nums = len(image_list)
|
|
25
|
+
print("have {} images and {} combinations".format(nums, nums * (nums - 1) / 2))
|
|
26
|
+
pairs = []
|
|
27
|
+
for paths in itertools.combinations(image_list, 2):
|
|
28
|
+
file1, file2 = paths
|
|
29
|
+
label1 = file1.split(os.sep)[0]
|
|
30
|
+
label2 = file2.split(os.sep)[0]
|
|
31
|
+
if label1 == label2:
|
|
32
|
+
pairs.append([file1, file2, 1])
|
|
33
|
+
else:
|
|
34
|
+
pairs.append([file1, file2, 0])
|
|
35
|
+
pairs = np.asarray(pairs)
|
|
36
|
+
pairs = pairs[np.lexsort(pairs.T)]
|
|
37
|
+
pair0 = pairs[pairs[:, -1] == "0", :]
|
|
38
|
+
pair1 = pairs[pairs[:, -1] == "1", :]
|
|
39
|
+
nums1 = len(pair1)
|
|
40
|
+
nums0 = len(pair0)
|
|
41
|
+
if pair_num < 0: max_nums = nums1
|
|
42
|
+
if max_nums > nums1:
|
|
43
|
+
raise Exception("pair_nums({}) must be less than num_pair_issame_1({})".format(max_nums, nums1))
|
|
44
|
+
index_0 = np.random.permutation(nums0)[:max_nums] # 打乱后的行号
|
|
45
|
+
index_1 = np.random.permutation(nums1)[:max_nums] # 打乱后的行号
|
|
46
|
+
pair0 = pair0[index_0, :] # 获取打乱后的训练数据
|
|
47
|
+
pair1 = pair1[index_1, :] # 获取打乱后的训练数据
|
|
48
|
+
pairs = np.concatenate([pair0, pair1], axis=0).tolist()
|
|
49
|
+
print("have {} pairs,pair0 nums:{},pair1 nums:{}".format(len(pairs), len(pair0), len(pair1)))
|
|
50
|
+
return pairs
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == '__main__':
|
|
54
|
+
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm/test-v2/images"
|
|
55
|
+
pairs_file = os.path.join(image_dir, "pairs.txt")
|
|
56
|
+
pairs = get_combinations_pair_data(image_dir, pair_num=10000)
|
|
57
|
+
file_utils.write_data(pairs_file, pairs)
|
|
@@ -9,6 +9,7 @@ import os
|
|
|
9
9
|
import cv2
|
|
10
10
|
import numpy as np
|
|
11
11
|
import random
|
|
12
|
+
import json
|
|
12
13
|
from typing import Dict
|
|
13
14
|
from tqdm import tqdm
|
|
14
15
|
from pybaseutils import image_utils, file_utils, json_utils, base64_utils, time_utils
|
|
@@ -32,14 +33,23 @@ class MultiViewer(object):
|
|
|
32
33
|
return "exit"
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
class Promote():
|
|
37
|
+
def __init__(self, promote):
|
|
38
|
+
self.promote = file_utils.read_data(promote, split=None)
|
|
39
|
+
print("promote:{}".format(self.promote))
|
|
40
|
+
|
|
41
|
+
def __len__(self):
|
|
42
|
+
return len(self.promote)
|
|
43
|
+
|
|
44
|
+
def __getitem__(self, index):
|
|
45
|
+
data: str = self.promote[random.randint(0, len(self.promote) - 1)]
|
|
46
|
+
data = data.format("ddd")
|
|
47
|
+
return data
|
|
42
48
|
|
|
43
49
|
|
|
44
50
|
if __name__ == '__main__':
|
|
45
|
-
|
|
51
|
+
file = "/home/PKing/nasdata/tmp/tmp/Natural/图片描述.json"
|
|
52
|
+
data = json_utils.read_json_data(file)
|
|
53
|
+
for i in range(len(data)):
|
|
54
|
+
data[i]["result"] = json.loads(data[i]["result"])
|
|
55
|
+
print(data)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail : 390737991@qq.com
|
|
5
|
+
@Date : 2022-12-31 11:37:30
|
|
6
|
+
@Brief : https://blog.csdn.net/qdPython/article/details/121381363
|
|
7
|
+
"""
|
|
8
|
+
import cv2
|
|
9
|
+
import random
|
|
10
|
+
import types
|
|
11
|
+
import numpy as np
|
|
12
|
+
from typing import Callable
|
|
13
|
+
from pybaseutils import image_utils, file_utils
|
|
14
|
+
from pybaseutils.cvutils import video_utils
|
|
15
|
+
import cv2
|
|
16
|
+
|
|
17
|
+
if __name__ == '__main__':
|
|
18
|
+
from pybaseutils.converter import convert_voc2yolo
|
|
19
|
+
|
|
20
|
+
# 定义类别数
|
|
21
|
+
class_name = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
|
|
22
|
+
"chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
|
|
23
|
+
"pottedplant", "sheep", "sofa", "train", "tvmonitor"]
|
|
24
|
+
# VOC数据目录
|
|
25
|
+
data_root = "/path/to/VOC2007"
|
|
26
|
+
# 保存输出yolo格式数据目录
|
|
27
|
+
out_text_dir = os.path.join(data_root, "labels")
|
|
28
|
+
# 开始转换,vis=True进行可视化
|
|
29
|
+
convert_voc2yolo.convert_voc2yolo(data_root, out_text_dir, class_name=class_name, vis=True)
|