pybaseutils 2.1.7__tar.gz → 2.2.1__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.7 → pybaseutils-2.2.1}/PKG-INFO +1 -4
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/coords_utils.py +62 -1
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/video_utils.py +4 -4
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/base_dataset.py +4 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_image_folder.py +1 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_image_text.py +5 -1
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_labelme.py +1 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/file_utils.py +16 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/image_utils.py +6 -5
- pybaseutils-2.2.1/pybaseutils/log.py +79 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/numpy_utils.py +23 -5
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/PKG-INFO +1 -4
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/SOURCES.txt +10 -0
- pybaseutils-2.2.1/test_py/Image_enhance/__init__.py +7 -0
- pybaseutils-2.2.1/test_py/Image_enhance/dmeo01.py +31 -0
- pybaseutils-2.2.1/test_py/aije/convert_labelme2voc.py +47 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_labelme_crop.py +2 -2
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/video_convertor.py +3 -2
- pybaseutils-2.2.1/test_py/demo1.py +55 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo2.py +5 -6
- pybaseutils-2.2.1/test_py/demo_get_file_label.py +56 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_get_file_list.py +1 -0
- pybaseutils-2.2.1/test_py/demo_gif.py +31 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_gif_video.py +3 -3
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_lableme_vis.py +6 -3
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_rename.py +1 -1
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_video.py +2 -3
- pybaseutils-2.2.1/test_py/demo_video_crop.py +21 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/get_file_list.py +12 -3
- pybaseutils-2.2.1/test_py/milvus_demo/__init__.py +7 -0
- pybaseutils-2.2.1/test_py/milvus_demo/demo01.py +39 -0
- pybaseutils-2.2.1/test_py/milvus_demo/demo02.py +44 -0
- pybaseutils-2.2.1/test_py/milvus_demo/hello_milvus.py +189 -0
- pybaseutils-2.2.1/test_py/milvus_demo/milvus_client.py +124 -0
- pybaseutils-2.1.7/test_py/aije/convert_labelme2voc.py +0 -28
- pybaseutils-2.1.7/test_py/demo1.py +0 -56
- pybaseutils-2.1.7/test_py/demo_gif.py +0 -20
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/LICENCE +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/README.md +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/json_utils.py +0 -0
- /pybaseutils-2.1.7/pybaseutils/log.py → /pybaseutils-2.2.1/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/logger.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/augment_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/setup.cfg +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/setup.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/WebCrawler/search_image.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/main.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/class_names.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo3.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/flask_demo/func.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/flask_demo/server.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/performance.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/base.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/component.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/main.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/registry/register.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.1.7 → pybaseutils-2.2.1}/test_py/test_fr/idcardocr.py +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.1
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: pybaseutils
|
|
5
5
|
Home-page: https://github.com/PanJinquan/base-utils
|
|
6
6
|
Author: PanJinquan
|
|
7
7
|
Author-email: 390737991@qq.com
|
|
8
8
|
License: MIT
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
License-File: LICENCE
|
|
11
10
|
|
|
12
11
|
base-utils
|
|
@@ -139,5 +138,3 @@ base_utils(C++)
|
|
|
139
138
|
return 0;
|
|
140
139
|
}
|
|
141
140
|
|
|
142
|
-
|
|
143
|
-
|
|
@@ -267,7 +267,7 @@ def get_section(start, end, nums=2, scale=1.0, dtype=None):
|
|
|
267
267
|
return out
|
|
268
268
|
|
|
269
269
|
|
|
270
|
-
def
|
|
270
|
+
def get_boxes_iou(box1, box2):
|
|
271
271
|
"""
|
|
272
272
|
:param box1: 预测框(n, 4)
|
|
273
273
|
:param box2: GT框 (m, 4)
|
|
@@ -294,6 +294,9 @@ def box_iou_v1(box1, box2):
|
|
|
294
294
|
return iou
|
|
295
295
|
|
|
296
296
|
|
|
297
|
+
box_iou_v1 = get_boxes_iou
|
|
298
|
+
|
|
299
|
+
|
|
297
300
|
def box_iou_v2(box1, box2):
|
|
298
301
|
"""
|
|
299
302
|
https://www.jb51.net/article/178732.htm
|
|
@@ -321,6 +324,64 @@ def box_iou_v2(box1, box2):
|
|
|
321
324
|
return iou
|
|
322
325
|
|
|
323
326
|
|
|
327
|
+
def get_box_iou(box1, box2):
|
|
328
|
+
"""
|
|
329
|
+
计算IOU=交集(A,B)/并集(A,B)
|
|
330
|
+
计算IOM=交集(A,B)/最小集(A,B)
|
|
331
|
+
:param box1: = [xmin1, ymin1, xmax1, ymax1]
|
|
332
|
+
:param box2: = [xmin2, ymin2, xmax2, ymax2]
|
|
333
|
+
:return:
|
|
334
|
+
"""
|
|
335
|
+
if len(box1) == 0: return 0
|
|
336
|
+
if len(box2) == 0: return 0
|
|
337
|
+
xmin1, ymin1, xmax1, ymax1 = box1
|
|
338
|
+
xmin2, ymin2, xmax2, ymax2 = box2
|
|
339
|
+
# 计算每个矩形的面积
|
|
340
|
+
s1 = (xmax1 - xmin1) * (ymax1 - ymin1) # C的面积
|
|
341
|
+
s2 = (xmax2 - xmin2) * (ymax2 - ymin2) # G的面积
|
|
342
|
+
|
|
343
|
+
# 计算相交矩形
|
|
344
|
+
xmin = max(xmin1, xmin2)
|
|
345
|
+
ymin = max(ymin1, ymin2)
|
|
346
|
+
xmax = min(xmax1, xmax2)
|
|
347
|
+
ymax = min(ymax1, ymax2)
|
|
348
|
+
|
|
349
|
+
w = max(0, xmax - xmin)
|
|
350
|
+
h = max(0, ymax - ymin)
|
|
351
|
+
area = w * h # C∩G的面积
|
|
352
|
+
iou = area / (s1 + s2 - area)
|
|
353
|
+
return iou
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
def get_box_iom(box1, box2):
|
|
357
|
+
"""
|
|
358
|
+
计算IOU=交集(A,B)/并集(A,B)
|
|
359
|
+
计算IOM=交集(A,B)/最小集(A,B)
|
|
360
|
+
:param box1: = [xmin1, ymin1, xmax1, ymax1]
|
|
361
|
+
:param box2: = [xmin2, ymin2, xmax2, ymax2]
|
|
362
|
+
:return:
|
|
363
|
+
"""
|
|
364
|
+
if len(box1) == 0: return 0
|
|
365
|
+
if len(box2) == 0: return 0
|
|
366
|
+
xmin1, ymin1, xmax1, ymax1 = box1
|
|
367
|
+
xmin2, ymin2, xmax2, ymax2 = box2
|
|
368
|
+
# 计算每个矩形的面积
|
|
369
|
+
s1 = (xmax1 - xmin1) * (ymax1 - ymin1) # C的面积
|
|
370
|
+
s2 = (xmax2 - xmin2) * (ymax2 - ymin2) # G的面积
|
|
371
|
+
|
|
372
|
+
# 计算相交矩形
|
|
373
|
+
xmin = max(xmin1, xmin2)
|
|
374
|
+
ymin = max(ymin1, ymin2)
|
|
375
|
+
xmax = min(xmax1, xmax2)
|
|
376
|
+
ymax = min(ymax1, ymax2)
|
|
377
|
+
|
|
378
|
+
w = max(0, xmax - xmin)
|
|
379
|
+
h = max(0, ymax - ymin)
|
|
380
|
+
area = w * h # C∩G的面积
|
|
381
|
+
iou = area / min(s1, s2)
|
|
382
|
+
return iou
|
|
383
|
+
|
|
384
|
+
|
|
324
385
|
class YOLOCoords(object):
|
|
325
386
|
def __init__(self, max_boxes=120, norm=False):
|
|
326
387
|
self.max_boxes = max_boxes
|
|
@@ -245,11 +245,11 @@ def video_capture(video_file: int or str, save_video: str or int = None, interva
|
|
|
245
245
|
end = min(end, num_frames) # TODO 当num_frames<0时,使用0<end<count继续播放
|
|
246
246
|
interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
|
|
247
247
|
save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
|
|
248
|
-
count =
|
|
248
|
+
count = 0
|
|
249
249
|
video_writer = None
|
|
250
250
|
while True:
|
|
251
251
|
ret, frame = video_cap.read()
|
|
252
|
-
if count % interval == 0 and count >=
|
|
252
|
+
if count % interval == 0 and count >= start:
|
|
253
253
|
# TODO 设置抽帧的位置,但某些格式视频容易出现问题
|
|
254
254
|
# if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
|
|
255
255
|
# ret, frame = video_cap.read()
|
|
@@ -297,11 +297,11 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
|
|
|
297
297
|
end = min(end, num_frames) # TODO 当num_frames<0时,使用0<end<count继续播放
|
|
298
298
|
interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
|
|
299
299
|
save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
|
|
300
|
-
count =
|
|
300
|
+
count = 0
|
|
301
301
|
video_writer = None
|
|
302
302
|
while True:
|
|
303
303
|
ret, frame = video_cap.read()
|
|
304
|
-
if count % interval == 0 and count >=
|
|
304
|
+
if count % interval == 0 and count >= start:
|
|
305
305
|
# TODO 设置抽帧的位置,但某些格式视频容易出现问题
|
|
306
306
|
# if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
|
|
307
307
|
# ret, frame = video_cap.read()
|
|
@@ -123,6 +123,10 @@ class Dataset(object):
|
|
|
123
123
|
image_id.append(line)
|
|
124
124
|
return image_id
|
|
125
125
|
|
|
126
|
+
@staticmethod
|
|
127
|
+
def read_files(filename, split=None): # TODO 避免兼容问题
|
|
128
|
+
return Dataset.read_file(filename, split=split)
|
|
129
|
+
|
|
126
130
|
@staticmethod
|
|
127
131
|
def get_file_list(dir_root, postfix=['*.jpg'], basename=True):
|
|
128
132
|
"""
|
|
@@ -38,10 +38,14 @@ class TextDataset(Dataset):
|
|
|
38
38
|
:param check:
|
|
39
39
|
:param kwargs: use_max,use_mean,crop_scale,resample,save_info
|
|
40
40
|
"""
|
|
41
|
-
self.
|
|
41
|
+
self.data_file = data_file
|
|
42
|
+
self.data_root = data_root
|
|
42
43
|
self.use_rgb = use_rgb
|
|
43
44
|
self.transform = transform
|
|
44
45
|
self.phase = phase
|
|
46
|
+
self.shuffle = shuffle
|
|
47
|
+
self.check = check
|
|
48
|
+
self.kwargs = kwargs
|
|
45
49
|
self.label_index = kwargs.get("label_index", "label") # 类别字段key
|
|
46
50
|
self.class_name, self.class_dict = self.parser_classes(class_name)
|
|
47
51
|
self.item_list = self.parser_dataset(data_file, data_root=data_root, label_index=self.label_index,
|
|
@@ -391,6 +391,7 @@ def show_target_image(image, bboxes, labels, points, color=(), thickness=1):
|
|
|
391
391
|
# image = image_utils.draw_key_point_in_image(image, points)
|
|
392
392
|
image = image_utils.draw_image_contours(image, points, labels, color=color, thickness=thickness)
|
|
393
393
|
image_utils.cv_show_image("det", image)
|
|
394
|
+
return image
|
|
394
395
|
|
|
395
396
|
|
|
396
397
|
if __name__ == "__main__":
|
|
@@ -25,6 +25,7 @@ from tqdm import tqdm
|
|
|
25
25
|
|
|
26
26
|
IMG_POSTFIX = ['*.jpg', '*.jpeg', '*.png', '*.tif', "*.JPG", "*.bmp"]
|
|
27
27
|
VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv"]
|
|
28
|
+
AUDIO_POSTFIX = ['*.mp3', '*.wav']
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
def str2bool(v):
|
|
@@ -71,6 +72,21 @@ def get_file_size(file, rate=1024):
|
|
|
71
72
|
return os.path.getsize(file) / rate
|
|
72
73
|
|
|
73
74
|
|
|
75
|
+
def replace_elements(items, src, dst, ignore=True):
|
|
76
|
+
"""
|
|
77
|
+
将列表中,值为src改为dst
|
|
78
|
+
:param items:
|
|
79
|
+
:param src:
|
|
80
|
+
:param dst:
|
|
81
|
+
:param ignore: 是否提出空的数据
|
|
82
|
+
:return:
|
|
83
|
+
"""
|
|
84
|
+
for i, item in enumerate(items):
|
|
85
|
+
if item == src: items[i] = dst
|
|
86
|
+
if ignore: items = [it for it in items if str(it)]
|
|
87
|
+
return items
|
|
88
|
+
|
|
89
|
+
|
|
74
90
|
def combine_flags(flags: list, use_time=True, info=True):
|
|
75
91
|
"""
|
|
76
92
|
:param flags:
|
|
@@ -631,6 +631,7 @@ def resize_image_padding(image, size, color=(0, 0, 0), interpolation=cv2.INTER_L
|
|
|
631
631
|
:param color: 短边进行填充的color value
|
|
632
632
|
:return:
|
|
633
633
|
"""
|
|
634
|
+
if not size: return image
|
|
634
635
|
h, w = image.shape[:2]
|
|
635
636
|
if w / h > size[0] / size[1] > 0:
|
|
636
637
|
dsize = (size[0], None)
|
|
@@ -1753,8 +1754,6 @@ def nms_boxes_cv2(boxes: np.ndarray, scores: np.ndarray, labels: np.ndarray, sco
|
|
|
1753
1754
|
return index
|
|
1754
1755
|
|
|
1755
1756
|
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
1757
|
def file2base64(file):
|
|
1759
1758
|
image_base64 = base64.b64encode(open(file, 'rb').read()).decode()
|
|
1760
1759
|
return image_base64
|
|
@@ -2880,15 +2879,15 @@ def frames2gif_by_pil(frames, gif_file="test.gif", fps=2, loop=0, use_rgb=False)
|
|
|
2880
2879
|
optimize=False, loop=loop)
|
|
2881
2880
|
|
|
2882
2881
|
|
|
2883
|
-
def image_dir2gif(image_dir, size=None, gif_file=None, interval=1, fps=4, loop=0, padding=
|
|
2882
|
+
def image_dir2gif(image_dir, size=None, gif_file=None, interval=1, fps=4, loop=0, padding=False, crop=[], use_pil=True):
|
|
2884
2883
|
if not gif_file: gif_file = os.path.join(os.path.dirname(image_dir), os.path.basename(image_dir) + ".gif")
|
|
2885
2884
|
file_list = file_utils.get_images_list(image_dir)
|
|
2886
2885
|
image_file2gif(file_list, size=size, gif_file=gif_file, interval=interval, fps=fps, loop=loop,
|
|
2887
|
-
padding=padding, use_pil=use_pil)
|
|
2886
|
+
padding=padding, crop=crop, use_pil=use_pil)
|
|
2888
2887
|
|
|
2889
2888
|
|
|
2890
2889
|
def image_file2gif(file_list, size=None, gif_file="test.gif", interval=1, fps=4, loop=0,
|
|
2891
|
-
padding=True, use_pil=False):
|
|
2890
|
+
padding=True, crop=[], use_pil=False):
|
|
2892
2891
|
"""
|
|
2893
2892
|
pip install imageio
|
|
2894
2893
|
uri:合成后的gif动图的名字,可以随意更改。
|
|
@@ -2902,6 +2901,7 @@ def image_file2gif(file_list, size=None, gif_file="test.gif", interval=1, fps=4,
|
|
|
2902
2901
|
:param size:gif图片的大小
|
|
2903
2902
|
:param gif_file: 输出的GIF图的路径
|
|
2904
2903
|
:param fps: 刷新频率
|
|
2904
|
+
:param crop: 裁剪(xmin,ymin,xmax,ymax)
|
|
2905
2905
|
:param loop: 循环次数
|
|
2906
2906
|
:param use_pil: True使用PIL库生成GIF图,文件小,但质量较差
|
|
2907
2907
|
False使用imageio库生成GIF图,文件大,但质量较好
|
|
@@ -2912,6 +2912,7 @@ def image_file2gif(file_list, size=None, gif_file="test.gif", interval=1, fps=4,
|
|
|
2912
2912
|
if count % interval == 0:
|
|
2913
2913
|
bgr = cv2.imread(file)
|
|
2914
2914
|
image = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
|
|
2915
|
+
if len(crop) == 4: image = get_box_crop(image, box=crop)
|
|
2915
2916
|
if padding:
|
|
2916
2917
|
image = resize_image_padding(image, size=size)
|
|
2917
2918
|
else:
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-10-27 13:42:12
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import sys
|
|
10
|
+
from loguru import logger
|
|
11
|
+
|
|
12
|
+
LOG_FORMAT = {
|
|
13
|
+
"simple": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}| {message}",
|
|
14
|
+
"name": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}|{name} {line:4}| {message}", # 打印文件名
|
|
15
|
+
"module": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}|{name}.{module} {line:4}| {message}", # 打印模块名
|
|
16
|
+
"function": "{time:YYYY-MM-DD HH:mm:ss}|{level:7}|{name}.{module}.{function} {line:4}| {message}", # 打印函数
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def set_logger(name="", level="debug", logfile=None, format="simple", is_main_process=True):
|
|
21
|
+
"""
|
|
22
|
+
logger = set_logger(level="debug", logfile="log.txt")
|
|
23
|
+
url: https://www.cnblogs.com/shiyitongxue/p/17870527.html
|
|
24
|
+
:param level: 设置log输出级别:debug,info,warning,error
|
|
25
|
+
:param logfile: log保存路径,如果为None,则在控制台打印log
|
|
26
|
+
:param is_main_process: 是否是主进程
|
|
27
|
+
:return:
|
|
28
|
+
"""
|
|
29
|
+
format = LOG_FORMAT.get(format, LOG_FORMAT.get("simple"))
|
|
30
|
+
if is_main_process:
|
|
31
|
+
logger.configure(handlers=[{"sink": sys.stderr, # 打印到控制台,sys.stderr表示控制台
|
|
32
|
+
"format": format, "colorize": True, "level": level.upper()},
|
|
33
|
+
{"sink": logfile, # 输出到文件,文件名app.log
|
|
34
|
+
"format": format, "colorize": False, "level": level.upper(), "rotation": "100 MB",
|
|
35
|
+
"retention": "10 days"}
|
|
36
|
+
])
|
|
37
|
+
else:
|
|
38
|
+
logger.configure(handlers=[{"sink": sys.stderr, # 打印到控制台,sys.stderr表示控制台
|
|
39
|
+
"format": format, "colorize": True, "level": "ERROR"}
|
|
40
|
+
])
|
|
41
|
+
return logger
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def set_logger_v2(name="", level="debug", logfile=None, format=None, is_main_process=True):
|
|
45
|
+
"""
|
|
46
|
+
logger = set_logger(level="debug", logfile="log.txt")
|
|
47
|
+
url: https://www.cnblogs.com/shiyitongxue/p/17870527.html
|
|
48
|
+
:param level: 设置log输出级别:debug,info,warning,error
|
|
49
|
+
:param logfile: log保存路径,如果为None,则在控制台打印log
|
|
50
|
+
:param is_main_process: 是否是主进程
|
|
51
|
+
:return:
|
|
52
|
+
"""
|
|
53
|
+
format = LOG_FORMAT.get(format, LOG_FORMAT.get("line"))
|
|
54
|
+
logger.remove(0) # 去除默认的LOG
|
|
55
|
+
if is_main_process:
|
|
56
|
+
# 每天创建一个新的文件,一个星期定期清理一次
|
|
57
|
+
logger.add(logfile, level=level.upper(), rotation="1 day", retention="7 days", format=format)
|
|
58
|
+
logger.add(sys.stderr, level=level.upper(), format=format)
|
|
59
|
+
else:
|
|
60
|
+
logger.add(sys.stderr, level="ERROR", format=format)
|
|
61
|
+
return logger
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_logger():
|
|
65
|
+
return logger
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def example():
|
|
69
|
+
logger = get_logger()
|
|
70
|
+
logger.debug("debug")
|
|
71
|
+
logger.info("info")
|
|
72
|
+
logger.warning("warning")
|
|
73
|
+
logger.error("error")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if __name__ == '__main__':
|
|
77
|
+
logfile = "./log.log"
|
|
78
|
+
logger = set_logger(logfile=logfile, is_main_process=True, level="debug")
|
|
79
|
+
example()
|
|
@@ -13,7 +13,7 @@ import heapq
|
|
|
13
13
|
|
|
14
14
|
def feature_norm(x, axis=-1):
|
|
15
15
|
"""
|
|
16
|
-
|
|
16
|
+
特征归一化,会使得特征L2之和为1, 即||y||=L2(y,axis=-1)
|
|
17
17
|
y = x / x.norm(dim=-1, keepdim=True) # torch
|
|
18
18
|
y = x / np.linalg.norm(x, axis=-1, keepdims=True) # numpy
|
|
19
19
|
:param x: 输入二维矩阵(N,embedding-size),每行是一个样本,样本特征维度为embedding-size
|
|
@@ -24,6 +24,21 @@ def feature_norm(x, axis=-1):
|
|
|
24
24
|
return y
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
def torch_norm(x, axis=-1):
|
|
28
|
+
"""
|
|
29
|
+
特征归一化:
|
|
30
|
+
y = x / x.norm(dim=-1, keepdim=True) # torch
|
|
31
|
+
y = x / np.linalg.norm(x, axis=-1, keepdims=True) # numpy
|
|
32
|
+
:param x: 输入二维矩阵(N,embedding-size),每行是一个样本,样本特征维度为embedding-size
|
|
33
|
+
:param axis:
|
|
34
|
+
:return:
|
|
35
|
+
"""
|
|
36
|
+
import torch
|
|
37
|
+
x = torch.from_numpy(x)
|
|
38
|
+
y = x / x.norm(dim=-1, keepdim=True) # torch
|
|
39
|
+
return y
|
|
40
|
+
|
|
41
|
+
|
|
27
42
|
def feature_similarity(inputs, target):
|
|
28
43
|
"""
|
|
29
44
|
计算特征相似性
|
|
@@ -645,8 +660,11 @@ class Preprocessing(object):
|
|
|
645
660
|
if __name__ == "__main__":
|
|
646
661
|
from pybaseutils import numpy_utils
|
|
647
662
|
|
|
648
|
-
y = np.array([[0., 0.1, 0], [0, 0.1, 1], [0, 0.1, 2]])
|
|
649
|
-
x = np.array([[0, 0.1, 1], [0, 0.1, 2], [0., 0.1, 0]])
|
|
650
|
-
|
|
663
|
+
y = np.array([[0., 0.1, 0, 1], [0, 0.1, 1, 1], [0, 0.1, 2, 1]])
|
|
664
|
+
x = np.array([[0, 0.1, 1, 1], [0, 0.1, 2, 1], [0., 0.1, 0, 1]])
|
|
665
|
+
x1 = feature_norm(x)
|
|
666
|
+
x2 = torch_norm(x).numpy()
|
|
667
|
+
print(l2(x1, axis=-1))
|
|
668
|
+
print(l2(x2, axis=-1))
|
|
651
669
|
y = feature_norm(y)
|
|
652
|
-
print(feature_matching(
|
|
670
|
+
print(feature_matching(x1, y))
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.1
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: pybaseutils
|
|
5
5
|
Home-page: https://github.com/PanJinquan/base-utils
|
|
6
6
|
Author: PanJinquan
|
|
7
7
|
Author-email: 390737991@qq.com
|
|
8
8
|
License: MIT
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
License-File: LICENCE
|
|
11
10
|
|
|
12
11
|
base-utils
|
|
@@ -139,5 +138,3 @@ base_utils(C++)
|
|
|
139
138
|
return 0;
|
|
140
139
|
}
|
|
141
140
|
|
|
142
|
-
|
|
143
|
-
|
|
@@ -14,6 +14,7 @@ pybaseutils/heatmap_utils.py
|
|
|
14
14
|
pybaseutils/image_utils.py
|
|
15
15
|
pybaseutils/json_utils.py
|
|
16
16
|
pybaseutils/log.py
|
|
17
|
+
pybaseutils/log_utils.py
|
|
17
18
|
pybaseutils/logger.py
|
|
18
19
|
pybaseutils/numpy_utils.py
|
|
19
20
|
pybaseutils/pandas_utils.py
|
|
@@ -132,6 +133,7 @@ test_py/demo_ffmpy.py
|
|
|
132
133
|
test_py/demo_for_pair_file.py
|
|
133
134
|
test_py/demo_for_polygon.py
|
|
134
135
|
test_py/demo_for_trt.py
|
|
136
|
+
test_py/demo_get_file_label.py
|
|
135
137
|
test_py/demo_get_file_list.py
|
|
136
138
|
test_py/demo_gif.py
|
|
137
139
|
test_py/demo_gif_video.py
|
|
@@ -150,6 +152,7 @@ test_py/demo_standard_image .py
|
|
|
150
152
|
test_py/demo_standard_video .py
|
|
151
153
|
test_py/demo_taichi.py
|
|
152
154
|
test_py/demo_video.py
|
|
155
|
+
test_py/demo_video_crop.py
|
|
153
156
|
test_py/demo_voc_crop.py
|
|
154
157
|
test_py/demo_voc_vis.py
|
|
155
158
|
test_py/demo_word_similar.py
|
|
@@ -159,6 +162,8 @@ test_py/get_file_list.py
|
|
|
159
162
|
test_py/kafka_worker.py
|
|
160
163
|
test_py/men_tracemalloc.py
|
|
161
164
|
test_py/performance.py
|
|
165
|
+
test_py/Image_enhance/__init__.py
|
|
166
|
+
test_py/Image_enhance/dmeo01.py
|
|
162
167
|
test_py/WebCrawler/__init__.py
|
|
163
168
|
test_py/WebCrawler/search_image.py
|
|
164
169
|
test_py/WebCrawler/search_image_for_baidu.py
|
|
@@ -238,6 +243,11 @@ test_py/image_correction/__init__.py
|
|
|
238
243
|
test_py/image_correction/demo_correction_v1.py
|
|
239
244
|
test_py/image_correction/demo_correction_v2.py
|
|
240
245
|
test_py/image_correction/demo_correction_v3.py
|
|
246
|
+
test_py/milvus_demo/__init__.py
|
|
247
|
+
test_py/milvus_demo/demo01.py
|
|
248
|
+
test_py/milvus_demo/demo02.py
|
|
249
|
+
test_py/milvus_demo/hello_milvus.py
|
|
250
|
+
test_py/milvus_demo/milvus_client.py
|
|
241
251
|
test_py/pose/__init__.py
|
|
242
252
|
test_py/pose/human_pose.py
|
|
243
253
|
test_py/redis_py/__init__.py
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail : 390737991@qq.com
|
|
5
|
+
@Date : 2022-12-31 11:37:30
|
|
6
|
+
@Brief : https://blog.csdn.net/qdPython/article/details/121381363
|
|
7
|
+
"""
|
|
8
|
+
import cv2
|
|
9
|
+
import random
|
|
10
|
+
import types
|
|
11
|
+
import numpy as np
|
|
12
|
+
from typing import Callable
|
|
13
|
+
from pybaseutils import image_utils, file_utils, text_utils
|
|
14
|
+
from pybaseutils.cvutils import video_utils
|
|
15
|
+
import cv2
|
|
16
|
+
import re
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def equalizeHist(image):
|
|
20
|
+
image = cv2.equalizeHist(image)
|
|
21
|
+
return image
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == '__main__':
|
|
25
|
+
image_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/暗光数据"
|
|
26
|
+
image_list = file_utils.get_images_list(image_dir)
|
|
27
|
+
for image_file in image_list:
|
|
28
|
+
src = cv2.imread(image_file)
|
|
29
|
+
dst = equalizeHist(src)
|
|
30
|
+
image_utils.cv_show_image("dst", dst, delay=10)
|
|
31
|
+
image_utils.cv_show_image("src", src, delay=0)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : Pan
|
|
4
|
+
@E-mail : 390737991@qq.com
|
|
5
|
+
@Date : 2022-10-12 16:21:55
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
sys.path.insert(0, os.getcwd())
|
|
12
|
+
import cv2
|
|
13
|
+
from pybaseutils.converter.convert_labelme2voc import Labelme2VOC
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def build_dataset(anno_dir, class_dict=None):
|
|
17
|
+
# anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v1-det/dataset-v01/json"
|
|
18
|
+
data_root = os.path.dirname(anno_dir)
|
|
19
|
+
image_dir = os.path.join(data_root, "JPEGImages")
|
|
20
|
+
# class_dict = {"身穿工作服": "person", "未穿工作服": "person"}
|
|
21
|
+
# out_root = os.path.join(data_root, "person")
|
|
22
|
+
# out_image_dir = os.path.join(data_root, "person")
|
|
23
|
+
print(anno_dir)
|
|
24
|
+
lm = Labelme2VOC(image_dir, anno_dir, class_name=class_dict, shuffle=False)
|
|
25
|
+
lm.build_dataset(data_root, class_dict={}, out_img=False, vis=False, crop=False)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def build_datasets():
|
|
29
|
+
anno_dirs = [
|
|
30
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v21/json',
|
|
31
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v22/json',
|
|
32
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v23/json',
|
|
33
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v24/json',
|
|
34
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v25/json',
|
|
35
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v26/json',
|
|
36
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v27/json',
|
|
37
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v28/json',
|
|
38
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v29/json',
|
|
39
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v29-test/json',
|
|
40
|
+
]
|
|
41
|
+
for anno_dir in anno_dirs:
|
|
42
|
+
build_dataset(anno_dir)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
if __name__ == "__main__":
|
|
46
|
+
# 将AIJE项目数据集,转换为VOC数据集
|
|
47
|
+
build_datasets()
|
|
@@ -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-
|
|
67
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/test-v1/aije-action-train-v02/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,
|
|
@@ -77,7 +77,7 @@ if __name__ == "__main__":
|
|
|
77
77
|
shuffle=False)
|
|
78
78
|
print("have num:{}".format(len(dataset)))
|
|
79
79
|
class_name = dataset.class_name
|
|
80
|
-
scale = [1.
|
|
80
|
+
scale = [1.5,1.5]
|
|
81
81
|
flag = str(scale[0]).replace(".", "p")
|
|
82
82
|
flag = None
|
|
83
83
|
# scale = None
|
|
@@ -16,12 +16,13 @@ from pybaseutils import image_utils, file_utils
|
|
|
16
16
|
def video_converter(inp_dir, out_dir):
|
|
17
17
|
files = file_utils.get_files_list(inp_dir, postfix=["*.dav"])
|
|
18
18
|
for video_file in tqdm(files):
|
|
19
|
+
print(video_file)
|
|
19
20
|
save_video = file_utils.create_dir(out_dir, None, os.path.basename(video_file))
|
|
20
21
|
save_video = save_video.replace(".dav", ".mp4")
|
|
21
22
|
video_utils.video2video(video_file, save_video, interval=1, vis=False)
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
if __name__ == '__main__':
|
|
25
|
-
inp_dir = "/home/PKing/
|
|
26
|
-
out_dir = "/home/PKing/
|
|
26
|
+
inp_dir = "/home/PKing/Downloads/NVR"
|
|
27
|
+
out_dir = "/home/PKing/Downloads/NVR"
|
|
27
28
|
video_converter(inp_dir, out_dir)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-02-05 18:19:18
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import cv2
|
|
10
|
+
import numpy as np
|
|
11
|
+
import random
|
|
12
|
+
import json
|
|
13
|
+
from PIL import Image
|
|
14
|
+
from typing import Dict
|
|
15
|
+
from tqdm import tqdm
|
|
16
|
+
from pybaseutils import image_utils, file_utils, json_utils, base64_utils, time_utils
|
|
17
|
+
from pybaseutils.cvutils import video_utils
|
|
18
|
+
from pybaseutils.transforms import transform_utils
|
|
19
|
+
from pybaseutils.converter import build_voc, build_labelme
|
|
20
|
+
from pybaseutils.dataloader import parser_labelme
|
|
21
|
+
import xmltodict
|
|
22
|
+
|
|
23
|
+
import torch
|
|
24
|
+
import torch.nn as nn
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CMDLoss(nn.Module):
|
|
28
|
+
"""计算两个分布的中心矩差差异的Loss函数"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, num_channels, use_gpu=True):
|
|
31
|
+
super(CMDLoss, self).__init__()
|
|
32
|
+
self.use_gpu = use_gpu
|
|
33
|
+
self.num_channels = num_channels
|
|
34
|
+
self.register_buffer('one', torch.tensor(1.0))
|
|
35
|
+
|
|
36
|
+
def forward(self, input, target):
|
|
37
|
+
# 计算均值
|
|
38
|
+
input_mean = torch.mean(input, dim=[2, 3], keepdim=True)
|
|
39
|
+
target_mean = torch.mean(target, dim=[2, 3], keepdim=True)
|
|
40
|
+
|
|
41
|
+
# 计算方差
|
|
42
|
+
input_var = torch.mean((input - input_mean) ** 2, dim=[2, 3], keepdim=True)
|
|
43
|
+
target_var = torch.mean((target - target_mean) ** 2, dim=[2, 3], keepdim=True)
|
|
44
|
+
|
|
45
|
+
# 计算协方差
|
|
46
|
+
input_mean_expand = input_mean.expand_as(input)
|
|
47
|
+
target_mean_expand = target_mean.expand_as(target)
|
|
48
|
+
cov = torch.mean((input - input_mean_expand) * (target - target_mean_expand), dim=[2, 3], keepdim=True)
|
|
49
|
+
|
|
50
|
+
# 计算CMD
|
|
51
|
+
c = torch.mean(self.one / self.num_channels * cov, dim=[2, 3], keepdim=True)
|
|
52
|
+
d = torch.mean(self.one / self.num_channels * (input_var - target_var), dim=[2, 3], keepdim=True)
|
|
53
|
+
cmd_loss = c / (d + 1e-5)
|
|
54
|
+
|
|
55
|
+
return cmd_loss
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import cv2
|
|
9
9
|
import random
|
|
10
10
|
import types
|
|
11
|
+
import torch
|
|
11
12
|
import numpy as np
|
|
12
13
|
from typing import Callable
|
|
13
14
|
from pybaseutils import image_utils, file_utils, text_utils
|
|
@@ -16,9 +17,7 @@ import cv2
|
|
|
16
17
|
import re
|
|
17
18
|
|
|
18
19
|
if __name__ == '__main__':
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
matches = text_utils.find_match_texts(texts, subs, org=True)
|
|
24
|
-
print(matches)
|
|
20
|
+
accs = np.asarray([0.6205, 0.5752, 0.9296, 0.9906, 0.4833, 0.0756, 0.000001, 0, 0, 0.8205, 0.9205])
|
|
21
|
+
print(accs,np.mean(accs))
|
|
22
|
+
accs = accs[accs > 0]
|
|
23
|
+
print(accs,np.mean(accs))
|