pybaseutils 2.2.4__tar.gz → 2.2.7__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.2.4 → pybaseutils-2.2.7}/PKG-INFO +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_labelme.py +7 -3
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2cvat.py +2 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_labelme.py +60 -48
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/file_utils.py +13 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/image_utils.py +2 -2
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/plot_utils.py +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/augment_utils.py +63 -5
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/PKG-INFO +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_lableme_vis.py +1 -1
- pybaseutils-2.2.7/test_py/demo_plot.py +23 -0
- pybaseutils-2.2.4/test_py/demo_plot.py +0 -26
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/LICENCE +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/README.md +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/cvutils/video_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_image_text.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/log.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/logger.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/SOURCES.txt +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/setup.cfg +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/setup.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/WebCrawler/search_image.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_labelme_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/class_names.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo3.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_video.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/flask_demo/func.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/flask_demo/server.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/performance.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/base.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/component.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/registry/register.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.7}/test_py/test_fr/idcardocr.py +0 -0
|
@@ -12,7 +12,7 @@ from tqdm import tqdm
|
|
|
12
12
|
from pybaseutils import image_utils, file_utils, json_utils
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def maker_labelme(json_file, points, labels, image_name, image_size, keypoints=[]
|
|
15
|
+
def maker_labelme(json_file, points, labels, image_name, image_size, image_bs64=None, keypoints=[]):
|
|
16
16
|
"""
|
|
17
17
|
制作label数据格式
|
|
18
18
|
:param json_file: 保存json文件路径
|
|
@@ -21,16 +21,20 @@ def maker_labelme(json_file, points, labels, image_name, image_size, keypoints=[
|
|
|
21
21
|
:param image_name: 图片名称,如果存在则进行拷贝到json_file同一级目录
|
|
22
22
|
:param image_size: (W,H)
|
|
23
23
|
:param image_bs64: 图片base64编码,可为None
|
|
24
|
+
:param keypoints: [(N,3),(N,3),...],(x,y,conf),其3维度是置信度
|
|
24
25
|
:return:
|
|
25
26
|
"""
|
|
26
27
|
assert len(points) == len(labels)
|
|
27
28
|
file_utils.create_file_path(json_file)
|
|
28
29
|
shapes = []
|
|
29
|
-
|
|
30
|
+
if isinstance(keypoints, np.ndarray): keypoints = keypoints.tolist()
|
|
31
|
+
for i in range(len(points)):
|
|
30
32
|
# point = [[x1,y1],[x2,y2],...,[xn,yn]]
|
|
33
|
+
point, label = points[i], labels[i]
|
|
31
34
|
if isinstance(point, np.ndarray): point = point.tolist()
|
|
32
35
|
if not isinstance(point[0], list): point = [point]
|
|
33
|
-
|
|
36
|
+
kpts = keypoints[i] if keypoints else []
|
|
37
|
+
item = {"label": label, "score": None, "keypoints": kpts, "line_color": None, "fill_color": None,
|
|
34
38
|
"group_id": None, "points": point, "shape_type": "polygon", "flags": {}, "description": ""}
|
|
35
39
|
shapes.append(item)
|
|
36
40
|
data = {
|
|
@@ -27,7 +27,8 @@ def convert_labelme2cvat(anno_dir, image_dir="", vis=False):
|
|
|
27
27
|
image_name = os.path.basename(image_file)
|
|
28
28
|
json_file = os.path.join(anno_dir, image_name.split(".")[0] + ".json")
|
|
29
29
|
xml_file = os.path.join(image_dir, image_name.split(".")[0] + ".xml")
|
|
30
|
-
|
|
30
|
+
info = parser_labelme.parser_labelme(json_file, class_dict={})
|
|
31
|
+
boxes, labels, points = info["boxes"], info["points"], info["labels"]
|
|
31
32
|
image = cv2.imread(image_file)
|
|
32
33
|
h, w = image.shape[:2]
|
|
33
34
|
build_cvat.maker_cvat(xml_file, points, labels, image_name, image_size=[w, h])
|
|
@@ -63,13 +63,13 @@ class LabelMeDataset(Dataset):
|
|
|
63
63
|
random.seed(200)
|
|
64
64
|
random.shuffle(self.image_ids)
|
|
65
65
|
self.num_images = len(self.image_ids)
|
|
66
|
-
print("
|
|
67
|
-
print("
|
|
68
|
-
print("
|
|
69
|
-
print("
|
|
70
|
-
print("
|
|
71
|
-
print("
|
|
72
|
-
# print("
|
|
66
|
+
print("LabelMeDataset data_root :{}".format(self.data_root))
|
|
67
|
+
print("LabelMeDataset anno_dir :{}".format(self.anno_dir))
|
|
68
|
+
print("LabelMeDataset image_dir :{}".format(self.image_dir))
|
|
69
|
+
print("LabelMeDataset class_name :{}".format(self.class_name))
|
|
70
|
+
print("LabelMeDataset class_dict :{}".format(self.class_dict))
|
|
71
|
+
print("LabelMeDataset num images :{}".format(len(self.image_ids)))
|
|
72
|
+
# print("LabelMeDataset num_classes :{}".format(self.num_classes))
|
|
73
73
|
print("------" * 10)
|
|
74
74
|
|
|
75
75
|
def __len__(self):
|
|
@@ -114,13 +114,12 @@ class LabelMeDataset(Dataset):
|
|
|
114
114
|
if not os.path.exists(image_file):
|
|
115
115
|
continue
|
|
116
116
|
annotation, width, height = self.load_annotations(anno_file)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if len(label) == 0:
|
|
117
|
+
info = self.parser_annotation(annotation, self.class_dict, min_points=self.min_points, unique=self.unique)
|
|
118
|
+
labels = info["labels"]
|
|
119
|
+
if len(labels) == 0:
|
|
121
120
|
continue
|
|
122
121
|
dst_ids.append(image_id)
|
|
123
|
-
class_name +=
|
|
122
|
+
class_name += labels
|
|
124
123
|
if self.class_name is None:
|
|
125
124
|
class_name = sorted(list(set(class_name)))
|
|
126
125
|
self.class_name, self.class_dict = self.parser_classes(class_name)
|
|
@@ -170,11 +169,12 @@ class LabelMeDataset(Dataset):
|
|
|
170
169
|
annotation, width, height = self.load_annotations(anno_file)
|
|
171
170
|
image = self.read_image(image_file, use_rgb=self.use_rgb)
|
|
172
171
|
shape = image.shape
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
172
|
+
data_info = self.parser_annotation(annotation, self.class_dict, shape, min_points=self.min_points,
|
|
173
|
+
unique=self.unique)
|
|
174
|
+
# TODO dict(boxes, labels, points, groups, names, keypoints)
|
|
175
|
+
data_info.update({"image": image, "image_file": image_file, "anno_file": anno_file,
|
|
176
|
+
"size": [shape[1], shape[0]]})
|
|
177
|
+
return data_info
|
|
178
178
|
|
|
179
179
|
@staticmethod
|
|
180
180
|
def parser_annotation(annotation: dict, class_dict={}, shape=None, min_points=-1, unique=False):
|
|
@@ -185,7 +185,7 @@ class LabelMeDataset(Dataset):
|
|
|
185
185
|
:param min_points: 当标注的轮廓点的个数小于等于min_points,会被剔除;负数不剔除
|
|
186
186
|
:return:
|
|
187
187
|
"""
|
|
188
|
-
bboxes, labels, points, groups, names = [], [], [], [], []
|
|
188
|
+
bboxes, labels, points, groups, names, keypoints = [], [], [], [], [], []
|
|
189
189
|
for anno in annotation:
|
|
190
190
|
name = "unique" if unique else anno["label"]
|
|
191
191
|
label = name
|
|
@@ -198,8 +198,9 @@ class LabelMeDataset(Dataset):
|
|
|
198
198
|
pts = np.asarray(anno["points"], dtype=np.int32)
|
|
199
199
|
if min_points > 0 and len(pts) <= min_points:
|
|
200
200
|
continue
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
gid = json_utils.get_value(anno, key=["group_id"], default=0)
|
|
202
|
+
gid = gid if gid else 0
|
|
203
|
+
kpt = json_utils.get_value(anno, key=["keypoints"], default=[])
|
|
203
204
|
if shape:
|
|
204
205
|
h, w = shape[:2]
|
|
205
206
|
pts[:, 0] = np.clip(pts[:, 0], 0, w - 1)
|
|
@@ -209,8 +210,9 @@ class LabelMeDataset(Dataset):
|
|
|
209
210
|
labels.append(label)
|
|
210
211
|
bboxes.append(box)
|
|
211
212
|
points.append(pts)
|
|
212
|
-
groups.append(
|
|
213
|
-
|
|
213
|
+
groups.append(gid)
|
|
214
|
+
keypoints.append(kpt)
|
|
215
|
+
return dict(boxes=bboxes, labels=labels, points=points, groups=groups, names=names, keypoints=keypoints)
|
|
214
216
|
|
|
215
217
|
def index2id(self, index):
|
|
216
218
|
"""
|
|
@@ -327,7 +329,7 @@ class LabelMeDataset(Dataset):
|
|
|
327
329
|
return annos, width, height
|
|
328
330
|
|
|
329
331
|
@staticmethod
|
|
330
|
-
def
|
|
332
|
+
def get_match_targets(data_info: dict, targets, keys=['points', 'boxes', 'labels', 'groups', 'names', 'keypoints']):
|
|
331
333
|
names = data_info["names"]
|
|
332
334
|
out = {}
|
|
333
335
|
for i in range(len(names)):
|
|
@@ -350,8 +352,8 @@ class LabelMeDataset(Dataset):
|
|
|
350
352
|
:return:
|
|
351
353
|
"""
|
|
352
354
|
image, file = data_info["image"], data_info["image_file"]
|
|
353
|
-
target_info = LabelMeDataset.
|
|
354
|
-
attibu_info = LabelMeDataset.
|
|
355
|
+
target_info = LabelMeDataset.get_match_targets(data_info, targets=superclass)
|
|
356
|
+
attibu_info = LabelMeDataset.get_match_targets(data_info, targets=subclass)
|
|
355
357
|
item_list = []
|
|
356
358
|
for i in range(len(target_info.get("boxes", []))):
|
|
357
359
|
tbbox = [target_info["boxes"][i]]
|
|
@@ -439,16 +441,37 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
|
|
|
439
441
|
:return:
|
|
440
442
|
"""
|
|
441
443
|
annotation, width, height = LabelMeDataset.load_annotations(anno_file)
|
|
442
|
-
|
|
443
|
-
return
|
|
444
|
+
info = LabelMeDataset.parser_annotation(annotation, class_dict, shape)
|
|
445
|
+
return info
|
|
444
446
|
|
|
445
447
|
|
|
446
|
-
def
|
|
447
|
-
|
|
448
|
+
def draw_keypoints_image(image, boxes=[], keypoints=[], thickness=1, vis_id=False):
|
|
449
|
+
"""绘制keypoints"""
|
|
450
|
+
h, w = image.shape[:2]
|
|
451
|
+
if len(keypoints)== 0: return image
|
|
452
|
+
if len(boxes) == 0: boxes = [(0, 0, w, h)] * len(keypoints)
|
|
453
|
+
from pybaseutils.pose import bones_utils
|
|
454
|
+
target_bones = bones_utils.get_target_bones("coco_person")
|
|
455
|
+
image = image_utils.draw_key_point_in_image(image, keypoints, pointline=target_bones["skeleton"],
|
|
456
|
+
colors=target_bones["colors"], thickness=thickness,
|
|
457
|
+
boxes=boxes, vis_id=vis_id)
|
|
458
|
+
|
|
459
|
+
if vis_id:
|
|
460
|
+
for kpts in keypoints:
|
|
461
|
+
if len(kpts) == 0: continue
|
|
462
|
+
print(kpts)
|
|
463
|
+
kpts = np.asarray(kpts)
|
|
464
|
+
point = kpts[:, 0:2]
|
|
465
|
+
texts = [f"{t:3.2f}" for t in kpts[:, 2]]
|
|
466
|
+
image = image_utils.draw_texts(image, points=point, texts=texts, fontScale=0.8, thickness=2)
|
|
467
|
+
return image
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
def show_target_image(image, boxes, labels, points, keypoints=[], color=(), thickness=2):
|
|
471
|
+
# image = image_utils.draw_image_bboxes_text(image, boxes, labels, color=(255, 0, 0),
|
|
448
472
|
# thickness=2, fontScale=1.2, drawType="chinese")
|
|
449
|
-
# image = image_utils.draw_landmark(image, points, color=(0, 255, 0))
|
|
450
|
-
# image = image_utils.draw_key_point_in_image(image, points)
|
|
451
473
|
image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
|
|
474
|
+
image = draw_keypoints_image(image, boxes, keypoints, thickness=thickness, vis_id=True)
|
|
452
475
|
image_utils.cv_show_image("det", image)
|
|
453
476
|
return image
|
|
454
477
|
|
|
@@ -456,20 +479,9 @@ def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
|
|
|
456
479
|
if __name__ == "__main__":
|
|
457
480
|
from pybaseutils.converter import build_labelme
|
|
458
481
|
|
|
459
|
-
anno_dir = "/home/PKing/
|
|
460
|
-
anno_dir = "/home/PKing/
|
|
461
|
-
anno_dir = "/home/PKing/
|
|
462
|
-
# anno_dir = [anno_dir, anno_dir]
|
|
463
|
-
names = ['A相电线', 'B相电线', 'C相电线', 'N相电线']
|
|
464
|
-
|
|
465
|
-
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-v11/json"
|
|
466
|
-
# anno_dir = "/home/PKing/Downloads/labelme/json"
|
|
467
|
-
# anno_dir = "/media/PKing/新加卷1/SDK/base-utils/data/coco/json"
|
|
468
|
-
# # names = ["car", "dog", "person", "unique"]
|
|
469
|
-
# names = ["BG", "unique"]
|
|
470
|
-
# # names = ["car", "dog", "person"]
|
|
471
|
-
# # names = ["dog", "car,person"]
|
|
472
|
-
# # names = {"car": 1, "person": 0}
|
|
482
|
+
anno_dir = "/home/PKing/Downloads/sample/images"
|
|
483
|
+
anno_dir = "/home/PKing/Downloads/冲击试验/video-ok/NVR_ch2_main_20241121093213_20241121100115/images"
|
|
484
|
+
# anno_dir = "/home/PKing/Downloads/冲击试验/sample/images"
|
|
473
485
|
names = None
|
|
474
486
|
dataset = LabelMeDatasets(filename=None,
|
|
475
487
|
data_root=None,
|
|
@@ -482,9 +494,9 @@ if __name__ == "__main__":
|
|
|
482
494
|
print("have num:{}".format(len(dataset)))
|
|
483
495
|
for i in range(len(dataset)):
|
|
484
496
|
print(i) # i=20
|
|
485
|
-
data = dataset.__getitem__(
|
|
486
|
-
image, points,
|
|
497
|
+
data = dataset.__getitem__(i)
|
|
498
|
+
image, points, boxes, labels = data["image"], data["points"], data["boxes"], data["labels"]
|
|
487
499
|
h, w = image.shape[:2]
|
|
488
500
|
image_file = data["image_file"]
|
|
489
501
|
anno_file = os.path.join("masker", "{}.json".format(os.path.basename(image_file).split(".")[0]))
|
|
490
|
-
show_target_image(image,
|
|
502
|
+
show_target_image(image, boxes, labels, points, keypoints=data["keypoints"])
|
|
@@ -24,7 +24,7 @@ from datetime import datetime
|
|
|
24
24
|
from tqdm import tqdm
|
|
25
25
|
|
|
26
26
|
IMG_POSTFIX = ['*.jpg', '*.jpeg', '*.png', '*.tif', "*.JPG", "*.bmp"]
|
|
27
|
-
VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv"]
|
|
27
|
+
VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv", "*.dav"]
|
|
28
28
|
AUDIO_POSTFIX = ['*.mp3', '*.wav']
|
|
29
29
|
|
|
30
30
|
|
|
@@ -363,6 +363,18 @@ def get_basename(file_list):
|
|
|
363
363
|
return dest_list
|
|
364
364
|
|
|
365
365
|
|
|
366
|
+
def change_postfix(file: str, postfix: str):
|
|
367
|
+
"""
|
|
368
|
+
修改后缀名称
|
|
369
|
+
:param file:
|
|
370
|
+
:param postfix:
|
|
371
|
+
:return:
|
|
372
|
+
"""
|
|
373
|
+
src_pos = file.split(".")[-1]
|
|
374
|
+
file = file[:-len(f".{src_pos}")] + postfix
|
|
375
|
+
return file
|
|
376
|
+
|
|
377
|
+
|
|
366
378
|
def randam_select_images(image_list, nums, shuffle=True):
|
|
367
379
|
"""
|
|
368
380
|
randam select nums images
|
|
@@ -1336,7 +1336,7 @@ def show_landmark(title, image, landmarks, vis_id=False, delay=0):
|
|
|
1336
1336
|
return image
|
|
1337
1337
|
|
|
1338
1338
|
|
|
1339
|
-
def
|
|
1339
|
+
def draw_points_texts(image, points, texts=None, color=(255, 0, 0), thickness=-1, fontScale=-1.0, drawType="simple"):
|
|
1340
1340
|
"""
|
|
1341
1341
|
:param image:
|
|
1342
1342
|
:param points:
|
|
@@ -1358,7 +1358,7 @@ def draw_points_text(image, points, texts=None, color=(255, 0, 0), thickness=-1,
|
|
|
1358
1358
|
return image
|
|
1359
1359
|
|
|
1360
1360
|
|
|
1361
|
-
|
|
1361
|
+
draw_points_text = draw_points_texts
|
|
1362
1362
|
|
|
1363
1363
|
|
|
1364
1364
|
def draw_texts(image, points, texts, color=(255, 0, 0), fontScale=-1.0, thickness=-1, drawType="simple"):
|
|
@@ -91,7 +91,7 @@ def plot_bar(x, y, xlabel="X", ylabel="Y", title="bar", bin_width=1, vis=True, s
|
|
|
91
91
|
font = get_font_type(size=14)
|
|
92
92
|
# 准备数据
|
|
93
93
|
# 用 Matplotlib 画条形图
|
|
94
|
-
plt.bar(x=x, height=y, width=bin_width, align="center", yerr=0.000001,
|
|
94
|
+
plt.bar(x=x, height=y, width=bin_width, align="center", yerr=0.000001,)
|
|
95
95
|
# plt.xlim([0.0, 1.0])
|
|
96
96
|
# plt.ylim([0.0, 1.05])
|
|
97
97
|
# 设置横纵坐标的名称以及对应字体格式
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
@Author : PKing
|
|
4
4
|
@E-mail :
|
|
5
5
|
@Date : 2024-07-25 08:33:57
|
|
6
|
-
@Brief :
|
|
6
|
+
@Brief : https://github.com/aleju/imgaug-doc
|
|
7
|
+
https://imgaug.readthedocs.io/en/latest/index.html
|
|
7
8
|
"""
|
|
8
9
|
import os
|
|
9
10
|
import cv2
|
|
@@ -14,8 +15,11 @@ from imgaug import augmenters as iaa
|
|
|
14
15
|
from imgaug import parameters as iap
|
|
15
16
|
import imgaug.augmenters.meta as meta
|
|
16
17
|
from pybaseutils import file_utils, image_utils
|
|
18
|
+
import imgaug as ia
|
|
17
19
|
from imgaug.augmentables.segmaps import SegmentationMapsOnImage
|
|
18
20
|
from imgaug.augmentables.kps import KeypointsOnImage
|
|
21
|
+
from imgaug.augmentables import Keypoint, KeypointsOnImage
|
|
22
|
+
from imgaug.augmentables.polys import Polygon, PolygonsOnImage
|
|
19
23
|
|
|
20
24
|
|
|
21
25
|
class Compose(object):
|
|
@@ -70,8 +74,8 @@ class Transpose(meta.Augmenter):
|
|
|
70
74
|
|
|
71
75
|
class Normalize(meta.Augmenter):
|
|
72
76
|
def __init__(self, mean, std, p=1, seed=None, name=None, random_state="deprecated", deterministic="deprecated"):
|
|
73
|
-
self.mean = mean
|
|
74
|
-
self.std = std
|
|
77
|
+
self.mean = np.array(mean, dtype=np.float32)
|
|
78
|
+
self.std = np.array(std, dtype=np.float32)
|
|
75
79
|
super(Normalize, self).__init__(
|
|
76
80
|
seed=seed, name=name,
|
|
77
81
|
random_state=random_state, deterministic=deterministic)
|
|
@@ -91,6 +95,40 @@ class Normalize(meta.Augmenter):
|
|
|
91
95
|
return image
|
|
92
96
|
|
|
93
97
|
|
|
98
|
+
def decode_polygons(polygons: List, shape) -> ia.PolygonsOnImage:
|
|
99
|
+
"""
|
|
100
|
+
:param polygons: [(N,2),(N,2),....,]
|
|
101
|
+
:param shape:
|
|
102
|
+
:return:
|
|
103
|
+
"""
|
|
104
|
+
polygons = [Polygon(c) for c in polygons]
|
|
105
|
+
P = ia.PolygonsOnImage(polygons, shape=shape)
|
|
106
|
+
return P
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def encode_polygons(polygons: ia.PolygonsOnImage) -> List:
|
|
110
|
+
polygons = [item.coords for item in polygons.polygons]
|
|
111
|
+
return polygons
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
aug_seq = iaa.Sequential([
|
|
115
|
+
iaa.MotionBlur(k=15), # 运动模糊
|
|
116
|
+
iaa.Clouds(), # 云雾
|
|
117
|
+
iaa.imgcorruptlike.Fog(severity=1), # 多雾/霜
|
|
118
|
+
iaa.imgcorruptlike.Snow(severity=2), # 下雨、大雪
|
|
119
|
+
iaa.Rain(drop_size=(0.10, 0.20), speed=(0.2, 0.3)), # 雨
|
|
120
|
+
iaa.Rain(speed=(0.3, 0.5)), # 雨
|
|
121
|
+
iaa.Snowflakes(flake_size=(0.6, 0.7), speed=(0.02, 0.03)), # 雪点
|
|
122
|
+
iaa.imgcorruptlike.Spatter(severity=2), # 溅 123水滴、45泥
|
|
123
|
+
iaa.contrast.LinearContrast((0.5, 2.0), per_channel=0.5), # 对比度变为原来的一半或者二倍
|
|
124
|
+
iaa.imgcorruptlike.Brightness(severity=2), # 亮度增加
|
|
125
|
+
iaa.imgcorruptlike.Saturate(severity=3), # 色彩饱和度
|
|
126
|
+
iaa.FastSnowyLandscape(lightness_threshold=(100, 255), lightness_multiplier=(1.5, 2.0)),
|
|
127
|
+
# 雪地亮度阈值是从 uniform(100, 255)(每张图像)和来自 uniform(1.5, 2.0)(每张图像)的乘数采样的。
|
|
128
|
+
iaa.Cartoon(blur_ksize=3, segmentation_size=1.0, saturation=2.0, edge_prevalence=1.0), # 卡通
|
|
129
|
+
])
|
|
130
|
+
|
|
131
|
+
|
|
94
132
|
def augment_example(input_size=(224, 224)):
|
|
95
133
|
transforms = [
|
|
96
134
|
iaa.Resize({"width": int(input_size[0] * 1.2), "height": "keep-aspect-ratio"}),
|
|
@@ -158,7 +196,7 @@ def demo_for_keypoint():
|
|
|
158
196
|
image = image_utils.read_image("../../data/test.png")
|
|
159
197
|
mask = image_utils.read_image("../../data/mask.png")
|
|
160
198
|
mask = image_utils.get_image_mask(mask)
|
|
161
|
-
contours = image_utils.find_mask_contours(mask)
|
|
199
|
+
contours = image_utils.find_mask_contours(mask)
|
|
162
200
|
auimg, contours = augment(image=image, keypoints=contours)
|
|
163
201
|
h, w = auimg.shape[:2]
|
|
164
202
|
mask = image_utils.draw_mask_contours(contours, size=(w, h))
|
|
@@ -167,7 +205,27 @@ def demo_for_keypoint():
|
|
|
167
205
|
image_utils.cv_show_image("image", result)
|
|
168
206
|
|
|
169
207
|
|
|
208
|
+
def demo_for_polygons():
|
|
209
|
+
transforms = augment_example()
|
|
210
|
+
augment = Compose(transforms=transforms, fixed=True)
|
|
211
|
+
for i in range(100):
|
|
212
|
+
image = image_utils.read_image("../../data/test.png")
|
|
213
|
+
mask = image_utils.read_image("../../data/mask.png")
|
|
214
|
+
mask = image_utils.get_image_mask(mask)
|
|
215
|
+
contours = image_utils.find_mask_contours(mask)
|
|
216
|
+
contours = contours * 3
|
|
217
|
+
polygons = decode_polygons(contours, image.shape)
|
|
218
|
+
auimg, polygons = augment(image=image, polygons=polygons)
|
|
219
|
+
contours = encode_polygons(polygons)
|
|
220
|
+
h, w = auimg.shape[:2]
|
|
221
|
+
mask = image_utils.draw_mask_contours(contours, size=(w, h))
|
|
222
|
+
color_image = image_utils.draw_image_contours(auimg, contours)
|
|
223
|
+
result = image_utils.image_hstack([image, color_image, mask])
|
|
224
|
+
image_utils.cv_show_image("image", result)
|
|
225
|
+
|
|
226
|
+
|
|
170
227
|
if __name__ == "__main__":
|
|
171
228
|
# demo_for_image()
|
|
172
229
|
# demo_for_segment()
|
|
173
|
-
demo_for_keypoint()
|
|
230
|
+
# demo_for_keypoint()
|
|
231
|
+
demo_for_polygons()
|
|
@@ -26,7 +26,7 @@ if __name__ == "__main__":
|
|
|
26
26
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-test/json"
|
|
27
27
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v25/json"
|
|
28
28
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-negetive/dataset-v02/json"
|
|
29
|
-
anno_dir = "/home/PKing/
|
|
29
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v31/images"
|
|
30
30
|
names = None
|
|
31
31
|
# names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
|
|
32
32
|
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
@@ -0,0 +1,23 @@
|
|
|
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 os
|
|
9
|
+
import cv2
|
|
10
|
+
import random
|
|
11
|
+
import types
|
|
12
|
+
import torch
|
|
13
|
+
import numpy as np
|
|
14
|
+
from typing import Callable
|
|
15
|
+
from pybaseutils import image_utils, file_utils, text_utils, plot_utils
|
|
16
|
+
from pybaseutils.cvutils import video_utils
|
|
17
|
+
import cv2
|
|
18
|
+
import re
|
|
19
|
+
|
|
20
|
+
if __name__ == '__main__':
|
|
21
|
+
x = [1, 2, 3]
|
|
22
|
+
y = [1, 2, 3]
|
|
23
|
+
plot_utils.plot_bar(x, y, xlabel="X轴", ylabel="Y轴", title="bar", bin_width=1, vis=True, save=True)
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# -*-coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
@Author : PKing
|
|
4
|
-
@E-mail : 390737991@qq.com
|
|
5
|
-
@Date : 2022-12-16 15:39:50
|
|
6
|
-
@Brief :
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import numpy as np
|
|
10
|
-
from pybaseutils import plot_utils, image_utils, file_utils
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def plot_sigmoid(x=[], step=0.1, inv=False):
|
|
14
|
-
x = np.arange(start=x[0], stop=x[1], step=step)
|
|
15
|
-
y = 1 / (1 + np.exp(-x))
|
|
16
|
-
return x, y
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if __name__ == '__main__':
|
|
20
|
-
file = "/home/dm/nasdata/dataset/csdn/plate/CCPD-master/CRNN-Plate-Recognition/data/province_count.json"
|
|
21
|
-
data: dict = file_utils.read_json_data(file)
|
|
22
|
-
y = list(data.values())
|
|
23
|
-
x = list(data.keys())
|
|
24
|
-
# x = [str(i) for i in range(len(y))]
|
|
25
|
-
# plot_utils.plot_bar_text(x, y)
|
|
26
|
-
plot_utils.plot_bar(x, y,xlabel="好X", ylabel="Y",)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|