ultralytics 8.3.86__tar.gz → 8.3.88__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.
- {ultralytics-8.3.86/ultralytics.egg-info → ultralytics-8.3.88}/PKG-INFO +8 -8
- {ultralytics-8.3.86 → ultralytics-8.3.88}/README.md +6 -6
- {ultralytics-8.3.86 → ultralytics-8.3.88}/pyproject.toml +1 -1
- ultralytics-8.3.88/tests/test_solutions.py +102 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/__init__.py +58 -55
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +1 -1
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-cls.yaml +6 -6
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/augment.py +2 -2
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/loaders.py +1 -1
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/exporter.py +1 -1
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/results.py +76 -41
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/trainer.py +11 -5
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/tuner.py +3 -2
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/autobackend.py +1 -1
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/tasks.py +1 -1
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/__init__.py +14 -6
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/ai_gym.py +39 -28
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/analytics.py +22 -18
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/distance_calculation.py +25 -25
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/heatmap.py +40 -38
- ultralytics-8.3.88/ultralytics/solutions/instance_segmentation.py +69 -0
- ultralytics-8.3.88/ultralytics/solutions/object_blurrer.py +89 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/object_counter.py +35 -33
- ultralytics-8.3.88/ultralytics/solutions/object_cropper.py +84 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/parking_management.py +40 -13
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/queue_management.py +20 -39
- ultralytics-8.3.88/ultralytics/solutions/region_counter.py +119 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/security_alarm.py +40 -30
- ultralytics-8.3.88/ultralytics/solutions/solutions.py +756 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/speed_estimation.py +34 -31
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/streamlit_inference.py +34 -28
- ultralytics-8.3.88/ultralytics/solutions/trackzone.py +79 -0
- ultralytics-8.3.88/ultralytics/solutions/vision_eye.py +69 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/kalman_filter.py +23 -23
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/__init__.py +2 -3
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/comet.py +37 -5
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/instance.py +3 -3
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/plotting.py +0 -414
- {ultralytics-8.3.86 → ultralytics-8.3.88/ultralytics.egg-info}/PKG-INFO +8 -8
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/SOURCES.txt +4 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/requires.txt +1 -1
- ultralytics-8.3.86/tests/test_solutions.py +0 -94
- ultralytics-8.3.86/ultralytics/solutions/region_counter.py +0 -116
- ultralytics-8.3.86/ultralytics/solutions/solutions.py +0 -178
- ultralytics-8.3.86/ultralytics/solutions/trackzone.py +0 -68
- {ultralytics-8.3.86 → ultralytics-8.3.88}/LICENSE +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/setup.cfg +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/conftest.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_cli.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_engine.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_exports.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_python.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.88
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -63,7 +63,7 @@ Provides-Extra: export
|
|
63
63
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
64
64
|
Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
65
65
|
Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
66
|
-
Requires-Dist: openvino
|
66
|
+
Requires-Dist: openvino!=2025.0.0,>=2024.0.0; extra == "export"
|
67
67
|
Requires-Dist: tensorflow>=2.0.0; extra == "export"
|
68
68
|
Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
|
69
69
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
@@ -248,13 +248,13 @@ See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage e
|
|
248
248
|
|
249
249
|
See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usage examples with these models trained on [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/), which include 1000 pretrained classes.
|
250
250
|
|
251
|
-
| Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at
|
251
|
+
| Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 224 |
|
252
252
|
| -------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | ------------------------------ | ----------------------------------- | ------------------ | ------------------------ |
|
253
|
-
| [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 |
|
254
|
-
| [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 |
|
255
|
-
| [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 |
|
256
|
-
| [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 |
|
257
|
-
| [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 |
|
253
|
+
| [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 0.5 |
|
254
|
+
| [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 1.6 |
|
255
|
+
| [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 5.0 |
|
256
|
+
| [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 6.2 |
|
257
|
+
| [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 13.7 |
|
258
258
|
|
259
259
|
- **acc** values are model accuracies on the [ImageNet](https://www.image-net.org/) dataset validation set. <br>Reproduce by `yolo val classify data=path/to/ImageNet device=0`
|
260
260
|
- **Speed** averaged over ImageNet val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. <br>Reproduce by `yolo val classify data=path/to/ImageNet batch=1 device=0|cpu`
|
@@ -163,13 +163,13 @@ See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage e
|
|
163
163
|
|
164
164
|
See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usage examples with these models trained on [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/), which include 1000 pretrained classes.
|
165
165
|
|
166
|
-
| Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at
|
166
|
+
| Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 224 |
|
167
167
|
| -------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | ------------------------------ | ----------------------------------- | ------------------ | ------------------------ |
|
168
|
-
| [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 |
|
169
|
-
| [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 |
|
170
|
-
| [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 |
|
171
|
-
| [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 |
|
172
|
-
| [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 |
|
168
|
+
| [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 0.5 |
|
169
|
+
| [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 1.6 |
|
170
|
+
| [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 5.0 |
|
171
|
+
| [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 6.2 |
|
172
|
+
| [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 13.7 |
|
173
173
|
|
174
174
|
- **acc** values are model accuracies on the [ImageNet](https://www.image-net.org/) dataset validation set. <br>Reproduce by `yolo val classify data=path/to/ImageNet device=0`
|
175
175
|
- **Speed** averaged over ImageNet val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. <br>Reproduce by `yolo val classify data=path/to/ImageNet batch=1 device=0|cpu`
|
@@ -97,7 +97,7 @@ export = [
|
|
97
97
|
"onnx>=1.12.0", # ONNX export
|
98
98
|
"coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux
|
99
99
|
"scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.11'", # CoreML k-means quantization
|
100
|
-
"openvino>=2024.0.0
|
100
|
+
"openvino>=2024.0.0,!=2025.0.0", # OpenVINO export
|
101
101
|
"tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
|
102
102
|
"tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
|
103
103
|
"tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
# This is file for Ultralytics Solutions tests: https://docs.ultralytics.com/solutions/,
|
3
|
+
# It includes every solution excluding DistanceCalculation and Security Alarm System.
|
4
|
+
|
5
|
+
import cv2
|
6
|
+
import pytest
|
7
|
+
|
8
|
+
from tests import TMP
|
9
|
+
from ultralytics import solutions
|
10
|
+
from ultralytics.utils import ASSETS_URL
|
11
|
+
from ultralytics.utils.downloads import safe_download
|
12
|
+
|
13
|
+
DEMO_VIDEO = "solutions_ci_demo.mp4" # for all the solutions, except workout and parking
|
14
|
+
POSE_VIDEO = "solution_ci_pose_demo.mp4" # only for workouts monitoring solution
|
15
|
+
PARKING_VIDEO = "solution_ci_parking_demo.mp4" # only for parking management solution
|
16
|
+
PARKING_AREAS_JSON = "solution_ci_parking_areas.json" # only for parking management solution
|
17
|
+
PARKING_MODEL = "solutions_ci_parking_model.pt" # only for parking management solution
|
18
|
+
|
19
|
+
|
20
|
+
@pytest.mark.slow
|
21
|
+
def test_major_solutions():
|
22
|
+
"""Test the object counting, heatmap, speed estimation, trackzone and queue management solution."""
|
23
|
+
safe_download(url=f"{ASSETS_URL}/{DEMO_VIDEO}", dir=TMP)
|
24
|
+
cap = cv2.VideoCapture(str(TMP / DEMO_VIDEO))
|
25
|
+
assert cap.isOpened(), "Error reading video file"
|
26
|
+
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
|
27
|
+
counter = solutions.ObjectCounter(region=region_points, model="yolo11n.pt", show=False) # Test object counter
|
28
|
+
heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False) # Test heatmaps
|
29
|
+
heatmapcounter = solutions.Heatmap(
|
30
|
+
colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False, region=region_points
|
31
|
+
) # Test heatmaps with object counting
|
32
|
+
speed = solutions.SpeedEstimator(region=region_points, model="yolo11n.pt", show=False) # Test queue manager
|
33
|
+
queue = solutions.QueueManager(region=region_points, model="yolo11n.pt", show=False) # Test speed estimation
|
34
|
+
lineanalytics = solutions.Analytics(analytics_type="line", model="yolo11n.pt", show=False) # line analytics
|
35
|
+
pieanalytics = solutions.Analytics(analytics_type="pie", model="yolo11n.pt", show=False) # line analytics
|
36
|
+
baranalytics = solutions.Analytics(analytics_type="bar", model="yolo11n.pt", show=False) # line analytics
|
37
|
+
areaanalytics = solutions.Analytics(analytics_type="area", model="yolo11n.pt", show=False) # line analytics
|
38
|
+
trackzone = solutions.TrackZone(region=region_points, model="yolo11n.pt", show=False) # trackzone
|
39
|
+
objectcropper = solutions.ObjectCropper(
|
40
|
+
model="yolo11n.pt", show=False, crop_dir=str(TMP / "cropped-detections")
|
41
|
+
) # object cropping
|
42
|
+
objectblurrer = solutions.ObjectBlurrer(blur_ratio=0.5, model="yolo11n.pt", show=False) # Object blurring
|
43
|
+
isegment = solutions.InstanceSegmentation(model="yolo11n-seg.pt", show=False) # Instance segmentation
|
44
|
+
visioneye = solutions.VisionEye(model="yolo11n.pt", show=False) # Visioneye
|
45
|
+
regioncounter = solutions.RegionCounter(region=region_points, model="yolo11n.pt", show=False) # Region counter
|
46
|
+
frame_count = 0 # Required for analytics
|
47
|
+
while cap.isOpened():
|
48
|
+
success, im0 = cap.read()
|
49
|
+
if not success:
|
50
|
+
break
|
51
|
+
frame_count += 1
|
52
|
+
original_im0 = im0.copy()
|
53
|
+
_ = counter(original_im0.copy())
|
54
|
+
_ = heatmap(original_im0.copy())
|
55
|
+
_ = heatmapcounter(original_im0.copy())
|
56
|
+
_ = speed(original_im0.copy())
|
57
|
+
_ = queue(original_im0.copy())
|
58
|
+
_ = lineanalytics(original_im0.copy(), frame_count)
|
59
|
+
_ = pieanalytics(original_im0.copy(), frame_count)
|
60
|
+
_ = baranalytics(original_im0.copy(), frame_count)
|
61
|
+
_ = areaanalytics(original_im0.copy(), frame_count)
|
62
|
+
_ = trackzone(original_im0.copy())
|
63
|
+
_ = objectcropper(original_im0.copy())
|
64
|
+
_ = isegment(original_im0.copy())
|
65
|
+
_ = objectblurrer(original_im0.copy())
|
66
|
+
_ = visioneye(original_im0.copy())
|
67
|
+
_ = regioncounter(original_im0.copy())
|
68
|
+
cap.release()
|
69
|
+
|
70
|
+
# Test workouts monitoring
|
71
|
+
safe_download(url=f"{ASSETS_URL}/{POSE_VIDEO}", dir=TMP)
|
72
|
+
cap = cv2.VideoCapture(str(TMP / POSE_VIDEO))
|
73
|
+
assert cap.isOpened(), "Error reading video file"
|
74
|
+
gym = solutions.AIGym(kpts=[5, 11, 13], show=False)
|
75
|
+
while cap.isOpened():
|
76
|
+
success, im0 = cap.read()
|
77
|
+
if not success:
|
78
|
+
break
|
79
|
+
_ = gym(im0)
|
80
|
+
cap.release()
|
81
|
+
|
82
|
+
# Test parking management
|
83
|
+
safe_download(url=f"{ASSETS_URL}/{PARKING_VIDEO}", dir=TMP)
|
84
|
+
safe_download(url=f"{ASSETS_URL}/{PARKING_AREAS_JSON}", dir=TMP)
|
85
|
+
safe_download(url=f"{ASSETS_URL}/{PARKING_MODEL}", dir=TMP)
|
86
|
+
cap = cv2.VideoCapture(str(TMP / PARKING_VIDEO))
|
87
|
+
assert cap.isOpened(), "Error reading video file"
|
88
|
+
parkingmanager = solutions.ParkingManagement(
|
89
|
+
json_file=str(TMP / PARKING_AREAS_JSON), model=str(TMP / PARKING_MODEL), show=False
|
90
|
+
)
|
91
|
+
while cap.isOpened():
|
92
|
+
success, im0 = cap.read()
|
93
|
+
if not success:
|
94
|
+
break
|
95
|
+
_ = parkingmanager(im0)
|
96
|
+
cap.release()
|
97
|
+
|
98
|
+
|
99
|
+
@pytest.mark.slow
|
100
|
+
def test_streamlit_predict():
|
101
|
+
"""Test streamlit predict live inference solution."""
|
102
|
+
solutions.Inference().inference()
|
@@ -5,7 +5,7 @@ import subprocess
|
|
5
5
|
import sys
|
6
6
|
from pathlib import Path
|
7
7
|
from types import SimpleNamespace
|
8
|
-
from typing import Dict, List, Union
|
8
|
+
from typing import Any, Dict, List, Union
|
9
9
|
|
10
10
|
import cv2
|
11
11
|
|
@@ -35,14 +35,18 @@ from ultralytics.utils import (
|
|
35
35
|
|
36
36
|
# Define valid solutions
|
37
37
|
SOLUTION_MAP = {
|
38
|
-
"count":
|
39
|
-
"
|
40
|
-
"
|
41
|
-
"
|
42
|
-
"
|
43
|
-
"
|
44
|
-
"
|
45
|
-
"
|
38
|
+
"count": "ObjectCounter",
|
39
|
+
"crop": "ObjectCropper",
|
40
|
+
"blur": "ObjectBlurrer",
|
41
|
+
"workout": "AIGym",
|
42
|
+
"heatmap": "Heatmap",
|
43
|
+
"isegment": "InstanceSegmentation",
|
44
|
+
"visioneye": "VisionEye",
|
45
|
+
"speed": "SpeedEstimator",
|
46
|
+
"queue": "QueueManager",
|
47
|
+
"analytics": "Analytics",
|
48
|
+
"inference": "Inference",
|
49
|
+
"trackzone": "TrackZone",
|
46
50
|
"help": None,
|
47
51
|
}
|
48
52
|
|
@@ -238,7 +242,7 @@ CFG_BOOL_KEYS = frozenset(
|
|
238
242
|
)
|
239
243
|
|
240
244
|
|
241
|
-
def cfg2dict(cfg):
|
245
|
+
def cfg2dict(cfg: Union[str, Path, Dict, SimpleNamespace]) -> Dict:
|
242
246
|
"""
|
243
247
|
Converts a configuration object to a dictionary.
|
244
248
|
|
@@ -273,7 +277,7 @@ def cfg2dict(cfg):
|
|
273
277
|
return cfg
|
274
278
|
|
275
279
|
|
276
|
-
def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, overrides: Dict = None):
|
280
|
+
def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, overrides: Dict = None) -> SimpleNamespace:
|
277
281
|
"""
|
278
282
|
Load and merge configuration data from a file or dictionary, with optional overrides.
|
279
283
|
|
@@ -321,7 +325,7 @@ def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, ove
|
|
321
325
|
return IterableSimpleNamespace(**cfg)
|
322
326
|
|
323
327
|
|
324
|
-
def check_cfg(cfg, hard=True):
|
328
|
+
def check_cfg(cfg: Dict, hard: bool = True) -> None:
|
325
329
|
"""
|
326
330
|
Checks configuration argument types and values for the Ultralytics library.
|
327
331
|
|
@@ -383,7 +387,7 @@ def check_cfg(cfg, hard=True):
|
|
383
387
|
cfg[k] = bool(v)
|
384
388
|
|
385
389
|
|
386
|
-
def get_save_dir(args, name=None):
|
390
|
+
def get_save_dir(args: SimpleNamespace, name: str = None) -> Path:
|
387
391
|
"""
|
388
392
|
Returns the directory path for saving outputs, derived from arguments or default settings.
|
389
393
|
|
@@ -415,7 +419,7 @@ def get_save_dir(args, name=None):
|
|
415
419
|
return Path(save_dir)
|
416
420
|
|
417
421
|
|
418
|
-
def _handle_deprecation(custom):
|
422
|
+
def _handle_deprecation(custom: Dict) -> Dict:
|
419
423
|
"""
|
420
424
|
Handles deprecated configuration keys by mapping them to current equivalents with deprecation warnings.
|
421
425
|
|
@@ -453,7 +457,7 @@ def _handle_deprecation(custom):
|
|
453
457
|
return custom
|
454
458
|
|
455
459
|
|
456
|
-
def check_dict_alignment(base: Dict, custom: Dict, e=None):
|
460
|
+
def check_dict_alignment(base: Dict, custom: Dict, e: Exception = None) -> None:
|
457
461
|
"""
|
458
462
|
Checks alignment between custom and base configuration dictionaries, handling deprecated keys and providing error
|
459
463
|
messages for mismatched keys.
|
@@ -507,7 +511,7 @@ def merge_equals_args(args: List[str]) -> List[str]:
|
|
507
511
|
args (List[str]): A list of strings where each element represents an argument or fragment.
|
508
512
|
|
509
513
|
Returns:
|
510
|
-
List[str]: A list of strings where the arguments around isolated '=' are merged and fragments with brackets are joined.
|
514
|
+
(List[str]): A list of strings where the arguments around isolated '=' are merged and fragments with brackets are joined.
|
511
515
|
|
512
516
|
Examples:
|
513
517
|
>>> args = ["arg1", "=", "value", "arg2=", "value2", "arg3", "=value3", "imgsz=[3,", "640,", "640]"]
|
@@ -634,9 +638,6 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
634
638
|
solutions: https://docs.ultralytics.com/solutions/, It can include solution name, source,
|
635
639
|
and other configuration parameters.
|
636
640
|
|
637
|
-
Returns:
|
638
|
-
None: The function processes video frames and saves the output but doesn't return any value.
|
639
|
-
|
640
641
|
Examples:
|
641
642
|
Run people counting solution with default settings:
|
642
643
|
>>> handle_yolo_solutions(["count"])
|
@@ -656,14 +657,17 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
656
657
|
- For 'analytics' solution, frame numbers are tracked for generating analytical graphs
|
657
658
|
- Video processing can be interrupted by pressing 'q'
|
658
659
|
- Processes video frames sequentially and saves output in .avi format
|
659
|
-
- If no source is specified, downloads and uses a default sample video
|
660
|
+
- If no source is specified, downloads and uses a default sample video
|
660
661
|
- The inference solution will be launched using the 'streamlit run' command.
|
661
662
|
- The Streamlit app file is located in the Ultralytics package directory.
|
662
663
|
"""
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
664
|
+
full_args_dict = {
|
665
|
+
**DEFAULT_SOL_DICT,
|
666
|
+
**DEFAULT_CFG_DICT,
|
667
|
+
"blur_ratio": 0.5,
|
668
|
+
"vision_point": (20, 20),
|
669
|
+
"crop_dir": "cropped-detections",
|
670
|
+
} # arguments dictionary
|
667
671
|
overrides = {}
|
668
672
|
|
669
673
|
# check dictionary alignment
|
@@ -680,21 +684,19 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
680
684
|
check_dict_alignment(full_args_dict, overrides) # dict alignment
|
681
685
|
|
682
686
|
# Get solution name
|
683
|
-
if args
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
687
|
+
if args[0] == "help":
|
688
|
+
LOGGER.info(SOLUTIONS_HELP_MSG)
|
689
|
+
return # Early return for 'help' case
|
690
|
+
elif args[0] in SOLUTION_MAP:
|
691
|
+
solution_name = args.pop(0) # Extract the solution name directly
|
688
692
|
else:
|
689
693
|
LOGGER.warning(
|
690
|
-
f"
|
694
|
+
f"❌ '{args[0]}' is not a valid solution. 💡 Defaulting to 'count'.\n"
|
695
|
+
f"🚀 Available solutions: {', '.join(list(SOLUTION_MAP.keys())[:-1])}\n"
|
691
696
|
)
|
692
|
-
|
693
|
-
|
694
|
-
if args and args[0] == "help": # Add check for return if user call `yolo solutions help`
|
695
|
-
return
|
697
|
+
solution_name = "count" # Default for invalid solution
|
696
698
|
|
697
|
-
if
|
699
|
+
if solution_name == "inference":
|
698
700
|
checks.check_requirements("streamlit>=1.29.0")
|
699
701
|
LOGGER.info("💡 Loading Ultralytics live inference app...")
|
700
702
|
subprocess.run(
|
@@ -708,22 +710,21 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
708
710
|
]
|
709
711
|
)
|
710
712
|
else:
|
711
|
-
|
712
|
-
solution = getattr(solutions, cls)(IS_CLI=True, **overrides) # get solution class i.e ObjectCounter
|
713
|
-
process = getattr(
|
714
|
-
solution, method
|
715
|
-
) # get specific function of class for processing i.e, count from ObjectCounter
|
716
|
-
|
717
|
-
cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
|
713
|
+
from ultralytics import solutions
|
718
714
|
|
719
|
-
|
715
|
+
solution = getattr(solutions, SOLUTION_MAP[solution_name])(is_cli=True, **overrides) # class i.e ObjectCounter
|
720
716
|
|
721
|
-
|
722
|
-
if
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
717
|
+
cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
|
718
|
+
if solution_name != "crop":
|
719
|
+
# extract width, height and fps of the video file, create save directory and initialize video writer
|
720
|
+
w, h, fps = (
|
721
|
+
int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)
|
722
|
+
)
|
723
|
+
if solution_name == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
|
724
|
+
w, h = 1280, 720
|
725
|
+
save_dir = get_save_dir(SimpleNamespace(project="runs/solutions", name="exp", exist_ok=False))
|
726
|
+
save_dir.mkdir(parents=True) # create the output directory i.e. runs/solutions/exp
|
727
|
+
vw = cv2.VideoWriter(str(save_dir / f"{solution_name}.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
|
727
728
|
|
728
729
|
try: # Process video frames
|
729
730
|
f_n = 0 # frame number, required for analytical graphs
|
@@ -731,15 +732,17 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
731
732
|
success, frame = cap.read()
|
732
733
|
if not success:
|
733
734
|
break
|
734
|
-
|
735
|
-
|
735
|
+
results = solution(frame, f_n := f_n + 1) if solution_name == "analytics" else solution(frame)
|
736
|
+
LOGGER.info(f"🚀 Results: {results}")
|
737
|
+
if solution_name != "crop":
|
738
|
+
vw.write(results.plot_im)
|
736
739
|
if cv2.waitKey(1) & 0xFF == ord("q"):
|
737
740
|
break
|
738
741
|
finally:
|
739
742
|
cap.release()
|
740
743
|
|
741
744
|
|
742
|
-
def parse_key_value_pair(pair: str = "key=value"):
|
745
|
+
def parse_key_value_pair(pair: str = "key=value") -> tuple:
|
743
746
|
"""
|
744
747
|
Parses a key-value pair string into separate key and value components.
|
745
748
|
|
@@ -773,7 +776,7 @@ def parse_key_value_pair(pair: str = "key=value"):
|
|
773
776
|
return k, smart_value(v)
|
774
777
|
|
775
778
|
|
776
|
-
def smart_value(v):
|
779
|
+
def smart_value(v: str) -> Any:
|
777
780
|
"""
|
778
781
|
Converts a string representation of a value to its appropriate Python type.
|
779
782
|
|
@@ -818,7 +821,7 @@ def smart_value(v):
|
|
818
821
|
return v
|
819
822
|
|
820
823
|
|
821
|
-
def entrypoint(debug=""):
|
824
|
+
def entrypoint(debug: str = "") -> None:
|
822
825
|
"""
|
823
826
|
Ultralytics entrypoint function for parsing and executing command-line arguments.
|
824
827
|
|
@@ -990,7 +993,7 @@ def entrypoint(debug=""):
|
|
990
993
|
|
991
994
|
|
992
995
|
# Special modes --------------------------------------------------------------------------------------------------------
|
993
|
-
def copy_default_cfg():
|
996
|
+
def copy_default_cfg() -> None:
|
994
997
|
"""
|
995
998
|
Copies the default configuration file and creates a new one with '_copy' appended to its name.
|
996
999
|
|
@@ -5,14 +5,14 @@
|
|
5
5
|
# Task docs: https://docs.ultralytics.com/tasks/classify
|
6
6
|
|
7
7
|
# Parameters
|
8
|
-
nc:
|
8
|
+
nc: 1000 # number of classes
|
9
9
|
scales: # model compound scaling constants, i.e. 'model=yolo11n-cls.yaml' will call yolo11-cls.yaml with scale 'n'
|
10
10
|
# [depth, width, max_channels]
|
11
|
-
n: [0.50, 0.25, 1024] # summary: 151 layers, 1633584 parameters, 1633584 gradients,
|
12
|
-
s: [0.50, 0.50, 1024] # summary: 151 layers, 5545488 parameters, 5545488 gradients,
|
13
|
-
m: [0.50, 1.00, 512] # summary: 187 layers, 10455696 parameters, 10455696 gradients,
|
14
|
-
l: [1.00, 1.00, 512] # summary: 309 layers, 12937104 parameters, 12937104 gradients,
|
15
|
-
x: [1.00, 1.50, 512] # summary: 309 layers, 28458544 parameters, 28458544 gradients,
|
11
|
+
n: [0.50, 0.25, 1024] # summary: 151 layers, 1633584 parameters, 1633584 gradients, 0.5 GFLOPs
|
12
|
+
s: [0.50, 0.50, 1024] # summary: 151 layers, 5545488 parameters, 5545488 gradients, 1.6 GFLOPs
|
13
|
+
m: [0.50, 1.00, 512] # summary: 187 layers, 10455696 parameters, 10455696 gradients, 5.0 GFLOPs
|
14
|
+
l: [1.00, 1.00, 512] # summary: 309 layers, 12937104 parameters, 12937104 gradients, 6.2 GFLOPs
|
15
|
+
x: [1.00, 1.50, 512] # summary: 309 layers, 28458544 parameters, 28458544 gradients, 13.7 GFLOPs
|
16
16
|
|
17
17
|
# YOLO11n backbone
|
18
18
|
backbone:
|
@@ -1193,8 +1193,8 @@ class RandomPerspective:
|
|
1193
1193
|
Args:
|
1194
1194
|
labels (Dict): A dictionary containing image data and annotations.
|
1195
1195
|
Must include:
|
1196
|
-
'img' (ndarray): The input image.
|
1197
|
-
'cls' (ndarray): Class labels.
|
1196
|
+
'img' (np.ndarray): The input image.
|
1197
|
+
'cls' (np.ndarray): Class labels.
|
1198
1198
|
'instances' (Instances): Object instances with bounding boxes, segments, and keypoints.
|
1199
1199
|
May include:
|
1200
1200
|
'mosaic_border' (Tuple[int, int]): Border size for mosaic augmentation.
|
@@ -106,7 +106,7 @@ class LoadStreams:
|
|
106
106
|
self.caps = [None] * n # video capture objects
|
107
107
|
self.imgs = [[] for _ in range(n)] # images
|
108
108
|
self.shape = [[] for _ in range(n)] # image shapes
|
109
|
-
self.sources = [ops.clean_str(x) for x in sources] # clean source names for later
|
109
|
+
self.sources = [ops.clean_str(x).replace(os.sep, "_") for x in sources] # clean source names for later
|
110
110
|
for i, s in enumerate(sources): # index, source
|
111
111
|
# Start thread to read frames from video stream
|
112
112
|
st = f"{i + 1}/{n}: {s}... "
|
@@ -590,7 +590,7 @@ class Exporter:
|
|
590
590
|
@try_export
|
591
591
|
def export_openvino(self, prefix=colorstr("OpenVINO:")):
|
592
592
|
"""YOLO OpenVINO export."""
|
593
|
-
check_requirements("openvino>=2024.0.0
|
593
|
+
check_requirements("openvino>=2024.0.0,!=2025.0.0")
|
594
594
|
import openvino as ov
|
595
595
|
|
596
596
|
LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")
|