pybaseutils 2.4.26__tar.gz → 2.4.33__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/PKG-INFO +5 -9
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/producer_consumer.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/camera.py +1 -0
- pybaseutils-2.4.26/pybaseutils/cvutils/monitor.py → pybaseutils-2.4.33/pybaseutils/cvutils/frame_record.py +1 -1
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/video_utils.py +66 -17
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_labelme_line.py +0 -0
- pybaseutils-2.4.33/pybaseutils/dict_uils.py +10 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/file_utils.py +43 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/json_utils.py +3 -2
- pybaseutils-2.4.33/pybaseutils/log.py +91 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/build_transform.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/PKG-INFO +5 -9
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/SOURCES.txt +5 -1
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/setup.cfg +0 -0
- pybaseutils-2.4.33/test_py/WebCrawler/download_pdf.py +9 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_video_aije.py +1 -1
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/mask_image.py +0 -0
- pybaseutils-2.4.33/test_py/converter/car_accident.py +74 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/fall_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/parking_rois_gopro.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_rename.py +2 -2
- pybaseutils-2.4.33/test_py/demo_video_segm.py +26 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/qrcode/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/qrcode/demo.py +0 -0
- pybaseutils-2.4.26/pybaseutils/log.py +0 -118
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/LICENCE +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/README.md +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/dict_queue.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base/list_queue.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/converter/prelabelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/data_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_image_text.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_video_folder.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_video_text.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- /pybaseutils-2.4.26/pybaseutils/dict_uils.py → /pybaseutils-2.4.33/pybaseutils/dict_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/http_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/image_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/media/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/media/ffmpeg_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/nets_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/imgaug_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/app_gradio_image.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/app_stweb_image.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/app_webio_image.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/web/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/setup.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/WebCrawler/search_baidu.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/WebCrawler/search_biying.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_labelme_crop_aije.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_labelme_crop_ailt.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_motion_blur.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/main.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/audio_demo1.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/camera/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/camera/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/camera.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/class_names.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/convert_yolo2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/date_dataset.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/date_demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/datedataset_bk.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo1.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo3.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo4.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_annular_to_rect.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_lableme_vis.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_letterbox.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_mosaic.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_prelabelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_video2frame.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/fast_api/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/fast_api/create_image_url.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/fast_api/get_image_url.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/app.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/utils/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/flask_demo/utils/utils.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/gradio_app.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/gradio_app_v2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/model_process.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/performance.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/base.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/component.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/main.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/registry/register.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/slowfastnet.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_camera.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/test_fr/idcardocr.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/__init__.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/asr_clients.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/asr_service.py +0 -0
- {pybaseutils-2.4.26 → pybaseutils-2.4.33}/test_py/web_socket/chat_service.py +0 -0
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.33
|
|
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
|
|
9
10
|
License-File: LICENCE
|
|
10
|
-
Dynamic: author
|
|
11
|
-
Dynamic: author-email
|
|
12
|
-
Dynamic: description
|
|
13
|
-
Dynamic: home-page
|
|
14
|
-
Dynamic: license
|
|
15
|
-
Dynamic: license-file
|
|
16
|
-
Dynamic: summary
|
|
17
11
|
|
|
18
12
|
base-utils
|
|
19
13
|
==========
|
|
@@ -148,3 +142,5 @@ base_utils(C++)
|
|
|
148
142
|
DEBUG_IMSHOW("image", image);
|
|
149
143
|
return 0;
|
|
150
144
|
}
|
|
145
|
+
|
|
146
|
+
|
|
File without changes
|
|
@@ -7,6 +7,7 @@ import subprocess
|
|
|
7
7
|
class CameraCapture(object):
|
|
8
8
|
def __init__(self, video: str or int = 0, fps=30, size=(1920, 1080), scale=1.0, input_format="mjpeg"):
|
|
9
9
|
"""
|
|
10
|
+
v4l2-ctl --device /dev/video0 --list-formats-ext # 查看摄像头在所有格式和分辨率下支持的帧率
|
|
10
11
|
fuser /dev/video31 # 查看视频设备是否被占用
|
|
11
12
|
查询视频设备分辨率: ffmpeg -f v4l2 -list_formats all -i /dev/video0
|
|
12
13
|
常见的视频分辨率 : 1920x1080 1280x720 640x480 352x288 320x240 176x144 160x120
|
|
@@ -12,10 +12,11 @@ import cv2
|
|
|
12
12
|
import numpy as np
|
|
13
13
|
import math
|
|
14
14
|
import time as timelib
|
|
15
|
+
import subprocess
|
|
15
16
|
from typing import Callable
|
|
16
17
|
from tqdm import tqdm
|
|
17
18
|
from pybaseutils import image_utils, file_utils
|
|
18
|
-
from pybaseutils.cvutils import
|
|
19
|
+
from pybaseutils.cvutils import frame_record
|
|
19
20
|
|
|
20
21
|
VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv"]
|
|
21
22
|
|
|
@@ -52,6 +53,13 @@ def get_usb_camera(video=-1, max_index=50):
|
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
def merge_video(video1, video2, output="./output.mp4"):
|
|
56
|
+
"""
|
|
57
|
+
视频拼接
|
|
58
|
+
:param video1:
|
|
59
|
+
:param video2:
|
|
60
|
+
:param output:
|
|
61
|
+
:return:
|
|
62
|
+
"""
|
|
55
63
|
cmd = f'ffmpeg -i {video1} -i {video2} -filter_complex "[0:v:0][1:v:0]concat=n=2:v=1:a=0[outv]" -map "[outv]" {output}'
|
|
56
64
|
|
|
57
65
|
|
|
@@ -189,7 +197,7 @@ def video2frames_similarity(video_file, out_dir=None, func=None, prefix="", inte
|
|
|
189
197
|
:param vis: 是否可视化显示
|
|
190
198
|
:return:
|
|
191
199
|
"""
|
|
192
|
-
|
|
200
|
+
rec = frame_record.StatusRecord()
|
|
193
201
|
name = os.path.basename(video_file).split(".")[0].replace("-", "_")
|
|
194
202
|
if prefix: name = f"{prefix}_{name}"
|
|
195
203
|
if not out_dir: out_dir = os.path.join(os.path.dirname(video_file), name)
|
|
@@ -208,7 +216,7 @@ def video2frames_similarity(video_file, out_dir=None, func=None, prefix="", inte
|
|
|
208
216
|
if func: curr_frame = func(curr_frame)
|
|
209
217
|
if last_frame is None:
|
|
210
218
|
last_frame = curr_frame.copy()
|
|
211
|
-
diff =
|
|
219
|
+
diff = rec.get_frame_similarity(curr_frame, last_frame, size=(256, 256), vis=False)
|
|
212
220
|
if diff > thresh:
|
|
213
221
|
frame_file = os.path.join(out_dir, "{}_{:0=6d}.jpg".format(name, count))
|
|
214
222
|
last_frame = curr_frame.copy()
|
|
@@ -333,13 +341,13 @@ def video_capture(video: int or str, save_video: str or int = None, interval=1,
|
|
|
333
341
|
assert os.path.exists(video), f"video={video}"
|
|
334
342
|
cap = image_utils.get_video_capture(video, fps=None)
|
|
335
343
|
w, h, num_frames, fps = image_utils.get_video_info(cap, **kwargs)
|
|
336
|
-
|
|
337
|
-
|
|
344
|
+
clip_time = kwargs.get("clip_time", tuple()) # TODO 开始播放时间time[0],结束播放时间time[1],单位秒S
|
|
345
|
+
clip_index = kwargs.get("clip_index", tuple()) # TODO 开始播放位置clip[0],结束播放位置clip[1]
|
|
338
346
|
start, end = 0, -1
|
|
339
|
-
if
|
|
340
|
-
start, end = int(
|
|
341
|
-
elif
|
|
342
|
-
start, end = int(
|
|
347
|
+
if clip_time and fps > 0:
|
|
348
|
+
start, end = int(clip_time[0] * fps), int(clip_time[1] * fps)
|
|
349
|
+
elif clip_index:
|
|
350
|
+
start, end = int(clip_index[0]), int(clip_index[1])
|
|
343
351
|
end = min(end, num_frames) if end > 0 else num_frames # TODO 当num_frames<0时,使用0<end<count继续播放
|
|
344
352
|
interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
|
|
345
353
|
interval = int(fps / freq) if freq > 0 else interval
|
|
@@ -388,8 +396,8 @@ def video_iterator(video, save_video: str or int = None, interval=1, size=(), fr
|
|
|
388
396
|
:param kwargs:回调函数输入参数,
|
|
389
397
|
delay: 控制显示延时,默认10S
|
|
390
398
|
title: 控制显示窗口名,默认video
|
|
391
|
-
|
|
392
|
-
|
|
399
|
+
clip_time: 开始播放时间time[0],结束播放时间time[1],单位秒S
|
|
400
|
+
clip_index: 开始播放位置clip[0],结束播放位置clip[1]
|
|
393
401
|
speed: 保存视频的播放速度,默认是播放帧率
|
|
394
402
|
save_fps: 保存视频的帧率,默认是播放帧率
|
|
395
403
|
:return: frame, count, w, h, fps =data_info['frame'],data_info['count'],data_info['w'],data_info['h'],data_info['fps']
|
|
@@ -401,13 +409,13 @@ def video_iterator(video, save_video: str or int = None, interval=1, size=(), fr
|
|
|
401
409
|
assert os.path.exists(video), f"video={video}"
|
|
402
410
|
cap = image_utils.get_video_capture(video, fps=None)
|
|
403
411
|
w, h, num_frames, fps = image_utils.get_video_info(cap, **kwargs)
|
|
404
|
-
|
|
405
|
-
|
|
412
|
+
clip_time = kwargs.get("clip_time", tuple()) # TODO 开始播放时间time[0],结束播放时间time[1],单位秒S
|
|
413
|
+
clip_index = kwargs.get("clip_index", tuple()) # TODO 开始播放位置clip[0],结束播放位置clip[1]
|
|
406
414
|
start, end = 0, -1
|
|
407
|
-
if
|
|
408
|
-
start, end = int(
|
|
409
|
-
elif
|
|
410
|
-
start, end = int(
|
|
415
|
+
if clip_time and fps > 0:
|
|
416
|
+
start, end = int(clip_time[0] * fps), int(clip_time[1] * fps)
|
|
417
|
+
elif clip_index:
|
|
418
|
+
start, end = int(clip_index[0]), int(clip_index[1])
|
|
411
419
|
end = min(end, num_frames) if end > 0 else num_frames # TODO 当num_frames<0时,使用0<end<count继续播放
|
|
412
420
|
interval = fps if interval == -1 else interval # 当interval=-1,表示interval=fps,即一秒一帧
|
|
413
421
|
interval = int(fps / freq) if freq > 0 else interval
|
|
@@ -472,6 +480,47 @@ def rotation_task(frame, **kwargs):
|
|
|
472
480
|
return frame
|
|
473
481
|
|
|
474
482
|
|
|
483
|
+
def segment_video(video_file, save_file="", clip_time=(), clip_index=()):
|
|
484
|
+
"""
|
|
485
|
+
分割视频
|
|
486
|
+
:param video_file: 视频文件
|
|
487
|
+
:param save_file: 输出分割视频文件
|
|
488
|
+
:param clip_time: 分割视频时间, clip_time[0]开始时间,结束时间clip_time[1],单位秒S
|
|
489
|
+
:param clip_index: 分割视频索引, clip_index[0]开始位置,结束位置clip_index[1]
|
|
490
|
+
:return:
|
|
491
|
+
"""
|
|
492
|
+
if not save_file:
|
|
493
|
+
name_id, postfix = file_utils.split_postfix(video_file)
|
|
494
|
+
save_file = os.path.join(os.path.dirname(video_file), f"{name_id}_crop.mp4")
|
|
495
|
+
os.makedirs(os.path.dirname(save_file), exist_ok=True)
|
|
496
|
+
assert os.path.exists(video_file), f"输入视频文件不存在: {video_file}"
|
|
497
|
+
cmd = ["ffmpeg", "-i", video_file]
|
|
498
|
+
if clip_time and len(clip_time) == 2:
|
|
499
|
+
start, end = clip_time
|
|
500
|
+
# -ss 和 -to 放在 -i 之后实现精确解码切割(无 seek 误差)
|
|
501
|
+
cmd.extend(["-ss", str(start), "-to", str(end)])
|
|
502
|
+
# 若不需重新编码且可接受关键帧对齐,可启用下行加速:
|
|
503
|
+
# cmd.extend(["-c", "copy"])
|
|
504
|
+
elif clip_index and len(clip_index) == 2:
|
|
505
|
+
c0, c1 = int(clip_index[0]), int(clip_index[1])
|
|
506
|
+
# select 滤镜选择帧号范围内的帧,并重置时间戳
|
|
507
|
+
vf_filter = f"select='between(n,{c0},{c1})',setpts=N/FRAME_RATE/TB"
|
|
508
|
+
af_filter = f"aselect='between(n,{c0},{c1})',asetpts=N/SR/TB"
|
|
509
|
+
cmd.extend(["-vf", vf_filter, "-af", af_filter, "-vsync", "vfr"])
|
|
510
|
+
else:
|
|
511
|
+
raise ValueError("必须提供 clip_time 或 clip_index 且参数为二元组")
|
|
512
|
+
# 覆盖输出文件
|
|
513
|
+
cmd.extend(["-y", save_file])
|
|
514
|
+
# 执行命令
|
|
515
|
+
try:
|
|
516
|
+
print(" ".join(cmd))
|
|
517
|
+
subprocess.run(cmd, check=True, capture_output=True, text=True)
|
|
518
|
+
print(f"视频分割完成: {save_file}")
|
|
519
|
+
except subprocess.CalledProcessError as e:
|
|
520
|
+
print(f"ffmpeg 执行失败:\n{e.stderr}")
|
|
521
|
+
raise
|
|
522
|
+
|
|
523
|
+
|
|
475
524
|
if __name__ == "__main__":
|
|
476
525
|
# video_file = "/home/dm/nasdata/release/CSDN/双目测距Demo视频(Python).MP4"
|
|
477
526
|
# video_file = "/home/dm/视频/双目测距Demo视频(Python).mp4"
|
|
File without changes
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Author : Pan
|
|
5
|
+
# @E-mail :
|
|
6
|
+
# @Date : 2025-08-20 16:04:27
|
|
7
|
+
# @Brief :
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
from pybaseutils.dict_utils import *
|
|
@@ -1607,6 +1607,49 @@ def zip_file(src, dst=None, s=None):
|
|
|
1607
1607
|
return dst
|
|
1608
1608
|
|
|
1609
1609
|
|
|
1610
|
+
def json2jsonl(json_file: str, jsonl_out="./data.jsonl"):
|
|
1611
|
+
"""
|
|
1612
|
+
将json转换为jsonl
|
|
1613
|
+
:param json_file: json文件目录或json文件路径
|
|
1614
|
+
:param jsonl_out:
|
|
1615
|
+
:return:
|
|
1616
|
+
"""
|
|
1617
|
+
data_list = []
|
|
1618
|
+
if json_file.endswith(".json"):
|
|
1619
|
+
with open(json_file, 'r', encoding='utf-8') as f:
|
|
1620
|
+
data_list = json.load(f) # 假设 data 是一个列表
|
|
1621
|
+
elif os.path.isdir(json_file):
|
|
1622
|
+
files = glob.glob(os.path.join(json_file, "*.json"))
|
|
1623
|
+
for file in files:
|
|
1624
|
+
with open(file, 'r', encoding='utf-8') as f:
|
|
1625
|
+
data = json.load(f) # 假设 data 是一个字典
|
|
1626
|
+
data_list.append(data)
|
|
1627
|
+
with open(jsonl_out, 'w', encoding='utf-8') as f:
|
|
1628
|
+
for item in data_list:
|
|
1629
|
+
f.write(json.dumps(item, ensure_ascii=False) + '\n')
|
|
1630
|
+
print(f"转换成功,保存文件:{jsonl_out} ,共{len(data_list)}条记录")
|
|
1631
|
+
return data_list
|
|
1632
|
+
|
|
1633
|
+
|
|
1634
|
+
def jsonl2json(jsonl_file: str, json_out="./data.json"):
|
|
1635
|
+
"""
|
|
1636
|
+
将 JSONL 文件转换为 JSON 文件
|
|
1637
|
+
:param jsonl_file: JSONL 文件路径
|
|
1638
|
+
:param json_out: 输出的 JSON 文件路径
|
|
1639
|
+
:return: 包含所有数据的列表
|
|
1640
|
+
"""
|
|
1641
|
+
data_list = []
|
|
1642
|
+
with open(jsonl_file, 'r', encoding='utf-8') as f:
|
|
1643
|
+
for line in f:
|
|
1644
|
+
line = line.strip()
|
|
1645
|
+
if line: # 跳过空行
|
|
1646
|
+
data_list.append(json.loads(line))
|
|
1647
|
+
with open(json_out, 'w', encoding='utf-8') as f:
|
|
1648
|
+
json.dump(data_list, f, ensure_ascii=False, indent=2)
|
|
1649
|
+
print(f"转换成功,保存文件:{json_out},共 {len(data_list)} 条记录")
|
|
1650
|
+
return data_list
|
|
1651
|
+
|
|
1652
|
+
|
|
1610
1653
|
if __name__ == '__main__':
|
|
1611
1654
|
from pybaseutils import time_utils
|
|
1612
1655
|
|
|
@@ -15,7 +15,7 @@ import PIL.Image as Image
|
|
|
15
15
|
from collections import Counter
|
|
16
16
|
from typing import List, Tuple, Dict
|
|
17
17
|
from pybaseutils.file_utils import load_json, read_json_data, save_json, write_json_path
|
|
18
|
-
from pybaseutils.
|
|
18
|
+
from pybaseutils.dict_utils import *
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def get_most_common(data: list, topK=None):
|
|
@@ -163,8 +163,9 @@ def get_index(data: list, v):
|
|
|
163
163
|
return indices
|
|
164
164
|
|
|
165
165
|
|
|
166
|
+
|
|
166
167
|
if __name__ == "__main__":
|
|
167
168
|
# data = {'C': 0, 'A': 5, 'B': 3, 'D': 2}
|
|
168
169
|
# print(dict_sort(data))
|
|
169
|
-
i= get_index(data=[], v=7)
|
|
170
|
+
i = get_index(data=[], v=7)
|
|
170
171
|
print(i)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Author : Pan
|
|
5
|
+
# @E-mail :
|
|
6
|
+
# @Date : 2022-04-29 09:13:09
|
|
7
|
+
# @Brief :
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
import os
|
|
11
|
+
import sys
|
|
12
|
+
import datetime
|
|
13
|
+
from loguru import logger
|
|
14
|
+
|
|
15
|
+
LOG_FORMAT = {
|
|
16
|
+
"simple": "<level>{extra[time]}|{level:7}| {message}</level>",
|
|
17
|
+
"name": "<level>{extra[time]}|{level:7}|{name} {line}| {message}</level>", # 打印文件名
|
|
18
|
+
"module": "<level>{extra[time]}|{level:7}|{module} {line}| {message}</level>", # 打印模块名
|
|
19
|
+
"function": "<level>{extra[time]}|{level:7}|{module}.{function} {line}| {message}</level>",
|
|
20
|
+
"precise": "<level>{extra[time]}|{level:7}|{module}.{function} {line}| {message}</level>",
|
|
21
|
+
"all": "<level>{extra[time]}|{level:7}|{name}.{module}.{function} {line}| {message}</level>",# 打印函数
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def set_logger(name=None, level="debug", logfile=None, format="simple", is_main_process=True,
|
|
26
|
+
rotation="1 days", retention="3 days"):
|
|
27
|
+
"""
|
|
28
|
+
logger = set_logger(level="debug", logfile="log.txt")
|
|
29
|
+
url: https://www.cnblogs.com/shiyitongxue/p/17870527.html
|
|
30
|
+
:param level: 设置log输出级别:debug,info,warning,error
|
|
31
|
+
:param logfile: log保存路径,如果为None,则在控制台打印log
|
|
32
|
+
:param is_main_process: 是否是主进程
|
|
33
|
+
:param rotation: 日志文件轮转策略,时间或者大小,默认1天
|
|
34
|
+
rotation="1 minutes" # 每分钟轮转
|
|
35
|
+
rotation="1 hours" # 每小时轮转
|
|
36
|
+
rotation="1 days" # 每天轮转
|
|
37
|
+
rotation="1 weeks" # 每周轮转
|
|
38
|
+
rotation="10 MB" # 文件达到10MB时轮转
|
|
39
|
+
rotation="500 MB" # 文件达到500MB时轮转
|
|
40
|
+
:param retention: 日志文件保留时长,默认3天
|
|
41
|
+
retention="7 days" # 保留7天
|
|
42
|
+
retention="1 months" # 保留1个月
|
|
43
|
+
retention="20 GB" # 保留最近20GB的日志(基于大小)
|
|
44
|
+
:return:
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def call_time(record):
|
|
48
|
+
# 显式固化 logger 调用时刻,避免异步 sink 输出时产生“当前打印时间”的误解
|
|
49
|
+
if format == "precise":
|
|
50
|
+
record["extra"]["time"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
|
51
|
+
else:
|
|
52
|
+
record["extra"]["time"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
53
|
+
f = LOG_FORMAT.get(format, LOG_FORMAT.get("simple"))
|
|
54
|
+
logger.remove() # 去除默认的LOG,避免重复打印
|
|
55
|
+
logger_ = logger.patch(call_time)
|
|
56
|
+
if is_main_process:
|
|
57
|
+
if logfile: logger_.add(logfile, level=level.upper(), rotation=rotation, retention=retention, format=f,
|
|
58
|
+
enqueue=True, # 异步写入,会重新打开文件
|
|
59
|
+
watch=True, # 避免误删日志文件
|
|
60
|
+
catch=True,
|
|
61
|
+
)
|
|
62
|
+
logger_.add(sys.stderr, level=level.upper(), format=f)
|
|
63
|
+
else:
|
|
64
|
+
logger_.add(sys.stderr, level="ERROR", format=f)
|
|
65
|
+
return logger_
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def get_logger():
|
|
69
|
+
return logger
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
if __name__ == '__main__':
|
|
73
|
+
import traceback
|
|
74
|
+
import time
|
|
75
|
+
|
|
76
|
+
logfile = "./log.log"
|
|
77
|
+
logger = set_logger(name="demo", is_main_process=True, format="precise", level="debug", logfile=logfile)
|
|
78
|
+
# logger = set_logger(name="demo", is_main_process=True, format="module", level="debug", logfile=logfile)
|
|
79
|
+
|
|
80
|
+
for i in range(1000):
|
|
81
|
+
try:
|
|
82
|
+
t = time.time()
|
|
83
|
+
date = datetime.datetime.fromtimestamp(t).strftime("%H:%M:%S.%f")[:-3]
|
|
84
|
+
logger.debug(f"{date} debug {i}")
|
|
85
|
+
# logger.info(f"info {i}")
|
|
86
|
+
# logger.warning(f"warning {i}")
|
|
87
|
+
# logger.error(f"error {i}")
|
|
88
|
+
time.sleep(0.01)
|
|
89
|
+
except Exception as e:
|
|
90
|
+
e = traceback.format_exc()
|
|
91
|
+
logger.error(e)
|
|
File without changes
|
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.33
|
|
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
|
|
9
10
|
License-File: LICENCE
|
|
10
|
-
Dynamic: author
|
|
11
|
-
Dynamic: author-email
|
|
12
|
-
Dynamic: description
|
|
13
|
-
Dynamic: home-page
|
|
14
|
-
Dynamic: license
|
|
15
|
-
Dynamic: license-file
|
|
16
|
-
Dynamic: summary
|
|
17
11
|
|
|
18
12
|
base-utils
|
|
19
13
|
==========
|
|
@@ -148,3 +142,5 @@ base_utils(C++)
|
|
|
148
142
|
DEBUG_IMSHOW("image", image);
|
|
149
143
|
return 0;
|
|
150
144
|
}
|
|
145
|
+
|
|
146
|
+
|
|
@@ -9,6 +9,7 @@ pybaseutils/config_utils.py
|
|
|
9
9
|
pybaseutils/coords_utils.py
|
|
10
10
|
pybaseutils/data_utils.py
|
|
11
11
|
pybaseutils/dict_uils.py
|
|
12
|
+
pybaseutils/dict_utils.py
|
|
12
13
|
pybaseutils/file_utils.py
|
|
13
14
|
pybaseutils/font_utils.py
|
|
14
15
|
pybaseutils/geometry_tools.py
|
|
@@ -76,7 +77,7 @@ pybaseutils/converter/prelabelme.py
|
|
|
76
77
|
pybaseutils/cvutils/__init__.py
|
|
77
78
|
pybaseutils/cvutils/camera.py
|
|
78
79
|
pybaseutils/cvutils/corner_utils.py
|
|
79
|
-
pybaseutils/cvutils/
|
|
80
|
+
pybaseutils/cvutils/frame_record.py
|
|
80
81
|
pybaseutils/cvutils/mouse_utils.py
|
|
81
82
|
pybaseutils/cvutils/nms_utils.py
|
|
82
83
|
pybaseutils/cvutils/video_utils.py
|
|
@@ -186,6 +187,7 @@ test_py/demo_standard_video .py
|
|
|
186
187
|
test_py/demo_taichi.py
|
|
187
188
|
test_py/demo_video2frame.py
|
|
188
189
|
test_py/demo_video_crop.py
|
|
190
|
+
test_py/demo_video_segm.py
|
|
189
191
|
test_py/demo_voc_crop.py
|
|
190
192
|
test_py/demo_voc_vis.py
|
|
191
193
|
test_py/demo_word_similar.py
|
|
@@ -203,6 +205,7 @@ test_py/test_camera.py
|
|
|
203
205
|
test_py/Image_enhance/__init__.py
|
|
204
206
|
test_py/Image_enhance/dmeo01.py
|
|
205
207
|
test_py/WebCrawler/__init__.py
|
|
208
|
+
test_py/WebCrawler/download_pdf.py
|
|
206
209
|
test_py/WebCrawler/search_baidu.py
|
|
207
210
|
test_py/WebCrawler/search_biying.py
|
|
208
211
|
test_py/aije/__init__.py
|
|
@@ -248,6 +251,7 @@ test_py/converter/TT100K.py
|
|
|
248
251
|
test_py/converter/WaterMeters1.py
|
|
249
252
|
test_py/converter/WaterMeters2.py
|
|
250
253
|
test_py/converter/__init__.py
|
|
254
|
+
test_py/converter/car_accident.py
|
|
251
255
|
test_py/converter/concat_coco.py
|
|
252
256
|
test_py/converter/convert_coco2voc.py
|
|
253
257
|
test_py/converter/convert_cvat2labelme.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -10,7 +10,7 @@ import cv2
|
|
|
10
10
|
import numpy as np
|
|
11
11
|
from tqdm import tqdm
|
|
12
12
|
from pybaseutils import file_utils, image_utils
|
|
13
|
-
from pybaseutils.cvutils import video_utils,
|
|
13
|
+
from pybaseutils.cvutils import video_utils, frame_record
|
|
14
14
|
|
|
15
15
|
# thresh_dict = {"1号视角": 0.5, "2号视角": 0.15, "3号视角": 0.3, "4号视角": 0.3}
|
|
16
16
|
# thresh_dict = {"一号位": 0.58, "平视": 0.35, "俯视": 0.35, "右视": 0.25, "左视": 0.3}
|
|
File without changes
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Author : Pan
|
|
5
|
+
# @E-mail :
|
|
6
|
+
# @Date : 2026-06-23 17:33:01
|
|
7
|
+
# @Brief :
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
import os
|
|
11
|
+
import cv2
|
|
12
|
+
from collections import defaultdict
|
|
13
|
+
from pybaseutils import json_utils, pandas_utils, image_utils, file_utils, dict_utils
|
|
14
|
+
from pybaseutils.cvutils import video_utils
|
|
15
|
+
|
|
16
|
+
class_maps = {
|
|
17
|
+
"before crush": {"color": (255, 0, 0), "name": "crush0", "shift": [0, -1.0]},
|
|
18
|
+
"crush moment": {"color": (0, 255, 0), "name": "crush1", "shift": [-1.0, 1.0]},
|
|
19
|
+
"after crush": {"color": (0, 0, 255), "name": "crush2", "shift": [-1.0, 0]},
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def parser_video(video_file, csv_file, vis=True):
|
|
24
|
+
print("video_file", video_file)
|
|
25
|
+
print(" csv_file", csv_file)
|
|
26
|
+
pd_data = pandas_utils.read_csv(csv_file, sep=",")
|
|
27
|
+
pd_dict = pandas_utils.df2dict(pd_data, orient="index")
|
|
28
|
+
label_info = defaultdict(list)
|
|
29
|
+
video_cap = video_utils.get_video_capture(video_file)
|
|
30
|
+
width, height, num_frames, fps = video_utils.get_video_info(video_cap)
|
|
31
|
+
for info in pd_dict.values():
|
|
32
|
+
index = info['frame_num']
|
|
33
|
+
label = info['type'].strip()
|
|
34
|
+
label_info[label].append(index)
|
|
35
|
+
if not vis: continue
|
|
36
|
+
# 设置抽帧的位置
|
|
37
|
+
video_cap.set(cv2.CAP_PROP_POS_FRAMES, index)
|
|
38
|
+
ret, frame = video_cap.read()
|
|
39
|
+
if not ret: break
|
|
40
|
+
color = class_maps[label]["color"]
|
|
41
|
+
text = "{:3d}-{}".format(index, label)
|
|
42
|
+
frame = image_utils.draw_text(frame, (0, 0), text, color=color, fontScale=1, thickness=2)
|
|
43
|
+
image_utils.show_image("image", frame, delay=20)
|
|
44
|
+
return label_info, fps, num_frames
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def segment_video_dir(video_dir, csv_dir, output="", vis=False):
|
|
48
|
+
video_files = file_utils.get_files_list(video_dir, postfix=file_utils.VIDEO_POSTFIX)
|
|
49
|
+
for i, video_file in enumerate(video_files):
|
|
50
|
+
if not output: output = os.path.dirname(video_file)
|
|
51
|
+
name, ext = os.path.splitext(os.path.basename(video_file))
|
|
52
|
+
csv_file = os.path.join(csv_dir, name.replace("-", "_") + ".csv")
|
|
53
|
+
if not os.path.exists(csv_file):
|
|
54
|
+
print("not exists:{}".format(csv_file))
|
|
55
|
+
continue
|
|
56
|
+
label_info, fps, num_frames = parser_video(video_file, csv_file, vis=vis)
|
|
57
|
+
for label, indices in label_info.items():
|
|
58
|
+
clip = [min(indices), max(indices)]
|
|
59
|
+
name = class_maps[label]["name"]
|
|
60
|
+
shift = class_maps[label]["shift"]
|
|
61
|
+
clip_index = [clip[0] + int(shift[0] * fps), clip[1] + int(shift[1] * fps)]
|
|
62
|
+
clip_index = [max(0, clip_index[0]), min(num_frames, clip_index[1])]
|
|
63
|
+
if (clip_index[1] - clip_index[0]) / fps < 0.5: continue
|
|
64
|
+
nid, postfix = file_utils.split_postfix(video_file)
|
|
65
|
+
# save_file = os.path.join(output, f"{nid}_{name}_crop{clip[0]}_{clip[1]}.mp4")
|
|
66
|
+
save_file = os.path.join(output, name, f"video{i:03d}_{name}.mp4")
|
|
67
|
+
video_utils.segment_video(video_file, save_file=save_file, clip_index=clip_index)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if __name__ == '__main__':
|
|
71
|
+
video_dir = '/media/PKing/dev1/project/Crash dataset/video/'
|
|
72
|
+
csv_dir = "/media/PKing/dev1/project/Crash dataset/label/csv"
|
|
73
|
+
output = '/media/PKing/dev1/project/Crash dataset/video-crop/'
|
|
74
|
+
segment_video_dir(video_dir, csv_dir, output=output)
|
|
File without changes
|
|
File without changes
|
|
@@ -23,6 +23,6 @@ def rename_files(src, dst, prefix="", postfix=None, remove=False):
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
if __name__ == '__main__':
|
|
26
|
-
image_dir = "/home/PKing/
|
|
26
|
+
image_dir = "/home/PKing/nasdata/tmp/tmp/car-accident/dataset-v1"
|
|
27
27
|
output = image_dir
|
|
28
|
-
rename_files(image_dir, output, prefix="
|
|
28
|
+
rename_files(image_dir, output, prefix="video", remove=True)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
@Author : PKing
|
|
4
|
+
@E-mail : 390737991@qq.com
|
|
5
|
+
@Date : 2022-12-31 11:37:30
|
|
6
|
+
@Brief :
|
|
7
|
+
"""
|
|
8
|
+
import os
|
|
9
|
+
import cv2
|
|
10
|
+
import numpy as np
|
|
11
|
+
from pybaseutils import file_utils, image_utils
|
|
12
|
+
from pybaseutils.cvutils import video_utils
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def task(frame, **kwargs):
|
|
16
|
+
frame = image_utils.resize_image(frame, size=(1280, None))
|
|
17
|
+
return frame
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
video_file = "/home/PKing/Pictures/ailt-video.mp4"
|
|
22
|
+
width, height, num_frames, fps = video_utils.get_video_info(video_file)
|
|
23
|
+
clip_time = (13.5, 19.0)
|
|
24
|
+
clip_index = (clip_time[0] * fps, clip_time[1] * fps)
|
|
25
|
+
# video_utils.segment_video(video_file, clip_time=clip_time)
|
|
26
|
+
video_utils.segment_video(video_file, clip_index=clip_index)
|
|
File without changes
|
|
File without changes
|