pybaseutils 2.4.0__tar.gz → 2.4.2__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.0 → pybaseutils-2.4.2}/PKG-INFO +10 -6
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/README.md +1 -1
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/__init__.py +1 -1
- pybaseutils-2.4.2/pybaseutils/base/list_queue.py +116 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/base64_utils.py +17 -9
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/video_utils.py +7 -2
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_labelme.py +15 -15
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/file_utils.py +43 -17
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/http_utils.py +2 -2
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/image_utils.py +17 -11
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/time_utils.py +19 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/PKG-INFO +10 -6
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/setup.cfg +0 -0
- pybaseutils-2.4.2/test_py/demo1.py +9 -0
- pybaseutils-2.4.2/test_py/demo4.py +19 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_lableme_vis.py +4 -4
- pybaseutils-2.4.0/pybaseutils/base/list_queue.py +0 -64
- pybaseutils-2.4.0/test_py/demo1.py +0 -13
- pybaseutils-2.4.0/test_py/demo4.py +0 -74
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/LICENCE +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/audio_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/pyaudio_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/audio/vad_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/base/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/base/dict_queue.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/batch_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/build_utils/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/build_utils/cython_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/build_utils/pyarmor_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/kmean.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/maxmin_distance.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cluster/similarity.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/color_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/config_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_cvat.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/build_voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/concat_coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_coco2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_labelme2yolo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_voc2yolo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_yolo2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/convert_yolo2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/converter/prelabelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/coords_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/corner_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/monitor.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/mouse_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/cvutils/nms_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/data_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/balanced_classes.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/base_coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/base_dataset.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/data_resample.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_coco_det.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_coco_ins.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_coco_kps.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_image_folder.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_image_text.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_labelme_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/parser_yolo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dataloader/voc_seg_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/dict_uils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/QueueTable.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/kalman_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/mean_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/motion_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/filter/pose_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/font_style/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/font_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/geometry_tools.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/heatmap_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/json_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/log.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/log_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/media/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/media/ffmpeg_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/accuracy.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/average_meter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/class_report.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/plot_pr.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/metrics/plot_roc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/numpy_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pandas_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/plot_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/bones_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/human_pose.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pose/pose_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pycpp/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pycpp/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/pycpp/main.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/server/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/server/apm_server.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/setup_config.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/singleton_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/text_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/thread_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracemalloc_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracemalloc_utils2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/QueueTable.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/kalman_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/mean_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/motion_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/tracking/pose_filter.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/affine_transform.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/augment_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/face_alignment.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/transforms/transform_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/app_gradio_image.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/app_stweb_image.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/app_webio_image.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/web/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/word_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/worker.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils/yaml_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/SOURCES.txt +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/dependency_links.txt +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/not-zip-safe +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/pybaseutils.egg-info/top_level.txt +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/setup.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/Image_enhance/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/Image_enhance/dmeo01.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/WebCrawler/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/WebCrawler/search_baidu.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/WebCrawler/search_biying.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/action_dataset.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/build_cython.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/build_pyarmor.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/build_service.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/copy_move.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_labelme_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_labelme_shock.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_video_aije.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_voc_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/demo_voc_vis.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/get_pair_data.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/aije/video_convertor.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/main.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/main_read.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/segment.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/speechbrain_asr_indoor_prod.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio/speechbrain_demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/audio_demo1.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/camera/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/camera/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/captcha/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/captcha/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/class_attribute.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/class_names.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/AffectNet.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/AsianMovie.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/BITVehicle2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/BSTLD2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/CCPD.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/CCPD2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/FL3D_dataset.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/FreiHAND2coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/MTFL2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/TT100K.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/WaterMeters1.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/WaterMeters2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/concat_coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_coco2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_cvat2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_gesture2hand.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2cvat.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_labelme2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/convert_voc2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/fatigue_driving.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/fdd_dataset.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/get_pair_data.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/handpose2coco.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/insects_for_aichallenger.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/tt100k_utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/ua_detrac2voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/ucf101_dataset.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/converter/voc_sbd2labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/build_cython.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/build_pyarmor.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/cryptography_demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/fun_sum.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/main.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/model_des_enctypt.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/cython_build/model_enctypt.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/date_dataset.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/date_demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/datedataset_bk.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo3.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_async_await1.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_async_await2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_coco_vis.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_copy_files.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_copy_files_for_voc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_ffmpy.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_annular_to_rect.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_pair_file.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_polygon.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_for_trt.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_get_file_label.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_get_file_list.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_gif.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_gif_video.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_image_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_kpts.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_labelme_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_metrics.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_mosaic.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_mouse.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_nii.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_pandas.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_plot.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_prelabelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_rename.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_standard_image .py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_standard_video .py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_taichi.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_video.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_video_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_voc_crop.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_voc_vis.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_word_similar.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_worker1.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/demo_worker2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/detect_face_person.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/detector/predet_labelme.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/edit_distance/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/edit_distance/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/edit_distance/text_matching.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/app.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/utils/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/flask_demo/utils/utils.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/get_file_list.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/gradio_app.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/gradio_app_v2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/demo_correction_v1.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/demo_correction_v2.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/image_correction/demo_correction_v3.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/kafka_worker.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/men_tracemalloc.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/demo01.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/demo02.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/hello_milvus.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/milvus_demo/milvus_client.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/model_process.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/performance.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/pose/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/pose/human_pose.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/redis_py/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/redis_py/knn_search.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/redis_py/redis_client.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/base.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/component.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/main.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/registry/register.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/GRU.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/TCN.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/single_class/demo.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/slowfastnet.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/test_fr/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/test_fr/demo11.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/test_fr/idcardocr.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/__init__.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/asr_clients.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/asr_service.py +0 -0
- {pybaseutils-2.4.0 → pybaseutils-2.4.2}/test_py/web_socket/chat_service.py +0 -0
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: pybaseutils
|
|
5
5
|
Home-page: https://github.com/PanJinquan/base-utils
|
|
6
6
|
Author: PanJinquan
|
|
7
7
|
Author-email: 390737991@qq.com
|
|
8
8
|
License: MIT
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
License-File: LICENCE
|
|
10
|
+
Dynamic: author
|
|
11
|
+
Dynamic: author-email
|
|
12
|
+
Dynamic: description
|
|
13
|
+
Dynamic: home-page
|
|
14
|
+
Dynamic: license
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
Dynamic: summary
|
|
11
17
|
|
|
12
18
|
base-utils
|
|
13
19
|
==========
|
|
@@ -37,7 +43,7 @@ pybaseutils是个人开发常用的python库,集成了python等常用的算法
|
|
|
37
43
|
- 安装方法2:pip install –upgrade -i https://pypi.org/simple
|
|
38
44
|
pybaseutils (从pypi源下载最新版本)
|
|
39
45
|
- 设置默认的镜像源:pip config set global.index-url
|
|
40
|
-
https://pypi.tuna.tsinghua.edu.cn/simple
|
|
46
|
+
https://pypi.tuna.tsinghua.edu.cn/simple
|
|
41
47
|
- 超时异常:pip –default-timeout=1000000000
|
|
42
48
|
|
|
43
49
|
一些问题修复说明
|
|
@@ -142,5 +148,3 @@ base_utils(C++)
|
|
|
142
148
|
DEBUG_IMSHOW("image", image);
|
|
143
149
|
return 0;
|
|
144
150
|
}
|
|
145
|
-
|
|
146
|
-
|
|
@@ -20,7 +20,7 @@ pybaseutils是个人开发常用的python库,集成了python等常用的算法
|
|
|
20
20
|
|
|
21
21
|
- 安装方法1:pip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple pybaseutils (有延时,可能不是最新版本)
|
|
22
22
|
- 安装方法2:pip install --upgrade -i https://pypi.org/simple pybaseutils (从pypi源下载最新版本)
|
|
23
|
-
- 设置默认的镜像源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
|
23
|
+
- 设置默认的镜像源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
|
24
24
|
- 超时异常:pip --default-timeout=1000000000
|
|
25
25
|
|
|
26
26
|
## 一些问题修复说明
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Author : Pan
|
|
5
|
+
# @E-mail :
|
|
6
|
+
# @Date : 2025-07-15 10:56:37
|
|
7
|
+
# @Brief : 列表队列
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
import math
|
|
11
|
+
import queue
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Queue():
|
|
15
|
+
"""普通队列,多个POD请求时,无法实现同步数据"""
|
|
16
|
+
|
|
17
|
+
def __init__(self, name="defaultlist", maxsize=10, **kwargs):
|
|
18
|
+
"""
|
|
19
|
+
queue是一个列表队列,队列大小由maxsize指定
|
|
20
|
+
:param name: 队列名称
|
|
21
|
+
:param maxsize:
|
|
22
|
+
"""
|
|
23
|
+
self.name = name
|
|
24
|
+
self.maxsize = maxsize
|
|
25
|
+
self.queue = queue.Queue(maxsize=maxsize)
|
|
26
|
+
|
|
27
|
+
def empty(self, ):
|
|
28
|
+
return self.queue.empty()
|
|
29
|
+
|
|
30
|
+
def __del__(self):
|
|
31
|
+
if not self.queue.empty(): self.queue.queue.clear()
|
|
32
|
+
|
|
33
|
+
def get_queue(self, ):
|
|
34
|
+
return self.queue.queue
|
|
35
|
+
|
|
36
|
+
def set_queue(self, queue):
|
|
37
|
+
self.queue = queue
|
|
38
|
+
|
|
39
|
+
def qsize(self) -> int:
|
|
40
|
+
return self.queue.qsize()
|
|
41
|
+
|
|
42
|
+
def pop(self, block=True, timeout=None):
|
|
43
|
+
"""
|
|
44
|
+
Remove and return an item from the queue,index=0
|
|
45
|
+
:param block: 是否阻塞等待
|
|
46
|
+
:param timeout: 超时时间
|
|
47
|
+
:return: 弹出的队列数据
|
|
48
|
+
"""
|
|
49
|
+
out = self.queue.get(block=block, timeout=timeout)
|
|
50
|
+
return out
|
|
51
|
+
|
|
52
|
+
def pop_items(self, nums=1, block=True, timeout=None):
|
|
53
|
+
"""
|
|
54
|
+
弹出队列的多个项
|
|
55
|
+
:param nums: 弹出队列的数量
|
|
56
|
+
:param block: 是否阻塞等待
|
|
57
|
+
:param timeout: 超时时间
|
|
58
|
+
:return: 弹出的队列数据
|
|
59
|
+
"""
|
|
60
|
+
items = [self.pop(block=block, timeout=timeout) for i in range(nums)]
|
|
61
|
+
return items
|
|
62
|
+
|
|
63
|
+
def get(self, index=0):
|
|
64
|
+
"""get an item from the queue,index=0"""
|
|
65
|
+
return self.queue.queue[index]
|
|
66
|
+
|
|
67
|
+
def get_items(self, nums=1, index: list = []):
|
|
68
|
+
"""
|
|
69
|
+
获取队列的多个项
|
|
70
|
+
:param nums: 获取队列的数量
|
|
71
|
+
:param index: 获取队列的索引
|
|
72
|
+
:return: 获取的队列数据
|
|
73
|
+
"""
|
|
74
|
+
if index:
|
|
75
|
+
items = [self.queue.queue[i] for i in index]
|
|
76
|
+
else:
|
|
77
|
+
items = [self.queue.queue[i] for i in range(nums)]
|
|
78
|
+
return items
|
|
79
|
+
|
|
80
|
+
def put(self, item, block=False, timeout=None):
|
|
81
|
+
"""
|
|
82
|
+
Put an item into the queue,index=n
|
|
83
|
+
:param item: 要放入队列的项
|
|
84
|
+
:param block: True当队列满了,阻塞等待插入数据; False,不等待,直接弹出队头数据再插入数据
|
|
85
|
+
:param timeout: 超时时间
|
|
86
|
+
:return:
|
|
87
|
+
"""
|
|
88
|
+
while self.qsize() >= self.maxsize and not block: self.pop()
|
|
89
|
+
return self.queue.put(item, block=block, timeout=timeout)
|
|
90
|
+
|
|
91
|
+
def get_window(self, winsize=1, overlap=0.0, block=True, timeout=None):
|
|
92
|
+
"""
|
|
93
|
+
获取队列的窗口数据
|
|
94
|
+
:param winsize: 窗口大小
|
|
95
|
+
:param overlap: 窗口重叠率
|
|
96
|
+
:return: 队列窗口数据
|
|
97
|
+
"""
|
|
98
|
+
size = int(winsize * overlap)
|
|
99
|
+
data1 = self.pop_items(nums=winsize - size, block=block, timeout=timeout)
|
|
100
|
+
data2 = self.get_items(nums=size)
|
|
101
|
+
return data1 + data2
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
if __name__ == '__main__':
|
|
105
|
+
q = Queue(maxsize=3)
|
|
106
|
+
q.put({"file": "1.jpg"})
|
|
107
|
+
q.put({"file": "2.jpg"})
|
|
108
|
+
q.put({"file": "3.jpg"})
|
|
109
|
+
q.put({"file": "4.jpg"})
|
|
110
|
+
q.put({"file": "5.jpg"})
|
|
111
|
+
print(q.get_queue())
|
|
112
|
+
print(q.get(0))
|
|
113
|
+
print(q.get_queue())
|
|
114
|
+
print(q.pop(3))
|
|
115
|
+
print(q.get_queue())
|
|
116
|
+
print(1 / 2)
|
|
@@ -14,7 +14,7 @@ import base64
|
|
|
14
14
|
import numpy as np
|
|
15
15
|
from typing import Any
|
|
16
16
|
|
|
17
|
-
IMG_PREFIX = "image/
|
|
17
|
+
IMG_PREFIX = "image/jpg" # 图片base64字符串前缀
|
|
18
18
|
precision = 6 # 小数点精度
|
|
19
19
|
|
|
20
20
|
|
|
@@ -35,7 +35,7 @@ def base642image(bs64, prefix=IMG_PREFIX, use_rgb=False) -> np.ndarray:
|
|
|
35
35
|
bs64 = bs64[len(prefix):]
|
|
36
36
|
bs64 = bytes(bs64, 'utf-8')
|
|
37
37
|
image = base64.b64decode(bs64)
|
|
38
|
-
image = np.
|
|
38
|
+
image = np.frombuffer(image, np.uint8)
|
|
39
39
|
image = cv2.imdecode(image, flags=cv2.IMREAD_UNCHANGED)
|
|
40
40
|
# image = cv2.imdecode(image, cv2.IMREAD_COLOR)
|
|
41
41
|
if use_rgb:
|
|
@@ -63,7 +63,8 @@ def image2base64(image: np.ndarray, prefix=IMG_PREFIX, use_rgb=False) -> str:
|
|
|
63
63
|
if len(img.shape) == 3 and use_rgb:
|
|
64
64
|
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
|
|
65
65
|
ext = prefix.split("/")
|
|
66
|
-
ext = "." + ext[1] if len(ext) == 2 else ".png"
|
|
66
|
+
# ext = "." + ext[1] if len(ext) == 2 else ".png" # TODO libpng error: bad parameters to zlib
|
|
67
|
+
ext = "." + ext[1] if len(ext) == 2 else ".jpg"
|
|
67
68
|
img = cv2.imencode(ext, img)[1]
|
|
68
69
|
bs64 = prefix + base64.b64encode(img).decode()
|
|
69
70
|
return bs64
|
|
@@ -142,10 +143,17 @@ def base642array(data: Any, prefix=IMG_PREFIX, use_rgb=False) -> Any:
|
|
|
142
143
|
|
|
143
144
|
serialization = array2base64 # 序列化
|
|
144
145
|
deserialization = base642array # 反序列化
|
|
145
|
-
|
|
146
146
|
if __name__ == "__main__":
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
from pybaseutils import file_utils, image_utils
|
|
148
|
+
|
|
149
|
+
image_dir = "/home/PKing/Downloads/image"
|
|
150
|
+
image_dir = "/media/PKing/dev1/SDK/base-utils/data/labelme/JPEGImages"
|
|
151
|
+
image_list = file_utils.get_images_list(image_dir)
|
|
152
|
+
for image_file in image_list:
|
|
153
|
+
print(image_file)
|
|
154
|
+
src = image_utils.read_image(image_file, use_rgb=True)
|
|
155
|
+
image_utils.show_image("src", src, delay=10)
|
|
156
|
+
data = {"image": src, "file": image_file}
|
|
157
|
+
data = serialization(data)
|
|
158
|
+
data = deserialization(data)
|
|
159
|
+
print(data.keys())
|
|
@@ -222,7 +222,8 @@ def video_capture(video_file: int or str, save_video: str or int = None, interva
|
|
|
222
222
|
title: 控制显示窗口名
|
|
223
223
|
:return:
|
|
224
224
|
"""
|
|
225
|
-
|
|
225
|
+
video_file = file_utils.str2number(video_file)
|
|
226
|
+
if isinstance(video_file, str): assert os.path.exists(video_file), f"video_file={video_file}"
|
|
226
227
|
video_cap = image_utils.get_video_capture(video_file)
|
|
227
228
|
w, h, num_frames, fps = image_utils.get_video_info(video_cap)
|
|
228
229
|
start = int(kwargs.get("start", 0) * fps)
|
|
@@ -279,6 +280,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
|
|
|
279
280
|
speed: 播放速度
|
|
280
281
|
:return: frame, count, w, h, fps =data_info['frame'],data_info['count'],data_info['w'],data_info['h'],data_info['fps']
|
|
281
282
|
"""
|
|
283
|
+
video_file = file_utils.str2number(video_file)
|
|
282
284
|
if isinstance(video_file, str): assert os.path.exists(video_file), f"video_file={video_file}"
|
|
283
285
|
video_cap = image_utils.get_video_capture(video_file, fps=None)
|
|
284
286
|
w, h, num_frames, fps = image_utils.get_video_info(video_cap)
|
|
@@ -291,6 +293,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
|
|
|
291
293
|
count = 0
|
|
292
294
|
video_writer = None
|
|
293
295
|
use_fast = kwargs.get("use_fast", False)
|
|
296
|
+
data_info = {}
|
|
294
297
|
while True:
|
|
295
298
|
ret, frame = (False, None) if use_fast else video_cap.read()
|
|
296
299
|
if count % interval == 0 and count >= start:
|
|
@@ -301,7 +304,8 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
|
|
|
301
304
|
if not ret or 0 < end < count or frame is None: break
|
|
302
305
|
if size: frame = image_utils.resize_image(frame, size=size)
|
|
303
306
|
if task: frame = task(frame, **kwargs)
|
|
304
|
-
|
|
307
|
+
t = round(count / fps, 3)
|
|
308
|
+
data_info = {"count": count, "time": t, "frame": frame, "w": w, "h": h, "fps": fps, "offset": count}
|
|
305
309
|
# TODO 返回data_info
|
|
306
310
|
yield data_info
|
|
307
311
|
frame = data_info["frame"]
|
|
@@ -315,6 +319,7 @@ def video_iterator(video_file: int or str, save_video: str or int = None, interv
|
|
|
315
319
|
if video_writer:
|
|
316
320
|
print("save video:{}".format(save_video))
|
|
317
321
|
video_writer.release()
|
|
322
|
+
# yield data_info # TODO FIX 最后一帧数据重复返回
|
|
318
323
|
|
|
319
324
|
|
|
320
325
|
def resize_task(frame, **kwargs):
|
|
@@ -152,7 +152,8 @@ class LabelMeDataset(Dataset):
|
|
|
152
152
|
if not os.path.exists(image_file):
|
|
153
153
|
continue
|
|
154
154
|
annotation, width, height = self.load_annotations(anno_file)
|
|
155
|
-
data_info = self.parser_annotation(annotation, self.total_names,
|
|
155
|
+
data_info = self.parser_annotation(annotation, self.total_names, size=(width, height),
|
|
156
|
+
min_points=self.min_points,
|
|
156
157
|
unique=self.unique)
|
|
157
158
|
if self.use_kpt:
|
|
158
159
|
data_info = self.get_kpts_info(data_info, anno_file=anno_file, check_kpt=self.check_kpt, disp=True)
|
|
@@ -210,12 +211,12 @@ class LabelMeDataset(Dataset):
|
|
|
210
211
|
annotation, width, height = self.load_annotations(anno_file)
|
|
211
212
|
if self.kwargs.get("read_image", True): # 是否读取图片
|
|
212
213
|
image = self.read_image(image_file, use_rgb=self.use_rgb)
|
|
213
|
-
|
|
214
|
-
size = (
|
|
214
|
+
height, width = image.shape[:2]
|
|
215
|
+
size = (width, height)
|
|
215
216
|
else:
|
|
216
|
-
image,
|
|
217
|
-
data_info = self.parser_annotation(annotation, self.total_names,
|
|
218
|
-
|
|
217
|
+
image, size = None, (width, height)
|
|
218
|
+
data_info = self.parser_annotation(annotation, self.total_names, size=size, min_points=self.min_points,
|
|
219
|
+
unique=self.unique)
|
|
219
220
|
if self.use_kpt:
|
|
220
221
|
data_info = self.get_kpts_info(data_info, anno_file=anno_file, check_kpt=self.check_kpt)
|
|
221
222
|
# TODO dict(boxes, labels, points, groups, names, keypoints)
|
|
@@ -319,11 +320,11 @@ class LabelMeDataset(Dataset):
|
|
|
319
320
|
return image
|
|
320
321
|
|
|
321
322
|
@staticmethod
|
|
322
|
-
def parser_annotation(annotation: dict, class_dict={},
|
|
323
|
+
def parser_annotation(annotation: dict, class_dict={}, size=(), min_points=-1, unique=False):
|
|
323
324
|
"""
|
|
324
325
|
:param annotation: labelme标注的数据
|
|
325
326
|
:param class_dict: label映射,如{"person":0,"car":1}
|
|
326
|
-
:param
|
|
327
|
+
:param size: 图片(W,H),可进行坐标点的维度检查,避免越界
|
|
327
328
|
:param min_points: 当标注的轮廓点的个数小于等于min_points,会被剔除;负数不剔除
|
|
328
329
|
:return:
|
|
329
330
|
"""
|
|
@@ -344,10 +345,9 @@ class LabelMeDataset(Dataset):
|
|
|
344
345
|
continue
|
|
345
346
|
gid = anno.get("group_id", gid_index) or gid_index
|
|
346
347
|
kpt = anno.get("keypoints", [])
|
|
347
|
-
if
|
|
348
|
-
|
|
349
|
-
pts[:,
|
|
350
|
-
pts[:, 1] = np.clip(pts[:, 1], 0, h - 1)
|
|
348
|
+
if size:
|
|
349
|
+
pts[:, 0] = np.clip(pts[:, 0], 0, size[0] - 1)
|
|
350
|
+
pts[:, 1] = np.clip(pts[:, 1], 0, size[1] - 1)
|
|
351
351
|
box = image_utils.polygons2boxes([pts])[0]
|
|
352
352
|
if shape_type == "rectangle":
|
|
353
353
|
pts = image_utils.boxes2polygons([box])[0]
|
|
@@ -533,15 +533,15 @@ def LabelMeDatasets(filename=None,
|
|
|
533
533
|
return datasets
|
|
534
534
|
|
|
535
535
|
|
|
536
|
-
def parser_labelme(anno_file, class_dict={},
|
|
536
|
+
def parser_labelme(anno_file, class_dict={}, size=()):
|
|
537
537
|
"""
|
|
538
538
|
:param annotation: labelme标注的数据
|
|
539
539
|
:param class_dict: label映射
|
|
540
|
-
:param
|
|
540
|
+
:param size: 图片shape(W,H),可进行坐标点的维度检查,避免越界
|
|
541
541
|
:return:
|
|
542
542
|
"""
|
|
543
543
|
annotation, width, height = LabelMeDataset.load_annotations(anno_file)
|
|
544
|
-
data_info = LabelMeDataset.parser_annotation(annotation, class_dict,
|
|
544
|
+
data_info = LabelMeDataset.parser_annotation(annotation, class_dict, size=size)
|
|
545
545
|
return data_info
|
|
546
546
|
|
|
547
547
|
|
|
@@ -31,6 +31,32 @@ VIDEO_POSTFIX = ['*.mp4', '*.avi', '*.mov', "*.flv", "*.dav"]
|
|
|
31
31
|
AUDIO_POSTFIX = ['*.mp3', '*.wav']
|
|
32
32
|
|
|
33
33
|
|
|
34
|
+
def check_postfix(file, postfix=IMG_POSTFIX):
|
|
35
|
+
"""
|
|
36
|
+
判断文件是否是指定的后缀名
|
|
37
|
+
:param file:
|
|
38
|
+
:param postfix:
|
|
39
|
+
:return:
|
|
40
|
+
"""
|
|
41
|
+
if not isinstance(file, str): return False
|
|
42
|
+
return any(file.endswith(p[1:]) for p in postfix)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def is_image(file):
|
|
46
|
+
"""判断文件是否是图片"""
|
|
47
|
+
return check_postfix(file, postfix=IMG_POSTFIX)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def is_video(file):
|
|
51
|
+
"""判断文件是否是视频"""
|
|
52
|
+
return check_postfix(file, postfix=VIDEO_POSTFIX)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def is_audio(file):
|
|
56
|
+
"""判断文件是否是音频"""
|
|
57
|
+
return check_postfix(file, postfix=AUDIO_POSTFIX)
|
|
58
|
+
|
|
59
|
+
|
|
34
60
|
def str2bool(v):
|
|
35
61
|
if v.lower() in ('yes', 'true', 't', 'y', '1'):
|
|
36
62
|
return True
|
|
@@ -47,7 +73,7 @@ def get_time(format="p"):
|
|
|
47
73
|
"""
|
|
48
74
|
if format.lower() == "s": # 精确到秒
|
|
49
75
|
# time = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
|
|
50
|
-
time = datetime.now().strftime("%Y%m%d%H%M%S")
|
|
76
|
+
time = datetime.now().strftime("%Y%m%d%H%M%S") # 20200508143059
|
|
51
77
|
elif format.lower() == "p": # 精确到微妙
|
|
52
78
|
# time = datetime.strftime(datetime.now(), '%Y%m%d_%H%M%S_%f') # 20200508_143059_379116
|
|
53
79
|
time = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
|
|
@@ -55,6 +81,9 @@ def get_time(format="p"):
|
|
|
55
81
|
elif format.lower() == "y": # 2025-06-18 11:02:05
|
|
56
82
|
# time = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S") #
|
|
57
83
|
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
84
|
+
elif format.lower() == "id": #
|
|
85
|
+
# time = datetime.strftime(datetime.now(), '%Y%m%d_%H%M%S_%f') # 20200508-14-30-59-379116
|
|
86
|
+
time = datetime.now().strftime("%Y%m%d-%H-%M-%S-%f")
|
|
58
87
|
else:
|
|
59
88
|
time = (str(datetime.now())[:-10]).replace(' ', '-').replace(':', '-')
|
|
60
89
|
return time
|
|
@@ -277,15 +306,17 @@ class WriterTXT(object):
|
|
|
277
306
|
self.f.close()
|
|
278
307
|
|
|
279
308
|
|
|
280
|
-
def write_file(file, data, mode='
|
|
281
|
-
"""
|
|
309
|
+
def write_file(file, data, mode='w'):
|
|
310
|
+
"""写数据"""
|
|
282
311
|
with open(file, mode) as f: f.write(data)
|
|
283
312
|
|
|
284
313
|
|
|
285
|
-
def read_file(file, mode='
|
|
286
|
-
"""
|
|
287
|
-
with open(file, mode) as f:
|
|
288
|
-
|
|
314
|
+
def read_file(file, mode='r'):
|
|
315
|
+
"""读取数据"""
|
|
316
|
+
with open(file, mode) as f: data = f.read()
|
|
317
|
+
if mode == 'r':
|
|
318
|
+
data = data.strip().strip('\ufeff').strip('\xef\xbb\xbf')
|
|
319
|
+
return data
|
|
289
320
|
|
|
290
321
|
|
|
291
322
|
def write_data(file, data, split=",", mode='w'):
|
|
@@ -323,13 +354,11 @@ def read_data(filename, split=",", convertNum=True):
|
|
|
323
354
|
with open(filename, mode="r", encoding='utf-8') as f:
|
|
324
355
|
lines = f.readlines()
|
|
325
356
|
lines = [line.strip().strip('\ufeff').strip('\xef\xbb\xbf') for line in lines]
|
|
326
|
-
if split
|
|
327
|
-
return lines
|
|
328
|
-
else:
|
|
357
|
+
if split:
|
|
329
358
|
lines = [line.split(split) for line in lines]
|
|
330
359
|
if convertNum:
|
|
331
360
|
for i, line in enumerate(lines):
|
|
332
|
-
line = [str2number(l) for l in line]
|
|
361
|
+
line = [str2number(l) for l in line] if isinstance(line, list) else str2number(line)
|
|
333
362
|
lines[i] = line
|
|
334
363
|
return lines
|
|
335
364
|
|
|
@@ -337,7 +366,7 @@ def read_data(filename, split=",", convertNum=True):
|
|
|
337
366
|
def str2number(x):
|
|
338
367
|
"""
|
|
339
368
|
:param x:
|
|
340
|
-
:return:
|
|
369
|
+
:return: 数值类型(int, float)或原始字符串
|
|
341
370
|
"""
|
|
342
371
|
# 如果已经是数值类型,直接处理
|
|
343
372
|
if isinstance(x, (int, float)):
|
|
@@ -1534,8 +1563,5 @@ def zip_file(src, dst=None, s=None):
|
|
|
1534
1563
|
if __name__ == '__main__':
|
|
1535
1564
|
from pybaseutils import time_utils
|
|
1536
1565
|
|
|
1537
|
-
path =
|
|
1538
|
-
|
|
1539
|
-
dirname = "/home/PKing"
|
|
1540
|
-
p = get_files_name(path, dirname=None)
|
|
1541
|
-
print(p)
|
|
1566
|
+
path = '/tmp/gradio/b988f43f2c87669461bbb6c831c5b3801017bc02cf6076c57ad1f4d581f76b35/image01.j'
|
|
1567
|
+
print(is_image(path))
|
|
@@ -21,7 +21,7 @@ extensions = {"application/json": "json",
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
def post(url, params=None, headers=None, timeout=
|
|
24
|
+
def post(url, params=None, headers=None, timeout=None, max_retries=1, **kwargs):
|
|
25
25
|
"""
|
|
26
26
|
:param url: 请求URL
|
|
27
27
|
:param params: 请求参数
|
|
@@ -52,7 +52,7 @@ def post(url, params=None, headers=None, timeout=6, max_retries=1, **kwargs):
|
|
|
52
52
|
return result
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def get(url, params=None, headers=None, timeout=
|
|
55
|
+
def get(url, params=None, headers=None, timeout=None, max_retries=1, **kwargs):
|
|
56
56
|
"""
|
|
57
57
|
type = r.headers.get('Content-Type', '').lower() # 数据类型
|
|
58
58
|
:param url: 请求URL
|
|
@@ -1916,7 +1916,8 @@ def image2base64(image: np.ndarray, prefix="", use_rgb=False) -> str:
|
|
|
1916
1916
|
if len(img.shape) == 3 and use_rgb:
|
|
1917
1917
|
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
|
|
1918
1918
|
ext = prefix.split("/")
|
|
1919
|
-
ext = "." + ext[1] if len(ext) == 2 else ".png"
|
|
1919
|
+
# ext = "." + ext[1] if len(ext) == 2 else ".png" # TODO libpng error: bad parameters to zlib
|
|
1920
|
+
ext = "." + ext[1] if len(ext) == 2 else ".jpg"
|
|
1920
1921
|
img = cv2.imencode(ext, img)[1]
|
|
1921
1922
|
bs64 = prefix + base64.b64encode(img).decode()
|
|
1922
1923
|
return bs64
|
|
@@ -1931,21 +1932,26 @@ def base642image(image_bs64, use_rgb=False) -> np.ndarray:
|
|
|
1931
1932
|
"""
|
|
1932
1933
|
image_bs64 = bytes(image_bs64, 'utf-8')
|
|
1933
1934
|
image = base64.b64decode(image_bs64)
|
|
1934
|
-
image = np.
|
|
1935
|
+
image = np.frombuffer(image, np.uint8)
|
|
1935
1936
|
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
|
|
1936
1937
|
if use_rgb:
|
|
1937
1938
|
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
|
|
1938
1939
|
return image
|
|
1939
1940
|
|
|
1940
1941
|
|
|
1941
|
-
def read_image_base64(image_file, size=None):
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1942
|
+
def read_image_base64(image_file: str, size=None):
|
|
1943
|
+
"""
|
|
1944
|
+
读取图片并转换为base64编码
|
|
1945
|
+
:param image_file: 图片文件路径
|
|
1946
|
+
:param size: 图片大小, (width,height)
|
|
1947
|
+
:return: base64编码字符串
|
|
1948
|
+
"""
|
|
1949
|
+
if size:
|
|
1950
|
+
bgr = read_image(image_file, size=size, use_rgb=False)
|
|
1951
|
+
image_base64 = image2base64(bgr)
|
|
1946
1952
|
else:
|
|
1947
|
-
|
|
1948
|
-
|
|
1953
|
+
with open(image_file, 'rb') as f:
|
|
1954
|
+
image_base64 = base64.b64encode(f.read()).decode('utf-8')
|
|
1949
1955
|
return image_base64
|
|
1950
1956
|
|
|
1951
1957
|
|
|
@@ -2871,7 +2877,7 @@ def fig2data(fig):
|
|
|
2871
2877
|
|
|
2872
2878
|
# Get the RGBA buffer from the figure
|
|
2873
2879
|
w, h = fig.canvas.get_width_height()
|
|
2874
|
-
buf = np.
|
|
2880
|
+
buf = np.frombuffer(fig.canvas.tostring_argb(), dtype=np.uint8)
|
|
2875
2881
|
buf.shape = (w, h, 4)
|
|
2876
2882
|
|
|
2877
2883
|
# canvas.tostring_argb give pixmap in ARGB mode. Roll the ALPHA channel to have it in RGBA mode
|
|
@@ -3132,7 +3138,7 @@ def get_video_info(video_cap: cv2.VideoCapture, vis=True):
|
|
|
3132
3138
|
:param video_cap:视频对象 或者视频文件路径
|
|
3133
3139
|
:return:
|
|
3134
3140
|
"""
|
|
3135
|
-
isfile = isinstance(video_cap, str)
|
|
3141
|
+
isfile = isinstance(video_cap, str) or isinstance(video_cap, int)
|
|
3136
3142
|
if isfile: video_cap = get_video_capture(video_cap)
|
|
3137
3143
|
width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
|
3138
3144
|
height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
|
@@ -13,6 +13,25 @@ import numpy as np
|
|
|
13
13
|
from typing import Dict, List
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
def get_time(format="p"):
|
|
17
|
+
"""
|
|
18
|
+
:param format:
|
|
19
|
+
:return:
|
|
20
|
+
"""
|
|
21
|
+
if format.lower() == "s": # 精确到秒
|
|
22
|
+
# time = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
|
|
23
|
+
time = datetime.now().strftime("%Y%m%d%H%M%S")
|
|
24
|
+
elif format.lower() == "p": # 精确到微妙
|
|
25
|
+
# time = datetime.strftime(datetime.now(), '%Y%m%d_%H%M%S_%f') # 20200508_143059_379116
|
|
26
|
+
time = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
|
|
27
|
+
time = time[:-2]
|
|
28
|
+
elif format.lower() == "y": # 2025-06-18 11:02:05
|
|
29
|
+
# time = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S") #
|
|
30
|
+
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
31
|
+
else:
|
|
32
|
+
time = (str(datetime.now())[:-10]).replace(' ', '-').replace(':', '-')
|
|
33
|
+
return time
|
|
34
|
+
|
|
16
35
|
def date2stamp(date, format='%Y-%m-%d %H:%M:%S') -> float:
|
|
17
36
|
"""
|
|
18
37
|
将日期格式转换为时间戳
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pybaseutils
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: pybaseutils
|
|
5
5
|
Home-page: https://github.com/PanJinquan/base-utils
|
|
6
6
|
Author: PanJinquan
|
|
7
7
|
Author-email: 390737991@qq.com
|
|
8
8
|
License: MIT
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
License-File: LICENCE
|
|
10
|
+
Dynamic: author
|
|
11
|
+
Dynamic: author-email
|
|
12
|
+
Dynamic: description
|
|
13
|
+
Dynamic: home-page
|
|
14
|
+
Dynamic: license
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
Dynamic: summary
|
|
11
17
|
|
|
12
18
|
base-utils
|
|
13
19
|
==========
|
|
@@ -37,7 +43,7 @@ pybaseutils是个人开发常用的python库,集成了python等常用的算法
|
|
|
37
43
|
- 安装方法2:pip install –upgrade -i https://pypi.org/simple
|
|
38
44
|
pybaseutils (从pypi源下载最新版本)
|
|
39
45
|
- 设置默认的镜像源:pip config set global.index-url
|
|
40
|
-
https://pypi.tuna.tsinghua.edu.cn/simple
|
|
46
|
+
https://pypi.tuna.tsinghua.edu.cn/simple
|
|
41
47
|
- 超时异常:pip –default-timeout=1000000000
|
|
42
48
|
|
|
43
49
|
一些问题修复说明
|
|
@@ -142,5 +148,3 @@ base_utils(C++)
|
|
|
142
148
|
DEBUG_IMSHOW("image", image);
|
|
143
149
|
return 0;
|
|
144
150
|
}
|
|
145
|
-
|
|
146
|
-
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
# --------------------------------------------------------
|
|
4
|
+
# @Author : Pan
|
|
5
|
+
# @E-mail :
|
|
6
|
+
# @Date : 2025-07-08 14:10:15
|
|
7
|
+
# @Brief : 转换labelme标注数据为voc格式
|
|
8
|
+
# --------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
import os
|
|
11
|
+
import numpy as np
|
|
12
|
+
import cv2
|
|
13
|
+
from pybaseutils.converter import convert_labelme2voc
|
|
14
|
+
from pybaseutils import time_utils, image_utils, file_utils
|
|
15
|
+
|
|
16
|
+
if __name__ == "__main__":
|
|
17
|
+
image_dir = "/home/PKing/Downloads/image/摄像头ID.txt"
|
|
18
|
+
lines = file_utils.read_file(image_dir)
|
|
19
|
+
print(lines)
|
|
@@ -37,16 +37,16 @@ if __name__ == "__main__":
|
|
|
37
37
|
names = None
|
|
38
38
|
# names = ['person,身穿工作服,未穿工作服']
|
|
39
39
|
# names = ['身穿工作服,未穿工作服', '手,手穿绝缘手套,手穿棉纱手套,手穿其他手套']
|
|
40
|
-
anno_dir = ["/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/
|
|
40
|
+
anno_dir = ["/home/PKing/nasdata/dataset-dmai/AIJE/dataset/aije-v2-det/23-更换绝缘子/dataset-v14-special/images"]
|
|
41
41
|
|
|
42
|
-
anno_dir = ["/media/PKing/新加卷/project/smart-dinner/dataset/smart-dinner-01/images"]
|
|
43
|
-
names = [ '人体', '转盘' ]
|
|
42
|
+
# anno_dir = ["/media/PKing/新加卷/project/smart-dinner/dataset/smart-dinner-01/images"]
|
|
43
|
+
# names = [ '人体', '转盘' ]
|
|
44
44
|
dataset = parser_labelme.LabelMeDatasets(filename=None,
|
|
45
45
|
data_root=None,
|
|
46
46
|
anno_dir=anno_dir,
|
|
47
47
|
image_dir=None,
|
|
48
48
|
class_name=names,
|
|
49
|
-
check=
|
|
49
|
+
check=True ,
|
|
50
50
|
phase="val",
|
|
51
51
|
shuffle=False)
|
|
52
52
|
class_name = dataset.class_name
|