pybaseutils 2.3.5__tar.gz → 2.3.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/PKG-INFO +1 -1
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/__init__.py +1 -1
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/audio/audio_utils.py +23 -14
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dict_uils.py +1 -1
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/image_utils.py +17 -3
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils.egg-info/PKG-INFO +1 -1
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils.egg-info/SOURCES.txt +2 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/demo_labelme_crop.py +15 -7
- pybaseutils-2.3.6/test_py/demo3.py +48 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_gif_video.py +2 -2
- pybaseutils-2.3.6/test_py/model_process.py +30 -0
- pybaseutils-2.3.6/test_py/slowfastnet.py +217 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/web_socket/asr_service.py +1 -1
- pybaseutils-2.3.5/test_py/demo3.py +0 -41
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/LICENCE +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/README.md +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/base/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/base/dict_queue.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/base/list_queue.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/base64_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/converter/prelabelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/cvutils/video_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/data_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_image_text.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/file_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/http_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/log.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/media/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/media/ffmpeg_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/time_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/transforms/augment_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/web/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/web/app_gradio_image.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/web/app_stweb_image.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/web/app_webio_image.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/web/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/setup.cfg +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/setup.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/WebCrawler/search_baidu.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/WebCrawler/search_biying.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/main.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/audio_demo1.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/camera/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/camera/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/class_names.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/date_dataset.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/date_demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/datedataset_bk.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo1.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo4.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_for_annular_to_rect.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_lableme_vis.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_mosaic.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_prelabelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_video.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/flask_demo/app.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/flask_demo/utils/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/flask_demo/utils/utils.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/gradio_app.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/gradio_app_v2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/performance.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/registry/base.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/registry/component.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/registry/main.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/registry/register.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/test_fr/idcardocr.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/web_socket/__init__.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/web_socket/asr_clients.py +0 -0
- {pybaseutils-2.3.5 → pybaseutils-2.3.6}/test_py/web_socket/chat_service.py +0 -0
|
@@ -32,7 +32,7 @@ def load_pcm(filename):
|
|
|
32
32
|
|
|
33
33
|
def float32toint16(data_f32):
|
|
34
34
|
omin = -32768
|
|
35
|
-
omax =
|
|
35
|
+
omax = 32768
|
|
36
36
|
imin = -1.0
|
|
37
37
|
imax = 1.0
|
|
38
38
|
# 将数据float32从[-1.0,1.0]映射到int16
|
|
@@ -43,7 +43,7 @@ def float32toint16(data_f32):
|
|
|
43
43
|
|
|
44
44
|
def int16tofloat32(data_int16):
|
|
45
45
|
imin = -32768
|
|
46
|
-
imax =
|
|
46
|
+
imax = 32768
|
|
47
47
|
omin = -1.0
|
|
48
48
|
omax = 1.0
|
|
49
49
|
audio_data = np.array(data_int16, dtype=np.float32)
|
|
@@ -148,7 +148,7 @@ def save_pcm_from_numpy(audio_data: np.ndarray, pcm_file, data_type=np.int16):
|
|
|
148
148
|
:return:
|
|
149
149
|
"""
|
|
150
150
|
omin = -32768
|
|
151
|
-
omax =
|
|
151
|
+
omax = 32768
|
|
152
152
|
imin = -1.0
|
|
153
153
|
imax = 1.0
|
|
154
154
|
# 将数据float32转换到int16
|
|
@@ -159,7 +159,7 @@ def save_pcm_from_numpy(audio_data: np.ndarray, pcm_file, data_type=np.int16):
|
|
|
159
159
|
return bytes
|
|
160
160
|
|
|
161
161
|
|
|
162
|
-
def librosa_load(audio_file, sr=None, mono=True):
|
|
162
|
+
def librosa_load(audio_file, sr=None, mono=True, dtype="float32"):
|
|
163
163
|
"""
|
|
164
164
|
默认将多声道音频文件转换为单声道,并返回一维数组;
|
|
165
165
|
如果你需要处理多声道音频文件,可以使用 mono=False,参数来保留所有声道,并返回二维数组。
|
|
@@ -168,47 +168,55 @@ def librosa_load(audio_file, sr=None, mono=True):
|
|
|
168
168
|
:param mono: 设置为true是单通道,否则是双通道
|
|
169
169
|
:return:
|
|
170
170
|
"""
|
|
171
|
-
|
|
171
|
+
# TODO 已经对齐soundfile_load的效果
|
|
172
|
+
audio_data, sr = librosa.load(audio_file, sr=sr, mono=mono) # 非常耗时,返回是float32的数据
|
|
173
|
+
if dtype == "int16": # 将 float32 [-1.0, 1.0] 转换为 int16,
|
|
174
|
+
audio_data = float32toint16(audio_data)
|
|
172
175
|
return audio_data, sr
|
|
173
176
|
|
|
174
177
|
|
|
175
|
-
def soundfile_load(audio_file, sr=None, mono=True):
|
|
178
|
+
def soundfile_load(audio_file, sr=None, mono=True, dtype="float32"):
|
|
176
179
|
"""
|
|
177
180
|
默认会将多声道音频文件的每个声道分别存储在二维数组的不同列中,因此返回的是一个二维数组
|
|
181
|
+
|
|
178
182
|
:param audio_file:
|
|
179
183
|
:param sr: sampling rate 当设置的采样率与音频原始采样率不一致时,会进行重采样,导致非常耗时
|
|
180
184
|
:param mono: 设置为true是单通道,否则是双通道
|
|
181
185
|
:return:
|
|
182
186
|
"""
|
|
187
|
+
# TODO 默认情况下,soundfile会将数据归一化到 [-1.0, 1.0] 的浮点数范围内
|
|
188
|
+
# audio_data, orig_sr = sf.read(audio_file, samplerate=None, dtype="int16") # int16不支持重采样
|
|
183
189
|
audio_data, orig_sr = sf.read(audio_file, samplerate=None, dtype="float32") # 不能直接修改samplerate
|
|
184
190
|
if mono and audio_data.ndim == 2:
|
|
185
191
|
audio_data = np.mean(audio_data, axis=-1)
|
|
186
192
|
if sr is None or orig_sr == sr:
|
|
187
193
|
sr = orig_sr
|
|
188
|
-
else:
|
|
194
|
+
else: # TODO librosa.resample 要求输入是浮点数float32
|
|
189
195
|
audio_data = librosa.resample(y=audio_data, orig_sr=orig_sr, target_sr=sr) # 使用librosa进行重采样至目标采样率
|
|
196
|
+
if dtype == "int16": # 将 float32 [-1.0, 1.0] 转换为 int16,
|
|
197
|
+
audio_data = float32toint16(audio_data)
|
|
190
198
|
return audio_data, sr
|
|
191
199
|
|
|
192
200
|
|
|
193
201
|
def wavfile_load(audio_file):
|
|
194
202
|
sr, wav_data = wavfile.read(audio_file) # int16类型
|
|
195
|
-
# 转为float64类型
|
|
196
|
-
wav_data = wav_data / (32768)
|
|
197
|
-
# wav_data:[-0.03305054 -0.03561401 -0.038114697]
|
|
198
203
|
return wav_data, sr
|
|
199
204
|
|
|
200
205
|
|
|
201
|
-
def read_audio(audio_file, sr=16000, mono=True):
|
|
206
|
+
def read_audio(audio_file, sr=16000, mono=True, dtype="float32", use_sf=True):
|
|
202
207
|
"""
|
|
203
208
|
默认将多声道音频文件转换为单声道,并返回一维数组;
|
|
204
209
|
如果你需要处理多声道音频文件,可以使用 mono=False,参数来保留所有声道,并返回二维数组。
|
|
205
210
|
:param audio_file:
|
|
206
211
|
:param sr: sampling rate
|
|
207
212
|
:param mono: 设置为true是单通道,否则是双通道
|
|
213
|
+
:param dtype: 数据类型,int16, float32
|
|
208
214
|
:return:
|
|
209
215
|
"""
|
|
210
|
-
|
|
211
|
-
|
|
216
|
+
if use_sf:
|
|
217
|
+
audio_data, sr = soundfile_load(audio_file, sr=sr, mono=mono, dtype=dtype) # 巨慢
|
|
218
|
+
else:
|
|
219
|
+
audio_data, sr = librosa_load(audio_file, sr=sr, mono=mono, dtype=dtype) # 巨慢
|
|
212
220
|
return audio_data, sr
|
|
213
221
|
|
|
214
222
|
|
|
@@ -216,10 +224,11 @@ def save_audio(audio_file, audio_data, sr=16000):
|
|
|
216
224
|
"""
|
|
217
225
|
save audio file
|
|
218
226
|
:param audio_file:
|
|
219
|
-
:param audio_data:
|
|
227
|
+
:param audio_data: float32
|
|
220
228
|
:param sr: sampling rate
|
|
221
229
|
:return:
|
|
222
230
|
"""
|
|
231
|
+
assert audio_data.dtype == np.float32, "input data must be float32"
|
|
223
232
|
sf.write(audio_file, audio_data, samplerate=sr)
|
|
224
233
|
|
|
225
234
|
|
|
@@ -136,16 +136,19 @@ def show_batch_image(title, batch_images, index=0):
|
|
|
136
136
|
cv_show_image(title, image)
|
|
137
137
|
|
|
138
138
|
|
|
139
|
-
def show_image_plt(title, image):
|
|
139
|
+
def show_image_plt(title, image, use_rgb=True):
|
|
140
140
|
"""
|
|
141
141
|
use matplotlib to show image
|
|
142
142
|
调用matplotlib显示RGB图片
|
|
143
143
|
:param title: 图像标题
|
|
144
|
-
:param image: 图像的数据
|
|
144
|
+
:param image: 图像的数据 BGR格式
|
|
145
|
+
:param use_rgb: True:输入image是RGB的图像, False:返输入image是BGR格式的图像
|
|
145
146
|
:return:
|
|
146
147
|
"""
|
|
147
148
|
# plt.figure("show_image")
|
|
148
149
|
# print(image.dtype)
|
|
150
|
+
if image.shape[-1] == 3 and (not use_rgb):
|
|
151
|
+
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 将BGR转为RGB
|
|
149
152
|
channel = len(image.shape)
|
|
150
153
|
if channel == 3:
|
|
151
154
|
plt.imshow(image)
|
|
@@ -154,6 +157,7 @@ def show_image_plt(title, image):
|
|
|
154
157
|
plt.axis('on') # 关掉坐标轴为 off
|
|
155
158
|
plt.title(title) # 图像题目
|
|
156
159
|
plt.show()
|
|
160
|
+
return image
|
|
157
161
|
|
|
158
162
|
|
|
159
163
|
plot_image = show_image_plt
|
|
@@ -537,7 +541,7 @@ def requests_url(url, timeout=None):
|
|
|
537
541
|
return stream
|
|
538
542
|
|
|
539
543
|
|
|
540
|
-
def
|
|
544
|
+
def read_image_url(url: str, size=None, norm=False, use_rgb=False, timeout=5):
|
|
541
545
|
"""
|
|
542
546
|
根据url或者图片路径,读取图片
|
|
543
547
|
:param url:
|
|
@@ -570,6 +574,16 @@ def read_images_url(url: str, size=None, norm=False, use_rgb=False, timeout=5):
|
|
|
570
574
|
return image
|
|
571
575
|
|
|
572
576
|
|
|
577
|
+
def read_images_url(url: str or list, size=None, norm=False, use_rgb=False, timeout=5):
|
|
578
|
+
if isinstance(url, str): return read_image_url(url, size=size, norm=norm, use_rgb=use_rgb, timeout=timeout)
|
|
579
|
+
batch = []
|
|
580
|
+
for path in url:
|
|
581
|
+
image = read_image_url(path, size=size, norm=norm, use_rgb=use_rgb, timeout=timeout)
|
|
582
|
+
if image is None: print("no image:{}".format(path))
|
|
583
|
+
batch.append(image)
|
|
584
|
+
return batch
|
|
585
|
+
|
|
586
|
+
|
|
573
587
|
def read_image_batch(image_list):
|
|
574
588
|
"""
|
|
575
589
|
批量读取图片
|
|
@@ -187,7 +187,9 @@ test_py/gradio_app.py
|
|
|
187
187
|
test_py/gradio_app_v2.py
|
|
188
188
|
test_py/kafka_worker.py
|
|
189
189
|
test_py/men_tracemalloc.py
|
|
190
|
+
test_py/model_process.py
|
|
190
191
|
test_py/performance.py
|
|
192
|
+
test_py/slowfastnet.py
|
|
191
193
|
test_py/Image_enhance/__init__.py
|
|
192
194
|
test_py/Image_enhance/dmeo01.py
|
|
193
195
|
test_py/WebCrawler/__init__.py
|
|
@@ -98,11 +98,12 @@ if __name__ == '__main__':
|
|
|
98
98
|
对labelme的数据目标进行裁剪,用于制作分类数据集
|
|
99
99
|
"""
|
|
100
100
|
# 接地引线'
|
|
101
|
-
names = ['保护屏标示牌', '显示屏', '通道切换开关', '信号复归按钮', '红色圆形标签,黄色圆形标签','地极端子',
|
|
101
|
+
names = ['保护屏标示牌', '显示屏', '通道切换开关', '信号复归按钮', '红色圆形标签,黄色圆形标签', '地极端子',
|
|
102
|
+
'地极标签',
|
|
102
103
|
'红色压板开关合上,红色压板开关断开,白色压板开关合上,白色压板开关断开', '重合闸把手停用,重合闸把手单重',
|
|
103
|
-
'本体端子箱关闭,本体端子箱打开', '主变端子箱关闭,主变端子箱打开','分接开关箱关闭,分接开关箱打开',
|
|
104
|
-
'主变压器标示牌','端子箱标示牌','油温表','绕组温度表','油位指示标示牌','本体阀门','呼吸器油杯',
|
|
105
|
-
'沉降观察点标示牌','冷却器控制箱打开,冷却器控制箱关闭','冷却器','风扇','潜油泵','油流指示器','喷淋启动装置'
|
|
104
|
+
'本体端子箱关闭,本体端子箱打开', '主变端子箱关闭,主变端子箱打开', '分接开关箱关闭,分接开关箱打开',
|
|
105
|
+
'主变压器标示牌', '端子箱标示牌', '油温表', '绕组温度表', '油位指示标示牌', '本体阀门', '呼吸器油杯',
|
|
106
|
+
'沉降观察点标示牌', '冷却器控制箱打开,冷却器控制箱关闭', '冷却器', '风扇', '潜油泵', '油流指示器', '喷淋启动装置'
|
|
106
107
|
]
|
|
107
108
|
target_name = ['身穿工作服', '未穿工作服',
|
|
108
109
|
'绝缘鞋', '脚穿绝缘鞋', '长筒靴', '脚穿长筒靴', '其他鞋', '脚穿其他鞋',
|
|
@@ -118,13 +119,20 @@ if __name__ == '__main__':
|
|
|
118
119
|
"红色圆形标签", "黄色圆形标签",
|
|
119
120
|
"白色压板开关合上", "白色压板开关断开", "红色压板开关合上", "红色压板开关断开",
|
|
120
121
|
"重合闸把手停用", "重合闸把手单重",
|
|
121
|
-
'本体端子箱关闭','本体端子箱打开',
|
|
122
|
-
'
|
|
122
|
+
'本体端子箱关闭', '本体端子箱打开',
|
|
123
|
+
'主变端子箱关闭', '主变端子箱打开',
|
|
124
|
+
'分接开关箱关闭', '分接开关箱打开',
|
|
125
|
+
'冷却器控制箱打开', '冷却器控制箱关闭',
|
|
126
|
+
'万用表线头', '万用表红色线头', '万用表黑色线头'
|
|
123
127
|
]
|
|
124
128
|
# 还差核相的数据
|
|
125
129
|
datasets = [
|
|
126
130
|
# TODO 训练集
|
|
127
|
-
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/02-东莞-220KV主变压器日常巡视/dataset-
|
|
131
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/02-东莞-220KV主变压器日常巡视/dataset-test01/images',
|
|
132
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/02-东莞-220KV主变压器日常巡视/dataset-test02/images',
|
|
133
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/01-东莞-投退重合闸操作/dataset-test01/images',
|
|
134
|
+
'/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/01-东莞-投退重合闸操作/dataset-test02/images',
|
|
135
|
+
|
|
128
136
|
]
|
|
129
137
|
# dataroot = '/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det'
|
|
130
138
|
# datasets = get_sub_dataset(dataroot)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Author : Pan
|
|
5
|
+
# @E-mail :
|
|
6
|
+
# @Date : 2025-07-08 14:10:15
|
|
7
|
+
# @Brief :
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
import cv2
|
|
11
|
+
import numpy as np
|
|
12
|
+
from pybaseutils import file_utils, image_utils
|
|
13
|
+
|
|
14
|
+
import cv2
|
|
15
|
+
|
|
16
|
+
# 打开默认摄像头(0表示第一个摄像头)
|
|
17
|
+
rtsp_url = "rtsp://username:password@192.168.1.64:554/stream1"
|
|
18
|
+
# cap = cv2.VideoCapture("192.168.2.52livestream")
|
|
19
|
+
# cap = cv2.VideoCapture("rtsp://0.0.0.0:8554/")
|
|
20
|
+
# cap = cv2.VideoCapture("rtsp://192.168.2.52:8554/")
|
|
21
|
+
cap = cv2.VideoCapture("rtsp://admin:dm-ai12345@192.168.2.222")
|
|
22
|
+
|
|
23
|
+
# 检查摄像头是否成功打开
|
|
24
|
+
if not cap.isOpened():
|
|
25
|
+
print("无法打开摄像头")
|
|
26
|
+
exit()
|
|
27
|
+
|
|
28
|
+
print("按 'q' 键退出")
|
|
29
|
+
|
|
30
|
+
while True:
|
|
31
|
+
# 读取一帧
|
|
32
|
+
ret, frame = cap.read()
|
|
33
|
+
|
|
34
|
+
# 如果读取成功,ret为True
|
|
35
|
+
if not ret:
|
|
36
|
+
print("无法读取帧")
|
|
37
|
+
break
|
|
38
|
+
|
|
39
|
+
# 显示帧
|
|
40
|
+
cv2.imshow('Camera', frame)
|
|
41
|
+
|
|
42
|
+
# 按'q'键退出
|
|
43
|
+
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
44
|
+
break
|
|
45
|
+
|
|
46
|
+
# 释放资源
|
|
47
|
+
cap.release()
|
|
48
|
+
cv2.destroyAllWindows()
|
|
@@ -38,8 +38,8 @@ def android_gif():
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def python_gif():
|
|
41
|
-
video_file = "/home/PKing/nasdata/Project/3D/Car-Distance-Speed-Estimation/data/output/
|
|
42
|
-
video_utils.video2gif(video_file, interval=6, func=resize_fun, fps=4,
|
|
41
|
+
video_file = "/home/PKing/nasdata/Project/3D/Car-Distance-Speed-Estimation/data/output/video1_003.mp4"
|
|
42
|
+
video_utils.video2gif(video_file, interval=6, func=resize_fun, fps=4,start=3,end=10, use_pil=True, vis=True)
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
def image_gif():
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- coding:utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
提供模型相关方法
|
|
4
|
+
"""
|
|
5
|
+
import logging
|
|
6
|
+
import threading
|
|
7
|
+
import time
|
|
8
|
+
import asyncio
|
|
9
|
+
from pybaseutils import json_utils
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EvaluationMethod():
|
|
13
|
+
"""
|
|
14
|
+
Evaluation核心实现方法类
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def __init__(self):
|
|
18
|
+
self.msg = "ok"
|
|
19
|
+
|
|
20
|
+
async def calligraphy_hard_evaluation(self, params):
|
|
21
|
+
results = {"result": params, "msg": self.msg}
|
|
22
|
+
return results
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if __name__ == '__main__':
|
|
26
|
+
w = EvaluationMethod()
|
|
27
|
+
params = {"data": []}
|
|
28
|
+
# 使用 asyncio.run() 来运行异步方法
|
|
29
|
+
result = asyncio.run(w.calligraphy_hard_evaluation(params))
|
|
30
|
+
print(result)
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
import torch.nn as nn
|
|
3
|
+
import torch.nn.functional as F
|
|
4
|
+
from torch.autograd import Variable
|
|
5
|
+
|
|
6
|
+
__all__ = ['resnet50', 'resnet101','resnet152', 'resnet200']
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Bottleneck(nn.Module):
|
|
11
|
+
expansion = 4
|
|
12
|
+
|
|
13
|
+
def __init__(self, inplanes, planes, stride=1, downsample=None, head_conv=1):
|
|
14
|
+
super(Bottleneck, self).__init__()
|
|
15
|
+
if head_conv == 1:
|
|
16
|
+
self.conv1 = nn.Conv3d(inplanes, planes, kernel_size=1, bias=False)
|
|
17
|
+
self.bn1 = nn.BatchNorm3d(planes)
|
|
18
|
+
elif head_conv == 3:
|
|
19
|
+
self.conv1 = nn.Conv3d(inplanes, planes, kernel_size=(3, 1, 1), bias=False, padding=(1, 0, 0))
|
|
20
|
+
self.bn1 = nn.BatchNorm3d(planes)
|
|
21
|
+
else:
|
|
22
|
+
raise ValueError("Unsupported head_conv!")
|
|
23
|
+
self.conv2 = nn.Conv3d(
|
|
24
|
+
planes, planes, kernel_size=(1, 3, 3), stride=(1,stride,stride), padding=(0, 1, 1), bias=False)
|
|
25
|
+
self.bn2 = nn.BatchNorm3d(planes)
|
|
26
|
+
self.conv3 = nn.Conv3d(planes, planes * 4, kernel_size=1, bias=False)
|
|
27
|
+
self.bn3 = nn.BatchNorm3d(planes * 4)
|
|
28
|
+
self.relu = nn.ReLU(inplace=True)
|
|
29
|
+
self.downsample = downsample
|
|
30
|
+
self.stride = stride
|
|
31
|
+
|
|
32
|
+
def forward(self, x):
|
|
33
|
+
residual = x
|
|
34
|
+
|
|
35
|
+
out = self.conv1(x)
|
|
36
|
+
out = self.bn1(out)
|
|
37
|
+
out = self.relu(out)
|
|
38
|
+
|
|
39
|
+
out = self.conv2(out)
|
|
40
|
+
out = self.bn2(out)
|
|
41
|
+
out = self.relu(out)
|
|
42
|
+
|
|
43
|
+
out = self.conv3(out)
|
|
44
|
+
out = self.bn3(out)
|
|
45
|
+
|
|
46
|
+
if self.downsample is not None:
|
|
47
|
+
residual = self.downsample(x)
|
|
48
|
+
out += residual
|
|
49
|
+
out = self.relu(out)
|
|
50
|
+
|
|
51
|
+
return out
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class SlowFast(nn.Module):
|
|
55
|
+
def __init__(self, block=Bottleneck, layers=[3, 4, 6, 3], class_num=10, dropout=0.5 ):
|
|
56
|
+
super(SlowFast, self).__init__()
|
|
57
|
+
|
|
58
|
+
self.fast_inplanes = 8
|
|
59
|
+
self.fast_conv1 = nn.Conv3d(3, 8, kernel_size=(5, 7, 7), stride=(1, 2, 2), padding=(2, 3, 3), bias=False)
|
|
60
|
+
self.fast_bn1 = nn.BatchNorm3d(8)
|
|
61
|
+
self.fast_relu = nn.ReLU(inplace=True)
|
|
62
|
+
self.fast_maxpool = nn.MaxPool3d(kernel_size=(1, 3, 3), stride=(1, 2, 2), padding=(0, 1, 1))
|
|
63
|
+
self.fast_res2 = self._make_layer_fast(block, 8, layers[0], head_conv=3)
|
|
64
|
+
self.fast_res3 = self._make_layer_fast(
|
|
65
|
+
block, 16, layers[1], stride=2, head_conv=3)
|
|
66
|
+
self.fast_res4 = self._make_layer_fast(
|
|
67
|
+
block, 32, layers[2], stride=2, head_conv=3)
|
|
68
|
+
self.fast_res5 = self._make_layer_fast(
|
|
69
|
+
block, 64, layers[3], stride=2, head_conv=3)
|
|
70
|
+
|
|
71
|
+
self.lateral_p1 = nn.Conv3d(8, 8*2, kernel_size=(5, 1, 1), stride=(8, 1 ,1), bias=False, padding=(2, 0, 0))
|
|
72
|
+
self.lateral_res2 = nn.Conv3d(32,32*2, kernel_size=(5, 1, 1), stride=(8, 1 ,1), bias=False, padding=(2, 0, 0))
|
|
73
|
+
self.lateral_res3 = nn.Conv3d(64,64*2, kernel_size=(5, 1, 1), stride=(8, 1 ,1), bias=False, padding=(2, 0, 0))
|
|
74
|
+
self.lateral_res4 = nn.Conv3d(128,128*2, kernel_size=(5, 1, 1), stride=(8, 1 ,1), bias=False, padding=(2, 0, 0))
|
|
75
|
+
|
|
76
|
+
self.slow_inplanes = 64+64//8*2
|
|
77
|
+
self.slow_conv1 = nn.Conv3d(3, 64, kernel_size=(1, 7, 7), stride=(1, 2, 2), padding=(0, 3, 3), bias=False)
|
|
78
|
+
self.slow_bn1 = nn.BatchNorm3d(64)
|
|
79
|
+
self.slow_relu = nn.ReLU(inplace=True)
|
|
80
|
+
self.slow_maxpool = nn.MaxPool3d(kernel_size=(1, 3, 3), stride=(1, 2, 2), padding=(0, 1, 1))
|
|
81
|
+
self.slow_res2 = self._make_layer_slow(block, 64, layers[0], head_conv=1)
|
|
82
|
+
self.slow_res3 = self._make_layer_slow(
|
|
83
|
+
block, 128, layers[1], stride=2, head_conv=1)
|
|
84
|
+
self.slow_res4 = self._make_layer_slow(
|
|
85
|
+
block, 256, layers[2], stride=2, head_conv=3)
|
|
86
|
+
self.slow_res5 = self._make_layer_slow(
|
|
87
|
+
block, 512, layers[3], stride=2, head_conv=3)
|
|
88
|
+
self.dp = nn.Dropout(dropout)
|
|
89
|
+
self.fc = nn.Linear(self.fast_inplanes+2048, class_num, bias=False)
|
|
90
|
+
def forward(self, input):
|
|
91
|
+
fast, lateral = self.FastPath(input[:, :, ::2, :, :])
|
|
92
|
+
slow = self.SlowPath(input[:, :, ::16, :, :], lateral)
|
|
93
|
+
x = torch.cat([slow, fast], dim=1)
|
|
94
|
+
x = self.dp(x)
|
|
95
|
+
x = self.fc(x)
|
|
96
|
+
return x
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def SlowPath(self, input, lateral):
|
|
101
|
+
x = self.slow_conv1(input)
|
|
102
|
+
x = self.slow_bn1(x)
|
|
103
|
+
x = self.slow_relu(x)
|
|
104
|
+
x = self.slow_maxpool(x)
|
|
105
|
+
x = torch.cat([x, lateral[0]],dim=1)
|
|
106
|
+
x = self.slow_res2(x)
|
|
107
|
+
x = torch.cat([x, lateral[1]],dim=1)
|
|
108
|
+
x = self.slow_res3(x)
|
|
109
|
+
x = torch.cat([x, lateral[2]],dim=1)
|
|
110
|
+
x = self.slow_res4(x)
|
|
111
|
+
x = torch.cat([x, lateral[3]],dim=1)
|
|
112
|
+
x = self.slow_res5(x)
|
|
113
|
+
x = nn.AdaptiveAvgPool3d(1)(x)
|
|
114
|
+
x = x.view(-1, x.size(1))
|
|
115
|
+
return x
|
|
116
|
+
|
|
117
|
+
def FastPath(self, input):
|
|
118
|
+
lateral = []
|
|
119
|
+
x = self.fast_conv1(input)
|
|
120
|
+
x = self.fast_bn1(x)
|
|
121
|
+
x = self.fast_relu(x)
|
|
122
|
+
pool1 = self.fast_maxpool(x)
|
|
123
|
+
lateral_p = self.lateral_p1(pool1)
|
|
124
|
+
lateral.append(lateral_p)
|
|
125
|
+
|
|
126
|
+
res2 = self.fast_res2(pool1)
|
|
127
|
+
lateral_res2 = self.lateral_res2(res2)
|
|
128
|
+
lateral.append(lateral_res2)
|
|
129
|
+
|
|
130
|
+
res3 = self.fast_res3(res2)
|
|
131
|
+
lateral_res3 = self.lateral_res3(res3)
|
|
132
|
+
lateral.append(lateral_res3)
|
|
133
|
+
|
|
134
|
+
res4 = self.fast_res4(res3)
|
|
135
|
+
lateral_res4 = self.lateral_res4(res4)
|
|
136
|
+
lateral.append(lateral_res4)
|
|
137
|
+
|
|
138
|
+
res5 = self.fast_res5(res4)
|
|
139
|
+
x = nn.AdaptiveAvgPool3d(1)(res5)
|
|
140
|
+
x = x.view(-1, x.size(1))
|
|
141
|
+
|
|
142
|
+
return x, lateral
|
|
143
|
+
|
|
144
|
+
def _make_layer_fast(self, block, planes, blocks, stride=1, head_conv=1):
|
|
145
|
+
downsample = None
|
|
146
|
+
if stride != 1 or self.fast_inplanes != planes * block.expansion:
|
|
147
|
+
downsample = nn.Sequential(
|
|
148
|
+
nn.Conv3d(
|
|
149
|
+
self.fast_inplanes,
|
|
150
|
+
planes * block.expansion,
|
|
151
|
+
kernel_size=1,
|
|
152
|
+
stride=(1,stride,stride),
|
|
153
|
+
bias=False), nn.BatchNorm3d(planes * block.expansion))
|
|
154
|
+
|
|
155
|
+
layers = []
|
|
156
|
+
layers.append(block(self.fast_inplanes, planes, stride, downsample, head_conv=head_conv))
|
|
157
|
+
self.fast_inplanes = planes * block.expansion
|
|
158
|
+
for i in range(1, blocks):
|
|
159
|
+
layers.append(block(self.fast_inplanes, planes, head_conv=head_conv))
|
|
160
|
+
return nn.Sequential(*layers)
|
|
161
|
+
|
|
162
|
+
def _make_layer_slow(self, block, planes, blocks, stride=1, head_conv=1):
|
|
163
|
+
downsample = None
|
|
164
|
+
if stride != 1 or self.slow_inplanes != planes * block.expansion:
|
|
165
|
+
downsample = nn.Sequential(
|
|
166
|
+
nn.Conv3d(
|
|
167
|
+
self.slow_inplanes,
|
|
168
|
+
planes * block.expansion,
|
|
169
|
+
kernel_size=1,
|
|
170
|
+
stride=(1,stride,stride),
|
|
171
|
+
bias=False), nn.BatchNorm3d(planes * block.expansion))
|
|
172
|
+
|
|
173
|
+
layers = []
|
|
174
|
+
layers.append(block(self.slow_inplanes, planes, stride, downsample, head_conv=head_conv))
|
|
175
|
+
self.slow_inplanes = planes * block.expansion
|
|
176
|
+
for i in range(1, blocks):
|
|
177
|
+
layers.append(block(self.slow_inplanes, planes, head_conv=head_conv))
|
|
178
|
+
|
|
179
|
+
self.slow_inplanes = planes * block.expansion + planes * block.expansion//8*2
|
|
180
|
+
return nn.Sequential(*layers)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def resnet50(**kwargs):
|
|
186
|
+
"""Constructs a ResNet-50 model.
|
|
187
|
+
"""
|
|
188
|
+
model = SlowFast(Bottleneck, [3, 4, 6, 3], **kwargs)
|
|
189
|
+
return model
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def resnet101(**kwargs):
|
|
193
|
+
"""Constructs a ResNet-101 model.
|
|
194
|
+
"""
|
|
195
|
+
model = SlowFast(Bottleneck, [3, 4, 23, 3], **kwargs)
|
|
196
|
+
return model
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def resnet152(**kwargs):
|
|
200
|
+
"""Constructs a ResNet-101 model.
|
|
201
|
+
"""
|
|
202
|
+
model = SlowFast(Bottleneck, [3, 8, 36, 3], **kwargs)
|
|
203
|
+
return model
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def resnet200(**kwargs):
|
|
207
|
+
"""Constructs a ResNet-101 model.
|
|
208
|
+
"""
|
|
209
|
+
model = SlowFast(Bottleneck, [3, 24, 36, 3], **kwargs)
|
|
210
|
+
return model
|
|
211
|
+
|
|
212
|
+
if __name__ == "__main__":
|
|
213
|
+
num_classes = 101
|
|
214
|
+
input_tensor = torch.autograd.Variable(torch.rand(1, 3, 64, 224, 224))
|
|
215
|
+
model = resnet50(class_num=num_classes)
|
|
216
|
+
output = model(input_tensor)
|
|
217
|
+
print(output.size())
|
|
@@ -64,7 +64,7 @@ class MainSocketHandler(tornado.websocket.WebSocketHandler):
|
|
|
64
64
|
|
|
65
65
|
def on_message(self, data):
|
|
66
66
|
self.time = time.time() # 更新最后活跃时间
|
|
67
|
-
print(f"收到来自{self.cid}
|
|
67
|
+
print(f"收到来自{self.cid}的消息,data={data[:10]}")
|
|
68
68
|
# 使用FunASR进行流式识别
|
|
69
69
|
result = model.generate(input=data, cache=cache, is_final=False, chunk_size=chunk_size,
|
|
70
70
|
encoder_chunk_look_back=encoder_chunk_look_back,
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
# --------------------------------------------------------
|
|
4
|
-
# @Author : Pan
|
|
5
|
-
# @E-mail :
|
|
6
|
-
# @Date : 2025-07-08 14:10:15
|
|
7
|
-
# @Brief :
|
|
8
|
-
# --------------------------------------------------------
|
|
9
|
-
"""
|
|
10
|
-
import cv2
|
|
11
|
-
import numpy as np
|
|
12
|
-
from pybaseutils import file_utils, image_utils
|
|
13
|
-
|
|
14
|
-
import os
|
|
15
|
-
from pybaseutils.dataloader import parser_coco_kps
|
|
16
|
-
|
|
17
|
-
import os
|
|
18
|
-
from pybaseutils.dataloader import parser_voc
|
|
19
|
-
|
|
20
|
-
if __name__ == "__main__":
|
|
21
|
-
# 修改为自己数据集的路径
|
|
22
|
-
data_root = "/home/PKing/nasdata/tmp/tmp/pen/笔尖指尖标注方法"
|
|
23
|
-
class_name = []
|
|
24
|
-
dataset = parser_voc.VOCDataset(filename=None,
|
|
25
|
-
data_root=data_root,
|
|
26
|
-
anno_dir=None,
|
|
27
|
-
image_dir=None,
|
|
28
|
-
class_name=class_name,
|
|
29
|
-
transform=None,
|
|
30
|
-
use_rgb=False,
|
|
31
|
-
check=False,
|
|
32
|
-
shuffle=False)
|
|
33
|
-
print("have num:{}".format(len(dataset)))
|
|
34
|
-
class_name = dataset.class_name
|
|
35
|
-
for i in range(len(dataset)):
|
|
36
|
-
data = dataset.__getitem__(i)
|
|
37
|
-
image, targets, image_id = data["image"], data["target"], data["image_id"]
|
|
38
|
-
print(image_id)
|
|
39
|
-
bboxes, labels = targets[:, 0:4], targets[:, 4:5]
|
|
40
|
-
parser_voc.show_target_image(image, bboxes, labels, normal=False, transpose=False,
|
|
41
|
-
class_name=class_name, use_rgb=False, thickness=3, fontScale=1.2)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|