pybaseutils 2.2.4__tar.gz → 2.2.5__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.5}/PKG-INFO +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/build_labelme.py +7 -3
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_labelme2cvat.py +2 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_labelme.py +40 -38
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/file_utils.py +13 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/transforms/augment_utils.py +63 -5
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils.egg-info/PKG-INFO +1 -1
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/LICENCE +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/README.md +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/cvutils/video_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_image_text.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/image_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/log.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/logger.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils.egg-info/SOURCES.txt +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/setup.cfg +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/setup.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/WebCrawler/search_image.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/demo_labelme_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/class_names.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo3.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_lableme_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_video.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/flask_demo/func.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/flask_demo/server.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/performance.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/registry/base.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/registry/component.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/registry/main.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/registry/register.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.2.4 → pybaseutils-2.2.5}/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),...]
|
|
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])
|
|
@@ -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 get_targets(data_info: dict, targets, keys=['points', 'boxes', 'labels', 'groups', 'names']):
|
|
332
|
+
def get_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)):
|
|
@@ -439,16 +441,28 @@ 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
|
-
# thickness=2, fontScale=1.2, drawType="chinese")
|
|
448
|
+
def draw_keypoints_image(image, boxes, keypoints):
|
|
449
|
+
"""绘制keypoints"""
|
|
449
450
|
# image = image_utils.draw_landmark(image, points, color=(0, 255, 0))
|
|
450
451
|
# image = image_utils.draw_key_point_in_image(image, points)
|
|
452
|
+
if len(keypoints) > 0:
|
|
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=2,
|
|
457
|
+
boxes=boxes, vis_id=False)
|
|
458
|
+
return image
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
def show_target_image(image, boxes, labels, points, keypoints=[], color=(), thickness=1):
|
|
462
|
+
# image = image_utils.draw_image_bboxes_text(image, boxes, labels, color=(255, 0, 0),
|
|
463
|
+
# thickness=2, fontScale=1.2, drawType="chinese")
|
|
451
464
|
image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
|
|
465
|
+
image = draw_keypoints_image(image, boxes, keypoints)
|
|
452
466
|
image_utils.cv_show_image("det", image)
|
|
453
467
|
return image
|
|
454
468
|
|
|
@@ -456,20 +470,8 @@ def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
|
|
|
456
470
|
if __name__ == "__main__":
|
|
457
471
|
from pybaseutils.converter import build_labelme
|
|
458
472
|
|
|
459
|
-
anno_dir = "/home/PKing/
|
|
460
|
-
anno_dir = "/home/PKing/
|
|
461
|
-
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/使用钳形电流表测量低压线路电流/dataset-v1/json"
|
|
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}
|
|
473
|
+
anno_dir = "/home/PKing/Downloads/sample/images"
|
|
474
|
+
# anno_dir = "/home/PKing/Downloads/冲击试验/sample/images"
|
|
473
475
|
names = None
|
|
474
476
|
dataset = LabelMeDatasets(filename=None,
|
|
475
477
|
data_root=None,
|
|
@@ -482,9 +484,9 @@ if __name__ == "__main__":
|
|
|
482
484
|
print("have num:{}".format(len(dataset)))
|
|
483
485
|
for i in range(len(dataset)):
|
|
484
486
|
print(i) # i=20
|
|
485
|
-
data = dataset.__getitem__(
|
|
486
|
-
image, points,
|
|
487
|
+
data = dataset.__getitem__(i)
|
|
488
|
+
image, points, boxes, labels = data["image"], data["points"], data["boxes"], data["labels"]
|
|
487
489
|
h, w = image.shape[:2]
|
|
488
490
|
image_file = data["image_file"]
|
|
489
491
|
anno_file = os.path.join("masker", "{}.json".format(os.path.basename(image_file).split(".")[0]))
|
|
490
|
-
show_target_image(image,
|
|
492
|
+
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
|
|
@@ -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()
|
|
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
|
|
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
|