pybaseutils 2.2.8__tar.gz → 2.2.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/PKG-INFO +1 -2
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/video_utils.py +5 -3
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_image_text.py +1 -27
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_labelme.py +14 -10
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/file_utils.py +21 -1
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/time_utils.py +10 -8
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/PKG-INFO +1 -2
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/SOURCES.txt +3 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_labelme_crop.py +3 -3
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_video_aije.py +5 -5
- pybaseutils-2.2.9/test_py/camera/__init__.py +7 -0
- pybaseutils-2.2.9/test_py/camera/demo.py +89 -0
- pybaseutils-2.2.9/test_py/camera/main.py +147 -0
- pybaseutils-2.2.9/test_py/demo1.py +17 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_lableme_vis.py +1 -1
- pybaseutils-2.2.8/test_py/demo1.py +0 -55
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/LICENCE +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/README.md +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/image_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/log.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/logger.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/augment_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/setup.cfg +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/setup.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/WebCrawler/search_image.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/WebCrawler/search_image_for_baidu.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/main.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/class_names.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo2.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo3.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_video.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/flask_demo/func.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/flask_demo/server.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/performance.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/base.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/component.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/main.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/registry/register.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.2.8 → pybaseutils-2.2.9}/test_py/test_fr/idcardocr.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.9
|
|
4
4
|
Summary: pybaseutils
|
|
5
5
|
Home-page: https://github.com/PanJinquan/base-utils
|
|
6
6
|
Author: PanJinquan
|
|
@@ -137,4 +137,3 @@ base_utils(C++)
|
|
|
137
137
|
DEBUG_IMSHOW("image", image);
|
|
138
138
|
return 0;
|
|
139
139
|
}
|
|
140
|
-
|
|
@@ -299,12 +299,14 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
|
|
|
299
299
|
save_fps = max(kwargs.get("speed", 1) * fps // interval, 1)
|
|
300
300
|
count = 0
|
|
301
301
|
video_writer = None
|
|
302
|
+
use_fast = kwargs.get("use_fast", False)
|
|
302
303
|
while True:
|
|
303
|
-
ret, frame = video_cap.read()
|
|
304
|
+
ret, frame = (False, None) if use_fast else video_cap.read()
|
|
304
305
|
if count % interval == 0 and count >= start:
|
|
305
306
|
# TODO 设置抽帧的位置,但某些格式视频容易出现问题
|
|
306
|
-
|
|
307
|
-
|
|
307
|
+
if use_fast and isinstance(video_file, str):
|
|
308
|
+
video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
|
|
309
|
+
ret, frame = video_cap.read()
|
|
308
310
|
if not ret or 0 < end < count or frame is None: break
|
|
309
311
|
if task: frame = task(frame, **kwargs)
|
|
310
312
|
data_info = {"frame": frame, "count": count, "w": w, "h": h, "fps": fps}
|
|
@@ -16,7 +16,7 @@ import random
|
|
|
16
16
|
import math
|
|
17
17
|
import cv2
|
|
18
18
|
from tqdm import tqdm
|
|
19
|
-
from
|
|
19
|
+
from pybaseutils.dataloader.base_dataset import Dataset, ConcatDataset
|
|
20
20
|
from pybaseutils import image_utils, file_utils, json_utils
|
|
21
21
|
from pybaseutils.dataloader import data_resample
|
|
22
22
|
|
|
@@ -138,32 +138,6 @@ class TextDataset(Dataset):
|
|
|
138
138
|
item_list += data
|
|
139
139
|
return item_list
|
|
140
140
|
|
|
141
|
-
def parser_classes(self, class_name):
|
|
142
|
-
"""
|
|
143
|
-
class_dict = {class_name: i for i, class_name in enumerate(class_name)}
|
|
144
|
-
:param
|
|
145
|
-
:return:
|
|
146
|
-
"""
|
|
147
|
-
if isinstance(class_name, str):
|
|
148
|
-
class_name = file_utils.read_data(class_name, split=None)
|
|
149
|
-
if isinstance(class_name, list) and len(class_name) > 0:
|
|
150
|
-
class_dict = {}
|
|
151
|
-
for i, name in enumerate(class_name):
|
|
152
|
-
name = name.split(",")
|
|
153
|
-
for n in name: class_dict[n] = i
|
|
154
|
-
elif isinstance(class_name, dict) and len(class_name) > 0:
|
|
155
|
-
class_dict = class_name
|
|
156
|
-
class_name = list(class_dict.keys())
|
|
157
|
-
else:
|
|
158
|
-
class_dict = None
|
|
159
|
-
if class_dict:
|
|
160
|
-
class_dict = json_utils.dict_sort_by_value(class_dict, reverse=False)
|
|
161
|
-
class_name = {}
|
|
162
|
-
for n, i in class_dict.items():
|
|
163
|
-
class_name[i] = "{},{}".format(class_name[i], n) if i in class_name else n
|
|
164
|
-
class_name = list(class_name.values())
|
|
165
|
-
return class_name, class_dict
|
|
166
|
-
|
|
167
141
|
def check_item(self, item_list):
|
|
168
142
|
"""
|
|
169
143
|
:param item_list:
|
|
@@ -45,12 +45,13 @@ class LabelMeDataset(Dataset):
|
|
|
45
45
|
:param shuffle:
|
|
46
46
|
:param check: 当class_name=None且check=True,将自动获取所有class
|
|
47
47
|
:param min_points: 当标注的轮廓点的个数小于min_points,会被剔除;负数不剔除
|
|
48
|
-
:param kwargs:
|
|
48
|
+
:param kwargs: read_image: 是否读取图片,否则image=None
|
|
49
49
|
"""
|
|
50
50
|
super(LabelMeDataset, self).__init__()
|
|
51
51
|
self.min_area = 1 / 1000 # 如果前景面积不足0.1%,则去除
|
|
52
52
|
self.use_rgb = use_rgb
|
|
53
53
|
self.min_points = min_points
|
|
54
|
+
self.kwargs = kwargs
|
|
54
55
|
self.class_name, self.class_dict = self.parser_classes(class_name)
|
|
55
56
|
parser = self.parser_paths(filename, data_root, anno_dir, image_dir)
|
|
56
57
|
self.data_root, self.anno_dir, self.image_dir, self.image_ids = parser
|
|
@@ -154,8 +155,8 @@ class LabelMeDataset(Dataset):
|
|
|
154
155
|
elif anno_dir and not image_ids:
|
|
155
156
|
image_ids = self.get_file_list(anno_dir, postfix=["*.json", "*.xml"], basename=False)
|
|
156
157
|
image_ids = [os.path.basename(f) for f in image_ids]
|
|
157
|
-
assert os.path.exists(
|
|
158
|
-
assert os.path.exists(
|
|
158
|
+
assert isinstance(anno_dir, str) and os.path.exists(anno_dir), "no anno_dir :{}".format(anno_dir)
|
|
159
|
+
assert isinstance(image_dir, str) and os.path.exists(image_dir), "no image_dir:{}".format(image_dir)
|
|
159
160
|
assert len(image_ids) > 0, f"image_ids is empty,image_dir={image_dir},anno_dir={anno_dir}"
|
|
160
161
|
return data_root, anno_dir, image_dir, image_ids
|
|
161
162
|
|
|
@@ -167,13 +168,17 @@ class LabelMeDataset(Dataset):
|
|
|
167
168
|
image_id = self.index2id(index)
|
|
168
169
|
image_file, anno_file, image_id = self.get_image_anno_file(image_id)
|
|
169
170
|
annotation, width, height = self.load_annotations(anno_file)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
if self.kwargs.get("read_image", True): # 是否读取图片
|
|
172
|
+
image = self.read_image(image_file, use_rgb=self.use_rgb)
|
|
173
|
+
shape = image.shape
|
|
174
|
+
size = [shape[1], shape[0]]
|
|
175
|
+
else:
|
|
176
|
+
image, shape, size = None, None, [width, height]
|
|
177
|
+
data_info = self.parser_annotation(annotation, self.class_dict, shape=shape,
|
|
178
|
+
min_points=self.min_points, unique=self.unique)
|
|
174
179
|
# TODO dict(boxes, labels, points, groups, names, keypoints)
|
|
175
180
|
data_info.update({"image": image, "image_file": image_file, "anno_file": anno_file,
|
|
176
|
-
"size":
|
|
181
|
+
"size": size})
|
|
177
182
|
return data_info
|
|
178
183
|
|
|
179
184
|
@staticmethod
|
|
@@ -448,7 +453,7 @@ def parser_labelme(anno_file, class_dict={}, shape=None):
|
|
|
448
453
|
def draw_keypoints_image(image, boxes=[], keypoints=[], thickness=1, vis_id=False):
|
|
449
454
|
"""绘制keypoints"""
|
|
450
455
|
h, w = image.shape[:2]
|
|
451
|
-
if len(keypoints)== 0: return image
|
|
456
|
+
if len(keypoints) == 0: return image
|
|
452
457
|
if len(boxes) == 0: boxes = [(0, 0, w, h)] * len(keypoints)
|
|
453
458
|
from pybaseutils.pose import bones_utils
|
|
454
459
|
target_bones = bones_utils.get_target_bones("coco_person")
|
|
@@ -480,7 +485,6 @@ if __name__ == "__main__":
|
|
|
480
485
|
from pybaseutils.converter import build_labelme
|
|
481
486
|
|
|
482
487
|
anno_dir = "/home/PKing/Downloads/sample/images"
|
|
483
|
-
anno_dir = "/home/PKing/Downloads/冲击试验/video-ok/NVR_ch2_main_20241121093213_20241121100115/images"
|
|
484
488
|
# anno_dir = "/home/PKing/Downloads/冲击试验/sample/images"
|
|
485
489
|
names = None
|
|
486
490
|
dataset = LabelMeDatasets(filename=None,
|
|
@@ -22,6 +22,7 @@ import argparse
|
|
|
22
22
|
import itertools
|
|
23
23
|
from datetime import datetime
|
|
24
24
|
from tqdm import tqdm
|
|
25
|
+
from pybaseutils import text_utils
|
|
25
26
|
|
|
26
27
|
IMG_POSTFIX = ['*.jpg', '*.jpeg', '*.png', '*.tif', "*.JPG", "*.bmp"]
|
|
27
28
|
VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv", "*.dav"]
|
|
@@ -793,7 +794,7 @@ def get_files_lists(file_dir, postfix=IMG_POSTFIX, subname="", shuffle=False, su
|
|
|
793
794
|
return file_list
|
|
794
795
|
|
|
795
796
|
|
|
796
|
-
def
|
|
797
|
+
def get_files_list_v1(file_dir, prefix="", postfix=None, basename=False, sub=False):
|
|
797
798
|
"""
|
|
798
799
|
获得file_dir目录下,后缀名为postfix所有文件列表,包括子目录所有文件
|
|
799
800
|
:param file_dir:
|
|
@@ -822,6 +823,25 @@ def get_files_list(file_dir, prefix="", postfix=None, basename=False, sub=False)
|
|
|
822
823
|
return file_list
|
|
823
824
|
|
|
824
825
|
|
|
826
|
+
def get_files_list(file_dir, prefix="", postfix=None, basename=False, sub=False):
|
|
827
|
+
"""
|
|
828
|
+
获得file_dir目录下,后缀名为postfix所有文件列表,包括子目录所有文件
|
|
829
|
+
:param file_dir:
|
|
830
|
+
:param prefix: 前缀
|
|
831
|
+
:param postfix: 后缀
|
|
832
|
+
:param basename: 返回的列表是文件名(True),还是文件的完整路径(False)
|
|
833
|
+
:param sub: 是否去除根路径
|
|
834
|
+
:return:
|
|
835
|
+
"""
|
|
836
|
+
file_list = get_all_files(file_dir)
|
|
837
|
+
file_list = text_utils.find_match_texts(file_list, pattern=[prefix], org=True) if prefix else file_list
|
|
838
|
+
file_list = text_utils.find_match_texts(file_list, pattern=postfix, org=True) if postfix else file_list
|
|
839
|
+
file_list.sort()
|
|
840
|
+
file_list = get_basename(file_list) if basename else file_list
|
|
841
|
+
if sub: file_list = get_sub_list(file_list, dirname=file_dir)
|
|
842
|
+
return file_list
|
|
843
|
+
|
|
844
|
+
|
|
825
845
|
def get_files_list_v2(file_dir, prefix="", postfix=None, basename=False):
|
|
826
846
|
"""
|
|
827
847
|
获取file_dir目录下,所有文本路径,但不包括子目录文件
|
|
@@ -51,7 +51,8 @@ def performance(tag=""):
|
|
|
51
51
|
content["avg"],
|
|
52
52
|
content["total"],
|
|
53
53
|
content["count"])
|
|
54
|
-
|
|
54
|
+
tag_ = f"{tag} " if tag else ""
|
|
55
|
+
print("{:20s}{:20s} elapsed: {}".format(tag_, func.__name__, elapsed))
|
|
55
56
|
return result
|
|
56
57
|
|
|
57
58
|
return wrapper
|
|
@@ -78,37 +79,38 @@ class Performance(object):
|
|
|
78
79
|
content["avg"],
|
|
79
80
|
content["total"],
|
|
80
81
|
content["count"])
|
|
81
|
-
|
|
82
|
+
tag_ = f"{self.tag} " if self.tag else ""
|
|
83
|
+
print("{:20s}elapsed: {}\t".format(tag_, elapsed))
|
|
82
84
|
|
|
83
85
|
def task(self):
|
|
84
86
|
pass
|
|
85
87
|
|
|
86
88
|
|
|
87
|
-
@performance("")
|
|
89
|
+
@performance("test1")
|
|
88
90
|
def targe_func1():
|
|
89
91
|
time.sleep(1)
|
|
90
92
|
|
|
91
93
|
|
|
92
|
-
@performance("")
|
|
94
|
+
@performance("test111111")
|
|
93
95
|
def targe_func2():
|
|
94
96
|
time.sleep(0.5)
|
|
95
97
|
|
|
96
98
|
|
|
97
99
|
def targe_func3():
|
|
98
|
-
with Performance("
|
|
100
|
+
with Performance("test222") as p:
|
|
99
101
|
time.sleep(1)
|
|
100
102
|
|
|
101
103
|
|
|
102
104
|
def targe_func4():
|
|
103
|
-
with Performance("
|
|
105
|
+
with Performance("test22222222") as p:
|
|
104
106
|
time.sleep(0.5)
|
|
105
107
|
|
|
106
108
|
|
|
107
109
|
def targe_func():
|
|
108
110
|
targe_func1()
|
|
109
111
|
targe_func2()
|
|
110
|
-
targe_func3()
|
|
111
|
-
targe_func4()
|
|
112
|
+
# targe_func3()
|
|
113
|
+
# targe_func4()
|
|
112
114
|
|
|
113
115
|
|
|
114
116
|
if __name__ == '__main__':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.9
|
|
4
4
|
Summary: pybaseutils
|
|
5
5
|
Home-page: https://github.com/PanJinquan/base-utils
|
|
6
6
|
Author: PanJinquan
|
|
@@ -137,4 +137,3 @@ base_utils(C++)
|
|
|
137
137
|
DEBUG_IMSHOW("image", image);
|
|
138
138
|
return 0;
|
|
139
139
|
}
|
|
140
|
-
|
|
@@ -190,6 +190,9 @@ test_py/audio/main_read.py
|
|
|
190
190
|
test_py/audio/segment.py
|
|
191
191
|
test_py/audio/speechbrain_asr_indoor_prod.py
|
|
192
192
|
test_py/audio/speechbrain_demo.py
|
|
193
|
+
test_py/camera/__init__.py
|
|
194
|
+
test_py/camera/demo.py
|
|
195
|
+
test_py/camera/main.py
|
|
193
196
|
test_py/captcha/__init__.py
|
|
194
197
|
test_py/captcha/demo.py
|
|
195
198
|
test_py/converter/AffectNet.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-
|
|
67
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v31/images"
|
|
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,8 +77,8 @@ 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.
|
|
81
|
-
flag = str(scale[0]).replace(".", "p")
|
|
80
|
+
scale = [1.0, 1.0]
|
|
81
|
+
# flag = str(scale[0]).replace(".", "p")
|
|
82
82
|
flag = None
|
|
83
83
|
# scale = None
|
|
84
84
|
for i in tqdm(range(len(dataset))):
|
|
@@ -84,15 +84,15 @@ def video2frames_demo(root, out, prefix="", thresh=0.2):
|
|
|
84
84
|
for video_file in tqdm(files):
|
|
85
85
|
print(video_file)
|
|
86
86
|
name = os.path.basename(video_file).split(".")[0]
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
prefix_ = "{}_{}".format(prefix,
|
|
87
|
+
thresh = thresh_dict.get(name, 0.5)
|
|
88
|
+
prefix_ = os.path.basename(os.path.dirname(video_file))
|
|
89
|
+
if prefix: prefix_ = "{}_{}".format(prefix, prefix_)
|
|
90
90
|
video2frames_similarity(video_file, out_dir=out, func=None, interval=20,
|
|
91
91
|
thresh=thresh, prefix=prefix_, vis=True)
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
if __name__ == "__main__":
|
|
95
|
-
root = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_
|
|
96
|
-
prefix = "
|
|
95
|
+
root = "/home/PKing/nasdata/dataset-dmai/AIJE/技能人才系统_数据集管理/01-江门四维数据/01-37道考题视频/江门四维2024-12-06-检查帽撑/video"
|
|
96
|
+
prefix = ""
|
|
97
97
|
out = root + "-train"
|
|
98
98
|
video2frames_demo(root, out, prefix=prefix)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-12-17 15:02:18
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import cv2
|
|
9
|
+
import time
|
|
10
|
+
from datetime import datetime, timedelta
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def display_hikvision_stream(rtsp_url):
|
|
14
|
+
print(f"正在连接摄像头: {rtsp_url}")
|
|
15
|
+
cap = cv2.VideoCapture(rtsp_url)
|
|
16
|
+
|
|
17
|
+
if not cap.isOpened():
|
|
18
|
+
print("无法连接到摄像头")
|
|
19
|
+
return
|
|
20
|
+
|
|
21
|
+
# 获取视频信息
|
|
22
|
+
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
|
|
23
|
+
codec = "".join([chr((fourcc >> 8 * i) & 0xFF) for i in range(4)])
|
|
24
|
+
fps = cap.get(cv2.CAP_PROP_FPS)
|
|
25
|
+
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
|
26
|
+
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
|
27
|
+
|
|
28
|
+
print("视频流信息:")
|
|
29
|
+
print(f"编码格式: {codec}")
|
|
30
|
+
print(f"分辨率: {width}x{height}")
|
|
31
|
+
print(f"帧率: {fps}")
|
|
32
|
+
|
|
33
|
+
# 获取起始时间
|
|
34
|
+
start_time = datetime.now()
|
|
35
|
+
start_timestamp = time.time() * 1000 # 转换为毫秒
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
while True:
|
|
39
|
+
ret, frame = cap.read()
|
|
40
|
+
if ret:
|
|
41
|
+
# 获取时间戳信息
|
|
42
|
+
timestamp_ms = cap.get(cv2.CAP_PROP_POS_MSEC)
|
|
43
|
+
current_time = datetime.now()
|
|
44
|
+
|
|
45
|
+
# 计算摄像头实际时间
|
|
46
|
+
# if timestamp_ms == 0: # 如果摄像头没有返回有效时间戳
|
|
47
|
+
# elapsed_ms = (time.time() * 1000) - start_timestamp
|
|
48
|
+
# camera_datetime = start_time + timedelta(milliseconds=elapsed_ms)
|
|
49
|
+
# else:
|
|
50
|
+
camera_datetime = start_time + timedelta(milliseconds=timestamp_ms)
|
|
51
|
+
|
|
52
|
+
# 格式化时间字符串
|
|
53
|
+
camera_time_str = camera_datetime.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
|
54
|
+
system_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
|
55
|
+
|
|
56
|
+
# 在图像上显示时间戳
|
|
57
|
+
cv2.putText(frame, f"Camera Time: {camera_time_str}", (10, 30),
|
|
58
|
+
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
|
|
59
|
+
cv2.putText(frame, f"System Time: {system_time_str}", (10, 70),
|
|
60
|
+
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
|
|
61
|
+
|
|
62
|
+
# 显示视频帧
|
|
63
|
+
frame = cv2.resize(frame, (1280, 720))
|
|
64
|
+
cv2.imshow('Camera', frame)
|
|
65
|
+
|
|
66
|
+
# 打印时间戳信息到控制台
|
|
67
|
+
print(f"\r摄像头时间: {camera_time_str} | 系统时间: {system_time_str}",
|
|
68
|
+
end="", flush=True)
|
|
69
|
+
|
|
70
|
+
# 按'q'键退出
|
|
71
|
+
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
72
|
+
break
|
|
73
|
+
else:
|
|
74
|
+
print("\n视频帧获取失败,正在重新连接...")
|
|
75
|
+
cap.release()
|
|
76
|
+
time.sleep(1)
|
|
77
|
+
cap = cv2.VideoCapture(rtsp_url)
|
|
78
|
+
|
|
79
|
+
finally:
|
|
80
|
+
cap.release()
|
|
81
|
+
cv2.destroyAllWindows()
|
|
82
|
+
print("\n程序已退出")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
if __name__ == "__main__":
|
|
86
|
+
camera_url = "rtsp://admin:C2332416@192.168.2.35/Streaming/Channels/1"
|
|
87
|
+
# display_hikvision_stream(camera_url)
|
|
88
|
+
v = (100, 100) + (100, 100)
|
|
89
|
+
print(v)
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import cv2
|
|
3
|
+
import time
|
|
4
|
+
import requests
|
|
5
|
+
import xmltodict
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from requests.auth import HTTPDigestAuth
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CameraDemo():
|
|
11
|
+
def __init__(self, ip, username, password):
|
|
12
|
+
"""
|
|
13
|
+
按'q'键退出
|
|
14
|
+
:param ip: IP摄像头IP地址
|
|
15
|
+
:param username: 用户
|
|
16
|
+
:param password: 密码
|
|
17
|
+
"""
|
|
18
|
+
self.ip = ip
|
|
19
|
+
self.username = username
|
|
20
|
+
self.password = password
|
|
21
|
+
|
|
22
|
+
def get_camera_time(self):
|
|
23
|
+
"""获取海康摄像头的时间
|
|
24
|
+
urls = [
|
|
25
|
+
f'http://{ip}/ISAPI/System/time',
|
|
26
|
+
f'http://{ip}/ISAPI/System/status',
|
|
27
|
+
f'http://{ip}/ISAPI/System/deviceInfo'
|
|
28
|
+
]
|
|
29
|
+
"""
|
|
30
|
+
t = "unknown camera time"
|
|
31
|
+
try:
|
|
32
|
+
# 尝试不同的 ISAPI 接口
|
|
33
|
+
url = f'http://{self.ip}/ISAPI/System/time'
|
|
34
|
+
response = requests.get(url, auth=HTTPDigestAuth(self.username, self.password), verify=False, timeout=5)
|
|
35
|
+
content = response.content
|
|
36
|
+
content = xmltodict.parse(content) # 将XML格式json格式
|
|
37
|
+
if response.status_code == 200:
|
|
38
|
+
t = content['Time']['localTime']
|
|
39
|
+
t = t[:-len('+08:00')] # 去除+08:00字符
|
|
40
|
+
else:
|
|
41
|
+
print(f"code: {response.status_code},content={response.text}")
|
|
42
|
+
except Exception as e:
|
|
43
|
+
print(f"Error: {e}")
|
|
44
|
+
return t
|
|
45
|
+
|
|
46
|
+
def get_camera_info(self, cap):
|
|
47
|
+
"""
|
|
48
|
+
获取视频信息
|
|
49
|
+
:param cap:
|
|
50
|
+
:return:
|
|
51
|
+
"""
|
|
52
|
+
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
|
|
53
|
+
codec = "".join([chr((fourcc >> 8 * i) & 0xFF) for i in range(4)])
|
|
54
|
+
fps = cap.get(cv2.CAP_PROP_FPS)
|
|
55
|
+
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
|
56
|
+
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
|
57
|
+
print(f"视频流信息, 编码格式:{codec}, 分辨率:{width}x{height}, 帧率:{fps}")
|
|
58
|
+
return width, height, fps
|
|
59
|
+
|
|
60
|
+
def draw_image_info(self, frame, info: str, point, color=(0, 255, 0), fontScale=1.2, thickness=2):
|
|
61
|
+
cv2.putText(frame, info, point, cv2.FONT_HERSHEY_SIMPLEX, fontScale, color, thickness)
|
|
62
|
+
return frame
|
|
63
|
+
|
|
64
|
+
@staticmethod
|
|
65
|
+
def get_video_writer(video_file, width, height, fps):
|
|
66
|
+
"""
|
|
67
|
+
获得视频存储对象
|
|
68
|
+
:param video_file: 输出保存视频的文件路径
|
|
69
|
+
:param width: 图像分辨率width
|
|
70
|
+
:param height: 图像分辨率height
|
|
71
|
+
:param fps: 设置视频播放帧率
|
|
72
|
+
:return:
|
|
73
|
+
"""
|
|
74
|
+
if not os.path.exists(os.path.dirname(video_file)):
|
|
75
|
+
os.makedirs(os.path.dirname(video_file))
|
|
76
|
+
fourcc = cv2.VideoWriter_fourcc(*'XVID')
|
|
77
|
+
frameSize = (int(width), int(height))
|
|
78
|
+
video_writer = cv2.VideoWriter(video_file, fourcc, int(fps), frameSize)
|
|
79
|
+
print("save video:width:{},height:{},fps:{}".format(width, height, fps))
|
|
80
|
+
return video_writer
|
|
81
|
+
|
|
82
|
+
def capture(self, title="camera", save_video="./camera.avi"):
|
|
83
|
+
format = '%Y-%m-%dT%H:%M:%S' # 海康摄像头默认格式
|
|
84
|
+
video_url = f"rtsp://{self.username}:{self.password}@{self.ip}/Streaming/Channels/1"
|
|
85
|
+
print(f"正在连接摄像头: {video_url}")
|
|
86
|
+
# 创建视频流连接
|
|
87
|
+
cap = cv2.VideoCapture(video_url)
|
|
88
|
+
assert cap.isOpened(), f"无法连接到摄像头:{video_url}"
|
|
89
|
+
W, H, Fps = self.get_camera_info(cap)
|
|
90
|
+
video_writer = self.get_video_writer(save_video, width=W, height=H, fps=Fps)
|
|
91
|
+
# TODO 获得启动摄像头的时间
|
|
92
|
+
cam_start_time = self.get_camera_time()
|
|
93
|
+
cam_start_timestamp = time.mktime(time.strptime(cam_start_time, format))
|
|
94
|
+
reconnection = 0
|
|
95
|
+
count = 0
|
|
96
|
+
point = (W - 750, 150)
|
|
97
|
+
while True:
|
|
98
|
+
ret, frame = cap.read()
|
|
99
|
+
count += 1
|
|
100
|
+
if ret:
|
|
101
|
+
# TODO 获取当前系统时间
|
|
102
|
+
sys_timestamp = time.time()
|
|
103
|
+
sys_time = datetime.fromtimestamp(sys_timestamp).strftime(format)
|
|
104
|
+
# TODO 通过接口获得摄像头设备时间
|
|
105
|
+
cam_time = self.get_camera_time()
|
|
106
|
+
cam_timestamp = time.mktime(time.strptime(cam_time, format))
|
|
107
|
+
# TODO 通过视频解码估计视频流生成时间
|
|
108
|
+
time.sleep(0.1) # TODO 模拟网络延时
|
|
109
|
+
vdo_offset = cap.get(cv2.CAP_PROP_POS_MSEC) / 1000 # 获得视频偏移量
|
|
110
|
+
vdo_timestamp = cam_start_timestamp + vdo_offset # 设备启动时间+视频偏移量得到当前帧的到达时间
|
|
111
|
+
vdo_time = datetime.fromtimestamp(vdo_timestamp).strftime(format)
|
|
112
|
+
# 在图像上显示时间戳
|
|
113
|
+
sys_info = f"System Time: {sys_time}"
|
|
114
|
+
cam_info = f"Camera Time: {cam_time}"
|
|
115
|
+
vdo_info = f"Video Time: {vdo_time}"
|
|
116
|
+
# 打印时间戳信息到控制台
|
|
117
|
+
print(f"\r{cam_info} | {sys_info}| {vdo_info}", end="", flush=True)
|
|
118
|
+
frame = self.draw_image_info(frame, info=vdo_info, point=(point[0], point[1]))
|
|
119
|
+
frame = self.draw_image_info(frame, info=cam_info, point=(point[0], point[1] + 50))
|
|
120
|
+
frame = self.draw_image_info(frame, info=sys_info, point=(point[0], point[1] + 100))
|
|
121
|
+
# 显示视频帧
|
|
122
|
+
cv2.namedWindow(title, flags=cv2.WINDOW_NORMAL)
|
|
123
|
+
cv2.imshow(title, frame)
|
|
124
|
+
# 保存视频
|
|
125
|
+
video_writer.write(frame)
|
|
126
|
+
# 按'q'键退出
|
|
127
|
+
if cv2.waitKey(10) & 0xFF == ord('q'):
|
|
128
|
+
break
|
|
129
|
+
else:
|
|
130
|
+
cap.release()
|
|
131
|
+
reconnection += 1
|
|
132
|
+
print(f"视频帧获取失败,尝试第{reconnection}次重新连接...")
|
|
133
|
+
time.sleep(10)
|
|
134
|
+
cap = cv2.VideoCapture(video_url)
|
|
135
|
+
cap.release()
|
|
136
|
+
video_writer.release()
|
|
137
|
+
cv2.destroyAllWindows()
|
|
138
|
+
print("\n程序已退出")
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
if __name__ == "__main__":
|
|
142
|
+
# 摄像头信息,按'q'键退出程序
|
|
143
|
+
ip = "192.168.2.35"
|
|
144
|
+
username = "admin"
|
|
145
|
+
password = "C2332416"
|
|
146
|
+
c = CameraDemo(ip, username, password)
|
|
147
|
+
c.capture()
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# -*-coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail :
|
|
5
|
+
@Date : 2024-02-05 18:19:18
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from pybaseutils import file_utils, image_utils
|
|
10
|
+
|
|
11
|
+
if __name__ == '__main__':
|
|
12
|
+
root = "/home/PKing/Downloads/data1"
|
|
13
|
+
files1 = file_utils.get_files_list_v1(root, postfix=["*.jpg"])
|
|
14
|
+
files2 = file_utils.get_files_list(root, postfix=["*.jpg", "*.png"])
|
|
15
|
+
[print(f) for f in files1]
|
|
16
|
+
print("----" * 10)
|
|
17
|
+
[print(f) for f in files2]
|
|
@@ -26,7 +26,7 @@ if __name__ == "__main__":
|
|
|
26
26
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-indoor-det/dataset-test/json"
|
|
27
27
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/dataset-v25/json"
|
|
28
28
|
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-negetive/dataset-v02/json"
|
|
29
|
-
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-
|
|
29
|
+
anno_dir = "/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-action-cvlm-v2/train-v2/aije-action-train-v30/images"
|
|
30
30
|
names = None
|
|
31
31
|
# names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
|
|
32
32
|
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
@@ -1,55 +0,0 @@
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|