pybaseutils 2.4.35__tar.gz → 2.5.2__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.4.35 → pybaseutils-2.5.2}/PKG-INFO +1 -1
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/audio_utils.py +8 -4
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/color_utils.py +2 -3
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_coco.py +10 -12
- pybaseutils-2.5.2/pybaseutils/converter/convert_labelme2coco.py +122 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme.py +40 -2
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_voc.py +1 -1
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dict_uils.py +1 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dict_utils.py +8 -5
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/font_style/__init__.py +1 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/font_utils.py +24 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/geometry_tools.py +43 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/image_utils.py +133 -135
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/bones_utils.py +8 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/thread_utils.py +31 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/PKG-INFO +1 -1
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/SOURCES.txt +3 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/setup.py +1 -0
- pybaseutils-2.5.2/test_py/aije/demo_labelme_class_counts.py +20 -0
- pybaseutils-2.5.2/test_py/aije/demo_labelme_crop_aicq.py +138 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_aije.py +1 -1
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_crop_ailt.py +23 -17
- pybaseutils-2.5.2/test_py/converter/convert_labelme2coco.py +48 -0
- pybaseutils-2.5.2/test_py/demo1.py +10 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo2.py +6 -4
- pybaseutils-2.5.2/test_py/demo3.py +35 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo4.py +1 -1
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_coco_vis.py +9 -8
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_gif_video.py +4 -4
- pybaseutils-2.4.35/pybaseutils/converter/convert_labelme2coco.py +0 -195
- pybaseutils-2.4.35/test_py/demo1.py +0 -43
- pybaseutils-2.4.35/test_py/demo3.py +0 -21
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/LICENCE +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/README.md +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/dict_queue.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/list_queue.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base/producer_consumer.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/converter/prelabelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/camera.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/frame_record.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/cvutils/video_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/data_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_image_text.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_labelme_line.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_video_folder.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_video_text.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/file_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/http_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/log.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/media/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/media/ffmpeg_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/nets_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/build_transform.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/imgaug_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/app_gradio_image.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/app_stweb_image.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/app_webio_image.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/web/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/setup.cfg +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/download_pdf.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/search_baidu.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/WebCrawler/search_biying.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_motion_blur.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/mask_image.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/main.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/audio_demo1.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/camera/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/camera/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/camera.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/class_names.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/car_accident.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_gesture2hand.py +0 -0
- /pybaseutils-2.4.35/test_py/converter/convert_labelme2coco.py → /pybaseutils-2.5.2/test_py/converter/convert_labelme2coco_pen.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/convert_yolo2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/fall_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/parking_rois_gopro.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/date_dataset.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/date_demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/datedataset_bk.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_annular_to_rect.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_lableme_vis.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_letterbox.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_mosaic.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_prelabelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_video2frame.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_video_segm.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/fast_api/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/fast_api/create_image_url.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/fast_api/get_image_url.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/app.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/utils/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/flask_demo/utils/utils.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/gradio_app.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/gradio_app_v2.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/model_process.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/performance.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/qrcode/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/qrcode/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/base.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/component.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/main.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/registry/register.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/slowfastnet.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_camera.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/test_fr/idcardocr.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/__init__.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/asr_clients.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/asr_service.py +0 -0
- {pybaseutils-2.4.35 → pybaseutils-2.5.2}/test_py/web_socket/chat_service.py +0 -0
|
@@ -19,7 +19,6 @@ from ffmpy import FFmpeg
|
|
|
19
19
|
import matplotlib.pyplot as plt
|
|
20
20
|
from scipy.fft import fft
|
|
21
21
|
from IPython.display import Audio, display
|
|
22
|
-
from playsound import playsound
|
|
23
22
|
from scipy.io import wavfile
|
|
24
23
|
|
|
25
24
|
import numpy as np
|
|
@@ -267,6 +266,8 @@ def sound_audio(audio, sr=16000):
|
|
|
267
266
|
|
|
268
267
|
def sound_audio_file(audio_file, jupyter=False):
|
|
269
268
|
"""
|
|
269
|
+
sudo apt-get install libasound2-dev
|
|
270
|
+
pip install simpleaudio==1.0.4
|
|
270
271
|
:param audio_file:
|
|
271
272
|
:param jupyter:
|
|
272
273
|
:return:
|
|
@@ -274,7 +275,10 @@ def sound_audio_file(audio_file, jupyter=False):
|
|
|
274
275
|
if jupyter:
|
|
275
276
|
display(Audio(audio_file))
|
|
276
277
|
else:
|
|
277
|
-
|
|
278
|
+
import simpleaudio as sa
|
|
279
|
+
wave_obj = sa.WaveObject.from_wave_file(audio_file)
|
|
280
|
+
play_obj = wave_obj.play() # 播放
|
|
281
|
+
play_obj.wait_done() # 等待播放结束(可选,但推荐)
|
|
278
282
|
|
|
279
283
|
|
|
280
284
|
def sound_audio_buffer(audio_buffer, tmp_audio="./tmp.wav"):
|
|
@@ -470,8 +474,8 @@ if __name__ == '__main__':
|
|
|
470
474
|
video_out = "../../data/video/test-video-result.mp4"
|
|
471
475
|
audio_file = "../../data/audio/bus_chinese.wav"
|
|
472
476
|
|
|
473
|
-
test_time(audio_file)
|
|
474
|
-
|
|
477
|
+
# test_time(audio_file)
|
|
478
|
+
sound_audio_file(audio_file,jupyter=False)
|
|
475
479
|
# playsound(audio_file)
|
|
476
480
|
# display_time_domain(audio_file)
|
|
477
481
|
# display_freq_domain(audio_file)
|
|
@@ -11,7 +11,6 @@ import cv2
|
|
|
11
11
|
import matplotlib.pyplot as plt
|
|
12
12
|
import numpy as np
|
|
13
13
|
from collections import defaultdict, Counter
|
|
14
|
-
from pybaseutils import file_utils
|
|
15
14
|
|
|
16
15
|
VOC_NAMES = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
|
|
17
16
|
"chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
|
|
@@ -38,7 +37,7 @@ color_table = [(0, 0, 0), (0, 255, 0), (255, 0, 0), (0, 0, 255), (0, 255, 255),
|
|
|
38
37
|
(0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128)] * 100
|
|
39
38
|
|
|
40
39
|
|
|
41
|
-
class
|
|
40
|
+
class ColorLabel():
|
|
42
41
|
def __init__(self):
|
|
43
42
|
self.color = dict()
|
|
44
43
|
self.cnums = len(color_table)
|
|
@@ -48,7 +47,7 @@ class ColorHash():
|
|
|
48
47
|
:param label: str or list
|
|
49
48
|
:return:
|
|
50
49
|
"""
|
|
51
|
-
h =
|
|
50
|
+
h = str(label)
|
|
52
51
|
if h not in self.color:
|
|
53
52
|
i = len(self.color) + 1
|
|
54
53
|
self.color[h] = color_table[i % self.cnums]
|
|
@@ -211,6 +211,7 @@ class COCOBuilder():
|
|
|
211
211
|
keypoints[1::3] = np.clip(keypoints[1::3], 1, height - 1)
|
|
212
212
|
:return:
|
|
213
213
|
"""
|
|
214
|
+
if isinstance(keypoints, np.ndarray): keypoints = keypoints.tolist()
|
|
214
215
|
self.annotation_id += 1
|
|
215
216
|
annotation_item = dict()
|
|
216
217
|
annotation_item['segmentation'] = seg
|
|
@@ -274,24 +275,21 @@ class COCOBuilder():
|
|
|
274
275
|
if area < min_area: segs, area = [], []
|
|
275
276
|
return segs, area
|
|
276
277
|
|
|
277
|
-
def addObjects(self, filename, objects: dict, width, height,
|
|
278
|
+
def addObjects(self, filename, objects: dict, width, height, ignore_tiny=False):
|
|
278
279
|
"""
|
|
279
280
|
:param filename: os.path.basename(filename)
|
|
280
281
|
:param objects:
|
|
281
|
-
boxes
|
|
282
|
-
labels
|
|
283
|
-
contours
|
|
284
|
-
keypoints
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
v = 1 : 标注了但是图像中不可见(例如遮挡)
|
|
290
|
-
v = 2 : 标注了并图像可见
|
|
282
|
+
boxes [[xmin,ymin,xmax,ymax],[xmin,ymin,xmax,ymax],...]
|
|
283
|
+
labels [目标1,目标2,...]
|
|
284
|
+
contours [目标1[seg1,seg2,...],目标2[seg1,seg2,...],...]
|
|
285
|
+
keypoints [目标1[x1, y1, v1,x2, y2, v2,...],目标1[x1, y1, v1,x2, y2, v2,...],...]
|
|
286
|
+
其中x,y为Keypoint的坐标,v为可见标志
|
|
287
|
+
v = 0 : 未标注点
|
|
288
|
+
v = 1 : 标注了但是图像中不可见(例如遮挡)
|
|
289
|
+
v = 2 : 标注了并图像可见
|
|
291
290
|
实际预测时,不要求预测每个关节点的可见性
|
|
292
291
|
:param width:
|
|
293
292
|
:param height:
|
|
294
|
-
:param num_joints:
|
|
295
293
|
:param ignore_tiny: 是否去除segment很细小的目标
|
|
296
294
|
:return:
|
|
297
295
|
"""
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Project:
|
|
5
|
+
# @Author : panjq
|
|
6
|
+
# @Date : 2020-02-12 18:28:16
|
|
7
|
+
# @url :
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import sys
|
|
13
|
+
import os
|
|
14
|
+
import numpy as np
|
|
15
|
+
import json
|
|
16
|
+
import cv2
|
|
17
|
+
import time
|
|
18
|
+
from tqdm import tqdm
|
|
19
|
+
from pybaseutils.dataloader import parser_labelme
|
|
20
|
+
from pybaseutils.converter import build_coco
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class Labelme2COCO(build_coco.COCOBuilder):
|
|
24
|
+
"""Convert Labelme to COCO dataset format"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, anno_dir, image_dir, class_name=[], init_id=None, use_kpt=False, kpt_names=[],
|
|
27
|
+
kpt_shape=[]):
|
|
28
|
+
"""
|
|
29
|
+
:param anno_dir:
|
|
30
|
+
:param image_dir:
|
|
31
|
+
:param class_name:
|
|
32
|
+
:param init_id:
|
|
33
|
+
:param use_kpt:
|
|
34
|
+
:param kpt_names: 关键点名称列表,
|
|
35
|
+
当kpt_names.ndim=1时,要求所有类别且所有目标的关键点名称必须一致
|
|
36
|
+
当kpt_names.ndim=2时,仅要求相同类别目标的关键点名称必须一致,且len(kpt_names)==len(self.class_name)
|
|
37
|
+
:param kpt_shape: 关键点的维度,默认是(17, 3),对于coco-person,有17个关键点,3表示(x,y,v))
|
|
38
|
+
"""
|
|
39
|
+
super(Labelme2COCO, self).__init__(init_id=init_id)
|
|
40
|
+
print(anno_dir)
|
|
41
|
+
print(image_dir)
|
|
42
|
+
self.anno_dir = anno_dir
|
|
43
|
+
self.image_dir = image_dir
|
|
44
|
+
self.kpt_names = kpt_names
|
|
45
|
+
self.kpt_shape = kpt_shape
|
|
46
|
+
self.labelme = parser_labelme.LabelMeDataset(anno_dir=anno_dir,
|
|
47
|
+
image_dir=image_dir,
|
|
48
|
+
class_name=class_name,
|
|
49
|
+
check_kpt=True,
|
|
50
|
+
use_kpt=use_kpt,
|
|
51
|
+
kpt_names=kpt_names,
|
|
52
|
+
kpt_shape=kpt_shape,
|
|
53
|
+
use_rgb=False,
|
|
54
|
+
shuffle=False,
|
|
55
|
+
check=False
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
def build_instances_dataset(self, save_file, ):
|
|
59
|
+
"""
|
|
60
|
+
构建COCO的目标检测和实例分割数据集
|
|
61
|
+
:param save_file: 输出COCO格式的文件
|
|
62
|
+
:return:
|
|
63
|
+
"""
|
|
64
|
+
for index in tqdm(range(len(self.labelme))):
|
|
65
|
+
data_info = self.labelme.__getitem__(index)
|
|
66
|
+
contours = [[c] for c in data_info["points"]]
|
|
67
|
+
info = {"boxes": data_info["boxes"], "labels": data_info["names"],
|
|
68
|
+
"contours": contours}
|
|
69
|
+
width, height = data_info["size"]
|
|
70
|
+
filename = data_info["image_file"]
|
|
71
|
+
self.addObjects(filename, info, width, height, num_joints=0)
|
|
72
|
+
build_coco.COCOTools.check_coco(self.coco)
|
|
73
|
+
self.save_coco(save_file)
|
|
74
|
+
|
|
75
|
+
def build_keypoints_dataset(self, save_file, skeleton=[]):
|
|
76
|
+
"""
|
|
77
|
+
构建COCO的目标检测和实例分割数据集
|
|
78
|
+
:param save_file: 输出COCO格式的文件
|
|
79
|
+
:return:
|
|
80
|
+
"""
|
|
81
|
+
for index in tqdm(range(len(self.labelme))):
|
|
82
|
+
data_info = self.labelme.__getitem__(index)
|
|
83
|
+
contours = [[c] for c in data_info["points"]]
|
|
84
|
+
keypoints = [c.reshape(-1) for c in data_info["keypoints"]]
|
|
85
|
+
info = {"boxes": data_info["boxes"], "labels": data_info["names"],
|
|
86
|
+
"contours": contours, "keypoints": keypoints}
|
|
87
|
+
width, height = data_info["size"]
|
|
88
|
+
filename = data_info["image_file"]
|
|
89
|
+
self.addObjects(filename, info, width, height)
|
|
90
|
+
# 设置关键点的名称和skeleton
|
|
91
|
+
self.set_keypoints_category(kps_name=self.kpt_names[0], skeleton=skeleton, cat_id=0)
|
|
92
|
+
build_coco.COCOTools.check_coco(self.coco)
|
|
93
|
+
self.save_coco(save_file)
|
|
94
|
+
|
|
95
|
+
def save_coco(self, json_file):
|
|
96
|
+
"""保存COCO数据集"""
|
|
97
|
+
super(Labelme2COCO, self).save_coco(json_file)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def demo():
|
|
101
|
+
class_name = ["person"]
|
|
102
|
+
kpt_names = [["p0", "p1", "p2", "p3", "p4"]]
|
|
103
|
+
skeleton = [[0, 2], [2, 1], [2, 3], [3, 4]]
|
|
104
|
+
kpt_shape = [5, 3]
|
|
105
|
+
anno_dir = "/media/PKing/dev2/SDK/base-utils/data/labelme/images"
|
|
106
|
+
coco_ins_file = os.path.join(os.path.dirname(anno_dir), "coco_ins.json")
|
|
107
|
+
coco_kps_file = os.path.join(os.path.dirname(anno_dir), "coco_kps.json")
|
|
108
|
+
build = Labelme2COCO(image_dir=anno_dir,
|
|
109
|
+
anno_dir=anno_dir,
|
|
110
|
+
class_name=class_name,
|
|
111
|
+
use_kpt=True,
|
|
112
|
+
kpt_names=kpt_names,
|
|
113
|
+
kpt_shape=kpt_shape
|
|
114
|
+
)
|
|
115
|
+
# TODO 构建关键点检测数据集
|
|
116
|
+
build.build_keypoints_dataset(coco_kps_file, skeleton=skeleton)
|
|
117
|
+
# TODO 构建实例分割数据集
|
|
118
|
+
# build.build_instances_dataset(coco_ins_file)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
if __name__ == '__main__':
|
|
122
|
+
demo()
|
|
@@ -53,6 +53,10 @@ class LabelMeDataset(Dataset):
|
|
|
53
53
|
:param check: 当class_name=None且check=True,将自动获取所有class
|
|
54
54
|
:param check_kpt: True会检查关键点的完整性,图像中仅当所有目标都标注和对应的关键点(无漏标注),才返回数据
|
|
55
55
|
False不会检查关键点的完整性,,图像中只要标注的目标和对应的关键点(漏标注),会返回数据
|
|
56
|
+
:param kpt_names: 关键点名称列表,
|
|
57
|
+
当kpt_names.ndim=1时,要求所有类别且所有目标的关键点名称必须一致
|
|
58
|
+
当kpt_names.ndim=2时,仅要求相同类别目标的关键点名称必须一致,且len(kpt_names)==len(self.class_name)
|
|
59
|
+
:param kpt_shape: 关键点的维度,默认是(17, 3),对于coco-person,有17个关键点,3表示(x,y,v)
|
|
56
60
|
:param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
|
|
57
61
|
:param kwargs: read_image: 是否读取图片,否则image=None
|
|
58
62
|
"""
|
|
@@ -537,6 +541,34 @@ def LabelMeDatasets(filename=None,
|
|
|
537
541
|
return datasets
|
|
538
542
|
|
|
539
543
|
|
|
544
|
+
def get_class_counts(datasets, save=""):
|
|
545
|
+
"""
|
|
546
|
+
统计每个类别的样本数量
|
|
547
|
+
:param datasets: List[str] or ConcatDataset
|
|
548
|
+
:param save: 保存路径
|
|
549
|
+
:return: 每个类别的样本数量
|
|
550
|
+
"""
|
|
551
|
+
from pybaseutils import dict_utils
|
|
552
|
+
if isinstance(datasets, list):
|
|
553
|
+
datasets = LabelMeDatasets(filename=None,
|
|
554
|
+
data_root=None,
|
|
555
|
+
anno_dir=datasets,
|
|
556
|
+
image_dir=None,
|
|
557
|
+
class_name=[],
|
|
558
|
+
check=False,
|
|
559
|
+
phase='val',
|
|
560
|
+
shuffle=False)
|
|
561
|
+
counts = {}
|
|
562
|
+
for i in tqdm(range(len(datasets))):
|
|
563
|
+
info = datasets.__getitem__(i)
|
|
564
|
+
for n in info["names"]:
|
|
565
|
+
counts[n] = counts.get(n, 0) + 1
|
|
566
|
+
counts = dict_utils.dict_sort(counts,use_key=False)
|
|
567
|
+
if save:
|
|
568
|
+
json_utils.save_json(os.path.join(save, "counts.json"), counts)
|
|
569
|
+
return counts
|
|
570
|
+
|
|
571
|
+
|
|
540
572
|
def parser_labelme(anno_file, class_dict={}, size=()):
|
|
541
573
|
"""
|
|
542
574
|
:param annotation: labelme标注的数据
|
|
@@ -591,9 +623,9 @@ def example_for_keypoints():
|
|
|
591
623
|
image_dir=None,
|
|
592
624
|
class_name=class_name,
|
|
593
625
|
use_kpt=True,
|
|
626
|
+
check_kpt=True,
|
|
594
627
|
kpt_names=kpt_names,
|
|
595
628
|
kpt_shape=kpt_shape,
|
|
596
|
-
check_kpt=False,
|
|
597
629
|
check=False,
|
|
598
630
|
phase="val",
|
|
599
631
|
shuffle=False)
|
|
@@ -633,4 +665,10 @@ def example_for_segment():
|
|
|
633
665
|
|
|
634
666
|
if __name__ == "__main__":
|
|
635
667
|
# example_for_segment()
|
|
636
|
-
example_for_keypoints()
|
|
668
|
+
# example_for_keypoints()
|
|
669
|
+
datasets = [
|
|
670
|
+
'/home/PKing/edudata/dataset/AICQ/dataset/data-2026-10-06/images',
|
|
671
|
+
'/home/PKing/edudata/dataset/AICQ/dataset/data-2026-09-30/images',
|
|
672
|
+
]
|
|
673
|
+
counts = get_class_counts(datasets)
|
|
674
|
+
print(counts)
|
|
@@ -119,7 +119,7 @@ class VOCDataset(Dataset):
|
|
|
119
119
|
class_set = labels.reshape(-1).tolist() + class_set
|
|
120
120
|
class_set = list(set(class_set))
|
|
121
121
|
if ignore_empty and (len(boxes) == 0 or len(labels) == 0):
|
|
122
|
-
print("empty annotation:{}".format(annotation_file))
|
|
122
|
+
# print("empty annotation:{}".format(annotation_file))
|
|
123
123
|
continue
|
|
124
124
|
dst_ids.append(image_id)
|
|
125
125
|
class_set = sorted(class_set)
|
|
@@ -14,8 +14,9 @@ from collections import defaultdict
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class Objects(object):
|
|
17
|
-
def __init__(self, boxes, label, score, names=[], size=[],
|
|
18
|
-
|
|
17
|
+
def __init__(self, boxes, label, score, names=[], size=[],
|
|
18
|
+
segms=[], masks=None, keypt=[], value=[],
|
|
19
|
+
traid=[], trace: defaultdict = None, color=[], image=None, file=""):
|
|
19
20
|
self.boxes = boxes # 目标框(xmin,ymin,xmax,ymax)
|
|
20
21
|
self.score = score # 目标框置信度
|
|
21
22
|
self.label = label # 目标框类别
|
|
@@ -25,12 +26,14 @@ class Objects(object):
|
|
|
25
26
|
self.masks = masks # 目标轮廓掩码
|
|
26
27
|
self.segms = segms # 目标轮廓[np.shape(n,2)]
|
|
27
28
|
self.traid = traid # 轨迹ID
|
|
28
|
-
self.trace = trace #
|
|
29
|
+
self.trace = trace # 轨迹的历史数据
|
|
30
|
+
self.value = value # 一些数值
|
|
31
|
+
self.depth = None # 深度图
|
|
32
|
+
self.dists = [] # 深度值(segms/boxes区域)
|
|
29
33
|
self.color = [(255, 0, 0)] * len(boxes) # 目标框颜色
|
|
34
|
+
self.metas = defaultdict() # 其他信息
|
|
30
35
|
self.size = size # 原始图像大小
|
|
31
36
|
self.file = file # 文件路径
|
|
32
|
-
self.depth = None # 深度图
|
|
33
|
-
self.metas = defaultdict() # 其他信息
|
|
34
37
|
|
|
35
38
|
def update(self, **kwargs):
|
|
36
39
|
"""更新属性值"""
|
|
@@ -243,6 +243,30 @@ def re_example():
|
|
|
243
243
|
print(out)
|
|
244
244
|
|
|
245
245
|
|
|
246
|
+
def align_display(s, align='C', width=20, pchar=" "):
|
|
247
|
+
"""
|
|
248
|
+
对齐显示字符串
|
|
249
|
+
print("[{}] 下载进度".format(align_display(item, 'C')))
|
|
250
|
+
:param s: 要显示的字符串
|
|
251
|
+
:param align: 对齐方式,'L' 左对齐,'C' 居中对齐,'R' 右对齐
|
|
252
|
+
:param width: 目标显示宽度
|
|
253
|
+
:param pchar: 对齐字符,默认空格
|
|
254
|
+
:return: 对齐后的字符串
|
|
255
|
+
"""
|
|
256
|
+
w = sum(2 if ord(c) > 127 else 1 for c in s) # 计算字符串的显示宽度(中文等宽字符算2,英文算1)
|
|
257
|
+
total_pad = max(width - w, 0)
|
|
258
|
+
if align == 'L':
|
|
259
|
+
L = 0
|
|
260
|
+
R = total_pad
|
|
261
|
+
elif align == 'R':
|
|
262
|
+
L = total_pad
|
|
263
|
+
R = 0
|
|
264
|
+
else: # 默认居中对齐
|
|
265
|
+
L = total_pad // 2
|
|
266
|
+
R = total_pad - L
|
|
267
|
+
return pchar * L + s + pchar * R
|
|
268
|
+
|
|
269
|
+
|
|
246
270
|
if __name__ == "__main__":
|
|
247
271
|
draw_font_example()
|
|
248
272
|
# get_system_fonts()
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# @Brief :
|
|
8
8
|
# --------------------------------------------------------
|
|
9
9
|
"""
|
|
10
|
+
import math
|
|
10
11
|
import numpy as np
|
|
11
12
|
from scipy.spatial.distance import cdist
|
|
12
13
|
|
|
@@ -221,6 +222,48 @@ def compute_vector_angle(a, b, minangle=True):
|
|
|
221
222
|
return angle
|
|
222
223
|
|
|
223
224
|
|
|
225
|
+
def image2math_coord(pts, height=None):
|
|
226
|
+
"""
|
|
227
|
+
将图像坐标系(x 向右,y 向下)转换为数学坐标系(x 向右,y 向上)笛卡尔坐标系。
|
|
228
|
+
:param pts: 形如 (N, 2) 的数组/列表,图像坐标点
|
|
229
|
+
:param height: 可选,图像高度。给出时按 (x, height - y) 翻转,
|
|
230
|
+
结果仍落在图像矩形范围内;不给出时按 (x, -y) 翻转。
|
|
231
|
+
:return: (N, 2) 的 numpy 数组,数学坐标点
|
|
232
|
+
"""
|
|
233
|
+
pts = np.asarray(pts, dtype=float)
|
|
234
|
+
if pts.ndim != 2 or pts.shape[1] != 2: raise ValueError("pts 必须是形如 (N, 2) 的数组")
|
|
235
|
+
out = pts.copy()
|
|
236
|
+
if height is None:
|
|
237
|
+
out[:, 1] = -out[:, 1] # y 取反,原点不变
|
|
238
|
+
else:
|
|
239
|
+
out[:, 1] = height - out[:, 1] # 以图像底边为 y=0
|
|
240
|
+
return out
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def get_vector_angle(v1, v2, clockwise=True):
|
|
244
|
+
"""
|
|
245
|
+
坐标系约定: 标准的数学坐标系(x 轴向右,y 轴向上)
|
|
246
|
+
计算从向量 v1 旋转到向量 v2 的角度。
|
|
247
|
+
:param v1: 形如 (x, y) 的元组/列表,表示平面向量
|
|
248
|
+
:param v2: 形如 (x, y) 的元组/列表,表示平面向量
|
|
249
|
+
:param clockwise: True 顺时针角度,False 逆时针角度
|
|
250
|
+
:return: 角度(度),范围 [0, 360)
|
|
251
|
+
注意: 0 和 360 是同一个方向,函数统一返回 0
|
|
252
|
+
"""
|
|
253
|
+
x1, y1 = v1
|
|
254
|
+
x2, y2 = v2
|
|
255
|
+
# 零向量无法定义方向
|
|
256
|
+
if (x1 == 0 and y1 == 0) or (x2 == 0 and y2 == 0): return 0
|
|
257
|
+
dot = x1 * x2 + y1 * y2 # 点积
|
|
258
|
+
cross = x1 * y2 - y1 * x2 # 叉积(z 分量)
|
|
259
|
+
# 叉积 > 0 表示 v2 在 v1 的逆时针方向
|
|
260
|
+
# 顺时针:用 -cross;逆时针:用 +cross
|
|
261
|
+
signed_cross = -cross if clockwise else cross
|
|
262
|
+
angle = math.degrees(math.atan2(signed_cross, dot))
|
|
263
|
+
# 把 (-180, 180] 映射到 [0, 360)
|
|
264
|
+
return angle % 360
|
|
265
|
+
|
|
266
|
+
|
|
224
267
|
def line_test():
|
|
225
268
|
'''
|
|
226
269
|
angle: 56.789092174788685
|