pybaseutils 2.1.4__tar.gz → 2.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/PKG-INFO +1 -1
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/audio_utils.py +49 -7
- pybaseutils-2.1.6/pybaseutils/cvutils/nms_utils.py +62 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_image_folder.py +3 -2
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_image_text.py +6 -7
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_labelme.py +2 -2
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/image_utils.py +14 -13
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pandas_utils.py +21 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/PKG-INFO +1 -1
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/SOURCES.txt +5 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_labelme_crop.py +1 -1
- pybaseutils-2.1.6/test_py/aije/get_pair_data.py +18 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_lableme_vis.py +1 -1
- pybaseutils-2.1.6/test_py/redis_py/__init__.py +7 -0
- pybaseutils-2.1.6/test_py/redis_py/knn_search.py +14 -0
- pybaseutils-2.1.6/test_py/redis_py/redis_client.py +87 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/LICENCE +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/README.md +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/cvutils/video_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/file_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/log.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/logger.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/augment_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/setup.cfg +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/setup.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/WebCrawler/search_image.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/main.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/class_names.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo1.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo2.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo3.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_video.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/flask_demo/func.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/flask_demo/server.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/performance.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/base.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/component.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/main.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/registry/register.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.1.4 → pybaseutils-2.1.6}/test_py/test_fr/idcardocr.py +0 -0
|
@@ -20,6 +20,7 @@ import matplotlib.pyplot as plt
|
|
|
20
20
|
from scipy.fft import fft
|
|
21
21
|
from IPython.display import Audio, display
|
|
22
22
|
from playsound import playsound
|
|
23
|
+
from scipy.io import wavfile
|
|
23
24
|
|
|
24
25
|
import numpy as np
|
|
25
26
|
|
|
@@ -158,27 +159,56 @@ def save_pcm_from_numpy(audio_data: np.ndarray, pcm_file, data_type=np.int16):
|
|
|
158
159
|
return bytes
|
|
159
160
|
|
|
160
161
|
|
|
161
|
-
def
|
|
162
|
+
def librosa_load(audio_file, sr=None, mono=True):
|
|
162
163
|
"""
|
|
163
164
|
默认将多声道音频文件转换为单声道,并返回一维数组;
|
|
164
165
|
如果你需要处理多声道音频文件,可以使用 mono=False,参数来保留所有声道,并返回二维数组。
|
|
165
166
|
:param audio_file:
|
|
166
|
-
:param sr: sampling rate
|
|
167
|
+
:param sr: sampling rate 16000
|
|
167
168
|
:param mono: 设置为true是单通道,否则是双通道
|
|
168
169
|
:return:
|
|
169
170
|
"""
|
|
170
|
-
audio_data, sr = librosa.load(audio_file, sr=sr, mono=mono)
|
|
171
|
+
audio_data, sr = librosa.load(audio_file, sr=sr, mono=mono) # 非常耗时
|
|
171
172
|
return audio_data, sr
|
|
172
173
|
|
|
173
174
|
|
|
174
|
-
def
|
|
175
|
+
def soundfile_load(audio_file, sr=None, mono=True):
|
|
175
176
|
"""
|
|
176
177
|
默认会将多声道音频文件的每个声道分别存储在二维数组的不同列中,因此返回的是一个二维数组
|
|
177
178
|
:param audio_file:
|
|
179
|
+
:param sr: sampling rate 当设置的采样率与音频原始采样率不一致时,会进行重采样,导致非常耗时
|
|
180
|
+
:param mono: 设置为true是单通道,否则是双通道
|
|
181
|
+
:return:
|
|
182
|
+
"""
|
|
183
|
+
audio_data, orig_sr = sf.read(audio_file, samplerate=None, dtype="float32") # 不能直接修改samplerate
|
|
184
|
+
if mono and audio_data.ndim == 2:
|
|
185
|
+
audio_data = np.mean(audio_data, axis=-1)
|
|
186
|
+
if sr is None or orig_sr == sr:
|
|
187
|
+
sr = orig_sr
|
|
188
|
+
else:
|
|
189
|
+
audio_data = librosa.resample(y=audio_data, orig_sr=orig_sr, target_sr=sr) # 使用librosa进行重采样至目标采样率
|
|
190
|
+
return audio_data, sr
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def wavfile_load(audio_file):
|
|
194
|
+
sr, wav_data = wavfile.read(audio_file) # int16类型
|
|
195
|
+
# 转为float64类型
|
|
196
|
+
wav_data = wav_data / (32768)
|
|
197
|
+
# wav_data:[-0.03305054 -0.03561401 -0.038114697]
|
|
198
|
+
return wav_data, sr
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def read_audio(audio_file, sr=16000, mono=True):
|
|
202
|
+
"""
|
|
203
|
+
默认将多声道音频文件转换为单声道,并返回一维数组;
|
|
204
|
+
如果你需要处理多声道音频文件,可以使用 mono=False,参数来保留所有声道,并返回二维数组。
|
|
205
|
+
:param audio_file:
|
|
178
206
|
:param sr: sampling rate
|
|
207
|
+
:param mono: 设置为true是单通道,否则是双通道
|
|
179
208
|
:return:
|
|
180
209
|
"""
|
|
181
|
-
audio_data, sr =
|
|
210
|
+
audio_data, sr = librosa_load(audio_file, sr=sr, mono=mono) # 巨慢
|
|
211
|
+
# audio_data, sr = soundfile_load(audio_file, sr=sr, mono=mono) # 巨慢
|
|
182
212
|
return audio_data, sr
|
|
183
213
|
|
|
184
214
|
|
|
@@ -412,6 +442,16 @@ def display_freq_domain(audio, sr=16000):
|
|
|
412
442
|
plt.show()
|
|
413
443
|
|
|
414
444
|
|
|
445
|
+
def test_time(audio_file, sr=None):
|
|
446
|
+
from pybaseutils import time_utils
|
|
447
|
+
for i in range(10):
|
|
448
|
+
with time_utils.Performance("soundfile_load") as p:
|
|
449
|
+
audio_data1, sr1 = soundfile_load(audio_file, sr=sr)
|
|
450
|
+
with time_utils.Performance("librosa_load") as p:
|
|
451
|
+
audio_data2, sr2 = librosa_load(audio_file, sr=sr)
|
|
452
|
+
print(np.sum(np.abs(audio_data2 - audio_data1)))
|
|
453
|
+
|
|
454
|
+
|
|
415
455
|
if __name__ == '__main__':
|
|
416
456
|
# video_file = "../data/video/kunkun_cut.mp4"
|
|
417
457
|
# audio_file = "../data/video/kunkun_cut.mp3"
|
|
@@ -420,8 +460,10 @@ if __name__ == '__main__':
|
|
|
420
460
|
audio_file = "../../data/video/kunkun_cut.mp3"
|
|
421
461
|
video_out = "../../data/video/test-video-result.mp4"
|
|
422
462
|
audio_file = "../../data/audio/bus_chinese.wav"
|
|
463
|
+
|
|
464
|
+
test_time(audio_file)
|
|
423
465
|
# playsound(audio_file)
|
|
424
466
|
# playsound(audio_file)
|
|
425
|
-
display_time_domain(audio_file)
|
|
426
|
-
display_freq_domain(audio_file)
|
|
467
|
+
# display_time_domain(audio_file)
|
|
468
|
+
# display_freq_domain(audio_file)
|
|
427
469
|
# merge_video_audio(video_file, audio_file, video_out)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-10-09 14:19:18
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import cv2
|
|
9
|
+
import numpy as np
|
|
10
|
+
import torch
|
|
11
|
+
import torchvision
|
|
12
|
+
from pybaseutils import image_utils
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, score_threshold=0.5, nms_threshold=0.5,
|
|
16
|
+
top_k=None, use_batch=True):
|
|
17
|
+
"""
|
|
18
|
+
:param boxes:
|
|
19
|
+
:param scores:
|
|
20
|
+
:param labels:
|
|
21
|
+
:param score_threshold:
|
|
22
|
+
:param nms_threshold:
|
|
23
|
+
:param top_k:
|
|
24
|
+
:return:
|
|
25
|
+
"""
|
|
26
|
+
if use_batch:
|
|
27
|
+
# TODO opencv4.7.0版本中增加了NMSBoxesBatched函数,可分类做nms
|
|
28
|
+
xywh = image_utils.xyxy2xywh(boxes)
|
|
29
|
+
index = cv2.dnn.NMSBoxesBatched(xywh.tolist(), scores.tolist(), labels.tolist(),
|
|
30
|
+
score_threshold=score_threshold, nms_threshold=nms_threshold, top_k=top_k)
|
|
31
|
+
else:
|
|
32
|
+
# TODO CV2 NMSBoxes没有区分类别
|
|
33
|
+
# 如果你不想每个类别都做一次nms,而是所有类别一起做nms
|
|
34
|
+
# 就需要把不同类别的目标框尽量没有重合,不至于把不同类别的IOU大的目标框滤掉
|
|
35
|
+
# 先用每个类别id乘一个很大的数,作为offset,把每个类别的box坐标都加上相应的offset,这是batched nms
|
|
36
|
+
max_wh = 7680
|
|
37
|
+
c = (labels * max_wh).reshape(-1, 1).astype(np.float32) # classes
|
|
38
|
+
boxes_ = boxes + c # boxes (offset by class)
|
|
39
|
+
xywh = image_utils.xyxy2xywh(boxes_)
|
|
40
|
+
index = cv2.dnn.NMSBoxes(xywh.tolist(), scores.tolist(), score_threshold=score_threshold,
|
|
41
|
+
nms_threshold=nms_threshold,top_k=top_k)
|
|
42
|
+
return index
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def nms_boxes_torch(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, score_threshold=0.5, nms_threshold=0.5,
|
|
46
|
+
top_k=None):
|
|
47
|
+
"""
|
|
48
|
+
:param boxes:
|
|
49
|
+
:param scores:
|
|
50
|
+
:param labels:
|
|
51
|
+
:param score_threshold:
|
|
52
|
+
:param nms_threshold:
|
|
53
|
+
:param top_k:
|
|
54
|
+
:return:
|
|
55
|
+
"""
|
|
56
|
+
max_wh = 7680
|
|
57
|
+
c = (labels * max_wh).reshape(-1, 1).astype(np.float32) # classes
|
|
58
|
+
boxes_ = boxes + c # boxes (offset by class)
|
|
59
|
+
index = torchvision.ops.nms(torch.from_numpy(boxes_),
|
|
60
|
+
torch.from_numpy(scores),
|
|
61
|
+
iou_threshold=nms_threshold) # NMS
|
|
62
|
+
return index
|
|
@@ -56,7 +56,8 @@ class FolderDataset(parser_image_text.TextDataset):
|
|
|
56
56
|
for i, dir in enumerate(data_file):
|
|
57
57
|
if not os.path.exists(dir): raise Exception("文件不存在,image_dir:{}".format(dir))
|
|
58
58
|
paths, labels = file_utils.get_files_labels(dir, postfix=file_utils.IMG_POSTFIX)
|
|
59
|
-
|
|
59
|
+
if len(paths) == 0: raise Exception("文件为空:{}".format(dir))
|
|
60
|
+
print("loading data from:{},have {},label:{}".format(dir, len(paths), list(set(labels))))
|
|
60
61
|
# TODO # 避免多个数据集的相同的label
|
|
61
62
|
if use_sub: labels = [os.path.join(str(i), l) for l in labels]
|
|
62
63
|
data = [{"file": p, "label": l} for p, l in zip(paths, labels)]
|
|
@@ -69,7 +70,7 @@ if __name__ == '__main__':
|
|
|
69
70
|
from torchvision import transforms
|
|
70
71
|
|
|
71
72
|
image_dir = ['/home/PKing/nasdata/release/infrastructure/DMClassification/data/dataset/train']
|
|
72
|
-
class_name =
|
|
73
|
+
class_name = []
|
|
73
74
|
input_size = [224, 224]
|
|
74
75
|
rgb_mean = [0., 0., 0.]
|
|
75
76
|
rgb_std = [1.0, 1.0, 1.0]
|
|
@@ -57,19 +57,18 @@ class TextDataset(Dataset):
|
|
|
57
57
|
balance_nums = self.data_resample.balance_nums # resample后,每个类别的分布
|
|
58
58
|
self.class_count = self.count_class_info(self.item_list, class_name=self.class_name,
|
|
59
59
|
label_index=self.label_index)
|
|
60
|
-
self.num_images = len(self.item_list)
|
|
61
60
|
self.classes = list(self.class_dict.values())
|
|
62
61
|
self.num_classes = max(self.classes) + 1
|
|
62
|
+
self.num_samples = len(self.item_list)
|
|
63
63
|
self.info(save_info=kwargs.get("save_info", ""))
|
|
64
64
|
|
|
65
65
|
def info(self, save_info=""):
|
|
66
66
|
print("----------------------- {} DATASET INFO -----------------------".format(self.phase.upper()))
|
|
67
|
-
print("Dataset
|
|
67
|
+
print("Dataset num_samples :{}".format(len(self.item_list)))
|
|
68
|
+
print("Dataset num_classes :{}".format(self.num_classes))
|
|
68
69
|
print("Dataset class_name :{}".format(self.class_name))
|
|
69
70
|
print("Dataset class_dict :{}".format(self.class_dict))
|
|
70
71
|
print("Dataset class_count :{}".format(self.class_count))
|
|
71
|
-
print("Dataset num images :{}".format(len(self.item_list)))
|
|
72
|
-
print("Dataset num_classes :{}".format(self.num_classes))
|
|
73
72
|
print("Dataset resample :{}".format(self.resample))
|
|
74
73
|
if save_info:
|
|
75
74
|
if not os.path.exists(save_info): os.makedirs(save_info)
|
|
@@ -88,7 +87,7 @@ class TextDataset(Dataset):
|
|
|
88
87
|
def parser_dataset(self, data_file, data_root="", label_index="label", shuffle=False, check=False):
|
|
89
88
|
"""
|
|
90
89
|
保存格式:[path,label] 或者 [path,label,xmin,ymin,xmax,ymax]
|
|
91
|
-
:param data_file:
|
|
90
|
+
:param data_file: List([])
|
|
92
91
|
:param data_root:
|
|
93
92
|
:param label_index: label index
|
|
94
93
|
:param shuffle:
|
|
@@ -164,7 +163,7 @@ class TextDataset(Dataset):
|
|
|
164
163
|
print("no file:{}".format(file))
|
|
165
164
|
continue
|
|
166
165
|
dst_list.append(item)
|
|
167
|
-
print("have nums
|
|
166
|
+
print("have nums samples:{},legal samples:{}".format(len(item_list), len(dst_list)))
|
|
168
167
|
return dst_list
|
|
169
168
|
|
|
170
169
|
def __getitem__(self, index):
|
|
@@ -180,7 +179,7 @@ class TextDataset(Dataset):
|
|
|
180
179
|
image = Image.fromarray(image)
|
|
181
180
|
image = self.transform(image)
|
|
182
181
|
if image is None:
|
|
183
|
-
index = int(random.uniform(0, self.
|
|
182
|
+
index = int(random.uniform(0, self.num_samples))
|
|
184
183
|
return self.__getitem__(index)
|
|
185
184
|
return {"image": image, "label": label, "file": file}
|
|
186
185
|
|
|
@@ -41,10 +41,10 @@ class LabelMeDataset(Dataset):
|
|
|
41
41
|
:param data_root:
|
|
42
42
|
:param anno_dir:
|
|
43
43
|
:param image_dir:
|
|
44
|
-
:param class_name:
|
|
44
|
+
:param class_name: 当class_name=None且check=True,将自动获取所有class,当class_name=[]会直接返回name
|
|
45
45
|
:param use_rgb:
|
|
46
46
|
:param shuffle:
|
|
47
|
-
:param check:
|
|
47
|
+
:param check: 当class_name=None且check=True,将自动获取所有class
|
|
48
48
|
:param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
|
|
49
49
|
:param kwargs:
|
|
50
50
|
"""
|
|
@@ -1728,8 +1728,8 @@ def save_image(image_file, image, uint8=False, use_rgb=False):
|
|
|
1728
1728
|
cv2.imwrite(image_file, image)
|
|
1729
1729
|
|
|
1730
1730
|
|
|
1731
|
-
def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray,
|
|
1732
|
-
|
|
1731
|
+
def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, score_threshold=0.5, nms_threshold=0.45,
|
|
1732
|
+
eta=None, top_k=None, use_class=True):
|
|
1733
1733
|
"""
|
|
1734
1734
|
NMS
|
|
1735
1735
|
fix a bug: cv2.dnn.NMSBoxe bboxes, scores params must be list and float data,can not be float32 or int
|
|
@@ -1741,17 +1741,18 @@ def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, ima
|
|
|
1741
1741
|
:param nms_threshold:
|
|
1742
1742
|
:return:
|
|
1743
1743
|
"""
|
|
1744
|
-
if
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1744
|
+
if use_class:
|
|
1745
|
+
# TODO opencv4.7.0版本中增加了NMSBoxesBatched函数,可分类做nms
|
|
1746
|
+
index = cv2.dnn.NMSBoxesBatched(boxes.tolist(), scores.tolist(), labels.tolist(),
|
|
1747
|
+
score_threshold=score_threshold, nms_threshold=nms_threshold,
|
|
1748
|
+
eta=eta, top_k=top_k)
|
|
1749
|
+
else:
|
|
1750
|
+
# TODO NMSBoxes没有区分类别
|
|
1751
|
+
index = cv2.dnn.NMSBoxes(boxes.tolist(), scores.tolist(), score_threshold=score_threshold,
|
|
1752
|
+
nms_threshold=nms_threshold, eta=eta, top_k=top_k)
|
|
1753
|
+
return index
|
|
1754
|
+
|
|
1755
|
+
|
|
1755
1756
|
|
|
1756
1757
|
|
|
1757
1758
|
def file2base64(file):
|
|
@@ -74,6 +74,19 @@ def construct_pd(index, columns_name, content, filename=None):
|
|
|
74
74
|
return df
|
|
75
75
|
|
|
76
76
|
|
|
77
|
+
def dict2pd(data: dict, T=False):
|
|
78
|
+
"""
|
|
79
|
+
:param data:
|
|
80
|
+
:param T:
|
|
81
|
+
:return:
|
|
82
|
+
"""
|
|
83
|
+
if T:
|
|
84
|
+
df = pd.DataFrame.from_dict(data) # 键按照列进行转换
|
|
85
|
+
else:
|
|
86
|
+
df = pd.DataFrame.from_dict(data, orient='index') # 键按照行进行转换
|
|
87
|
+
return df
|
|
88
|
+
|
|
89
|
+
|
|
77
90
|
if __name__ == "__main__":
|
|
78
91
|
class_name = ['C1', 'C2', 'C3']
|
|
79
92
|
labels = [100, 200, 300]
|
|
@@ -85,3 +98,11 @@ if __name__ == "__main__":
|
|
|
85
98
|
filename = "my_test.csv"
|
|
86
99
|
df = construct_pd(index, columns_name, content, filename)
|
|
87
100
|
print(df)
|
|
101
|
+
|
|
102
|
+
data = {
|
|
103
|
+
'name1': ["A0", "A1", "A2"],
|
|
104
|
+
'name2': ["B0", "B1", "B2"],
|
|
105
|
+
'name3': ["C0", "C1", "C2"]
|
|
106
|
+
}
|
|
107
|
+
df = dict2pd(data)
|
|
108
|
+
save_csv("data.csv", df)
|
|
@@ -66,6 +66,7 @@ pybaseutils/cvutils/__init__.py
|
|
|
66
66
|
pybaseutils/cvutils/corner_utils.py
|
|
67
67
|
pybaseutils/cvutils/monitor.py
|
|
68
68
|
pybaseutils/cvutils/mouse_utils.py
|
|
69
|
+
pybaseutils/cvutils/nms_utils.py
|
|
69
70
|
pybaseutils/cvutils/video_utils.py
|
|
70
71
|
pybaseutils/dataloader/__init__.py
|
|
71
72
|
pybaseutils/dataloader/balanced_classes.py
|
|
@@ -174,6 +175,7 @@ test_py/aije/demo_labelme_crop.py
|
|
|
174
175
|
test_py/aije/demo_video_aije.py
|
|
175
176
|
test_py/aije/demo_voc_crop.py
|
|
176
177
|
test_py/aije/demo_voc_vis.py
|
|
178
|
+
test_py/aije/get_pair_data.py
|
|
177
179
|
test_py/aije/video_convertor.py
|
|
178
180
|
test_py/audio/__init__.py
|
|
179
181
|
test_py/audio/demo.py
|
|
@@ -238,6 +240,9 @@ test_py/image_correction/demo_correction_v2.py
|
|
|
238
240
|
test_py/image_correction/demo_correction_v3.py
|
|
239
241
|
test_py/pose/__init__.py
|
|
240
242
|
test_py/pose/human_pose.py
|
|
243
|
+
test_py/redis_py/__init__.py
|
|
244
|
+
test_py/redis_py/knn_search.py
|
|
245
|
+
test_py/redis_py/redis_client.py
|
|
241
246
|
test_py/registry/__init__.py
|
|
242
247
|
test_py/registry/base.py
|
|
243
248
|
test_py/registry/component.py
|
|
@@ -64,7 +64,7 @@ if __name__ == "__main__":
|
|
|
64
64
|
'绝缘手套', '绝缘鞋', '脚扣', '螺丝', '身穿工作服', '遮拦杆', '铁架', '铝扎线']
|
|
65
65
|
室外: []
|
|
66
66
|
"""
|
|
67
|
-
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-
|
|
67
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v21/json"
|
|
68
68
|
class_name = None # 室内\
|
|
69
69
|
out_dir = os.path.join(os.path.dirname(anno_dir), "crops")
|
|
70
70
|
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-08-24 11:05:52
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import numpy as np
|
|
10
|
+
import itertools
|
|
11
|
+
from pybaseutils import file_utils, image_utils
|
|
12
|
+
|
|
13
|
+
if __name__ == '__main__':
|
|
14
|
+
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/train-v2/dataset/all_action"
|
|
15
|
+
pairs_file = os.path.join(image_dir, "pairs.txt")
|
|
16
|
+
# pairs = file_utils.get_pair_data(image_dir, pair_num=-1)
|
|
17
|
+
pairs = file_utils.get_pair_data(image_dir, pair_num=10000)
|
|
18
|
+
file_utils.write_data(pairs_file, pairs)
|
|
@@ -24,7 +24,7 @@ if __name__ == "__main__":
|
|
|
24
24
|
# anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v01/json"
|
|
25
25
|
# anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-outdoor-det-fix/dataset-v23/json"
|
|
26
26
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-test/json"
|
|
27
|
-
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-
|
|
27
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/第3批数据/json"
|
|
28
28
|
names = None
|
|
29
29
|
# names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
|
|
30
30
|
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-10-09 19:55:10
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
from test_py.redis_py.redis_client import r_client, CacheMethod
|
|
9
|
+
from redisearch import Client, Query
|
|
10
|
+
|
|
11
|
+
if __name__ == "__main__":
|
|
12
|
+
CacheMethod.set("name", "test")
|
|
13
|
+
keys = CacheMethod().get_all_keys()
|
|
14
|
+
print(keys)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
redis client
|
|
4
|
+
"""
|
|
5
|
+
import redis
|
|
6
|
+
from redis import StrictRedis
|
|
7
|
+
|
|
8
|
+
REDIS_URI = 'redis://@10.12.51.100:6379'
|
|
9
|
+
pool = redis.ConnectionPool().from_url(REDIS_URI)
|
|
10
|
+
r_client = StrictRedis(connection_pool=pool)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CacheMethod:
|
|
14
|
+
"""redis method"""
|
|
15
|
+
|
|
16
|
+
def __init__(self):
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
@staticmethod
|
|
20
|
+
def get_client():
|
|
21
|
+
return r_client
|
|
22
|
+
|
|
23
|
+
@staticmethod
|
|
24
|
+
def set(key, value):
|
|
25
|
+
return r_client.set(key, value)
|
|
26
|
+
|
|
27
|
+
@staticmethod
|
|
28
|
+
def get(key):
|
|
29
|
+
return r_client.get(key)
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def exists(key):
|
|
33
|
+
return r_client.exists(key)
|
|
34
|
+
|
|
35
|
+
@staticmethod
|
|
36
|
+
def delete(key):
|
|
37
|
+
return r_client.delete(key)
|
|
38
|
+
|
|
39
|
+
@staticmethod
|
|
40
|
+
def keys(key):
|
|
41
|
+
return r_client.keys(key)
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
def incr(key):
|
|
45
|
+
return r_client.incr(key)
|
|
46
|
+
|
|
47
|
+
@staticmethod
|
|
48
|
+
def decr(key):
|
|
49
|
+
return r_client.decr(key)
|
|
50
|
+
|
|
51
|
+
@staticmethod
|
|
52
|
+
def expire(key, time):
|
|
53
|
+
"""设置,过期删除时间,必须创建后再设置"""
|
|
54
|
+
return r_client.expire(key, time)
|
|
55
|
+
|
|
56
|
+
@staticmethod
|
|
57
|
+
def get_all_keys():
|
|
58
|
+
"""获得所有keys"""
|
|
59
|
+
keys = r_client.keys('*')
|
|
60
|
+
keys = keys if keys else []
|
|
61
|
+
keys = [k.decode('utf-8') for k in keys]
|
|
62
|
+
return keys
|
|
63
|
+
|
|
64
|
+
@staticmethod
|
|
65
|
+
def del_all_keys(ignore=[]):
|
|
66
|
+
"""删除所有keys"""
|
|
67
|
+
keys = CacheMethod.get_all_keys()
|
|
68
|
+
try:
|
|
69
|
+
for k in keys:
|
|
70
|
+
if k in ignore: continue
|
|
71
|
+
CacheMethod.delete(k)
|
|
72
|
+
print("INFO: Redis delete key:{}".format(k))
|
|
73
|
+
except Exception as e:
|
|
74
|
+
print(e)
|
|
75
|
+
print("Error: Redis delete key:{}".format(k))
|
|
76
|
+
|
|
77
|
+
@staticmethod
|
|
78
|
+
def set_all_expire(time, ignore=[]):
|
|
79
|
+
"""设置所有keys的过期时间"""
|
|
80
|
+
keys = CacheMethod.get_all_keys()
|
|
81
|
+
try:
|
|
82
|
+
for k in keys:
|
|
83
|
+
if k in ignore: continue
|
|
84
|
+
CacheMethod.expire(k, time=time)
|
|
85
|
+
print("INFO: Redis set key={}, expire={}s".format(k, time))
|
|
86
|
+
except Exception as e:
|
|
87
|
+
print(e)
|
|
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
|