ultralytics 8.3.121__tar.gz → 8.3.122__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.121/ultralytics.egg-info → ultralytics-8.3.122}/PKG-INFO +3 -3
- {ultralytics-8.3.121 → ultralytics-8.3.122}/pyproject.toml +2 -2
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/__init__.py +1 -1
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/trackers/botsort.yaml +1 -1
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/split_dota.py +1 -1
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/exporter.py +3 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/solutions.py +1 -1
- ultralytics-8.3.122/ultralytics/solutions/speed_estimation.py +110 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/bot_sort.py +2 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122/ultralytics.egg-info}/PKG-INFO +3 -3
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics.egg-info/requires.txt +2 -2
- ultralytics-8.3.121/ultralytics/solutions/speed_estimation.py +0 -114
- {ultralytics-8.3.121 → ultralytics-8.3.122}/LICENSE +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/README.md +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/setup.cfg +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/conftest.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_cli.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_engine.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_exports.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_python.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/nn/text_model.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/export.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.122
|
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>
|
@@ -68,8 +68,8 @@ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
|
|
68
68
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
69
69
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
70
70
|
Provides-Extra: solutions
|
71
|
-
Requires-Dist: shapely
|
72
|
-
Requires-Dist: streamlit
|
71
|
+
Requires-Dist: shapely>=2.0.0; extra == "solutions"
|
72
|
+
Requires-Dist: streamlit>=1.29.0; extra == "solutions"
|
73
73
|
Provides-Extra: logging
|
74
74
|
Requires-Dist: wandb; extra == "logging"
|
75
75
|
Requires-Dist: tensorboard; extra == "logging"
|
@@ -103,8 +103,8 @@ export = [
|
|
103
103
|
"h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
|
104
104
|
]
|
105
105
|
solutions = [
|
106
|
-
"shapely>=2.0.0
|
107
|
-
"streamlit>=1.29.0
|
106
|
+
"shapely>=2.0.0", # shapely for point and polygon data matching
|
107
|
+
"streamlit>=1.29.0", # for live inference on web browser, i.e `yolo streamlit-predict`
|
108
108
|
]
|
109
109
|
logging = [
|
110
110
|
"wandb", # https://docs.ultralytics.com/integrations/weights-biases/
|
@@ -701,7 +701,7 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
701
701
|
solution_name = "count" # Default for invalid solution
|
702
702
|
|
703
703
|
if solution_name == "inference":
|
704
|
-
checks.check_requirements("streamlit>=1.29.0
|
704
|
+
checks.check_requirements("streamlit>=1.29.0")
|
705
705
|
LOGGER.info("💡 Loading Ultralytics live inference app...")
|
706
706
|
subprocess.run(
|
707
707
|
[ # Run subprocess with Streamlit custom argument
|
@@ -17,6 +17,6 @@ fuse_score: True # Whether to fuse confidence scores with the iou distances befo
|
|
17
17
|
gmc_method: sparseOptFlow # method of global motion compensation
|
18
18
|
# ReID model related thresh
|
19
19
|
proximity_thresh: 0.5 # minimum IoU for valid match with ReID
|
20
|
-
appearance_thresh: 0.
|
20
|
+
appearance_thresh: 0.8 # minimum appearance similarity for ReID
|
21
21
|
with_reid: False
|
22
22
|
model: auto # uses native features if detector is YOLO else yolo11n-cls.pt
|
@@ -30,7 +30,7 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
|
|
30
30
|
Polygon format: [x1, y1, x2, y2, x3, y3, x4, y4].
|
31
31
|
Bounding box format: [x_min, y_min, x_max, y_max].
|
32
32
|
"""
|
33
|
-
check_requirements("shapely")
|
33
|
+
check_requirements("shapely>=2.0.0")
|
34
34
|
from shapely.geometry import Polygon
|
35
35
|
|
36
36
|
polygon1 = polygon1.reshape(-1, 4, 2)
|
@@ -851,6 +851,9 @@ class Exporter:
|
|
851
851
|
ct_model.license = m.pop("license")
|
852
852
|
ct_model.version = m.pop("version")
|
853
853
|
ct_model.user_defined_metadata.update({k: str(v) for k, v in m.items()})
|
854
|
+
if self.model.task == "classify":
|
855
|
+
ct_model.user_defined_metadata.update({"com.apple.coreml.model.preview.type": "imageClassifier"})
|
856
|
+
|
854
857
|
try:
|
855
858
|
ct_model.save(str(f)) # save *.mlpackage
|
856
859
|
except Exception as e:
|
@@ -53,7 +53,7 @@ class BaseSolution:
|
|
53
53
|
is_cli (bool): Enables CLI mode if set to True.
|
54
54
|
**kwargs (Any): Additional configuration parameters that override defaults.
|
55
55
|
"""
|
56
|
-
check_requirements("shapely>=2.0.0
|
56
|
+
check_requirements("shapely>=2.0.0")
|
57
57
|
from shapely.geometry import LineString, Point, Polygon
|
58
58
|
from shapely.prepared import prep
|
59
59
|
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
from collections import deque
|
4
|
+
from math import sqrt
|
5
|
+
|
6
|
+
from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
|
7
|
+
from ultralytics.utils.plotting import colors
|
8
|
+
|
9
|
+
|
10
|
+
class SpeedEstimator(BaseSolution):
|
11
|
+
"""
|
12
|
+
A class to estimate the speed of objects in a real-time video stream based on their tracks.
|
13
|
+
|
14
|
+
This class extends the BaseSolution class and provides functionality for estimating object speeds using
|
15
|
+
tracking data in video streams.
|
16
|
+
|
17
|
+
Attributes:
|
18
|
+
spd (Dict[int, float]): Dictionary storing speed data for tracked objects.
|
19
|
+
trk_hist (Dict[int, float]): Dictionary storing the object tracking data.
|
20
|
+
max_hist (int): maximum track history before computing speed
|
21
|
+
meters_per_pixel (float): Real-world meters represented by one pixel (e.g., 0.04 for 4m over 100px).
|
22
|
+
max_speed (int): Maximum allowed object speed; values above this will be capped at 120 km/h.
|
23
|
+
|
24
|
+
Methods:
|
25
|
+
initialize_region: Initializes the speed estimation region.
|
26
|
+
process: Processes input frames to estimate object speeds.
|
27
|
+
store_tracking_history: Stores the tracking history for an object.
|
28
|
+
extract_tracks: Extracts tracks from the current frame.
|
29
|
+
display_output: Displays the output with annotations.
|
30
|
+
|
31
|
+
Examples:
|
32
|
+
>>> estimator = SpeedEstimator()
|
33
|
+
>>> frame = cv2.imread("frame.jpg")
|
34
|
+
>>> results = estimator.process(frame)
|
35
|
+
>>> cv2.imshow("Speed Estimation", results.plot_im)
|
36
|
+
"""
|
37
|
+
|
38
|
+
def __init__(self, **kwargs):
|
39
|
+
"""
|
40
|
+
Initialize the SpeedEstimator object with speed estimation parameters and data structures.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
**kwargs (Any): Additional keyword arguments passed to the parent class.
|
44
|
+
"""
|
45
|
+
super().__init__(**kwargs)
|
46
|
+
|
47
|
+
self.fps = kwargs.get("fps", 30) # assumed video FPS
|
48
|
+
self.frame_count = 0 # global frame count
|
49
|
+
self.trk_frame_ids = {} # Track ID → first frame index
|
50
|
+
self.spd = {} # Final speed per object (km/h), once locked
|
51
|
+
self.trk_hist = {} # Track ID → deque of (time, position)
|
52
|
+
self.locked_ids = set() # Track IDs whose speed has been finalized
|
53
|
+
self.max_hist = kwargs.get("max_hist", 5) # Required frame history before computing speed
|
54
|
+
self.meter_per_pixel = kwargs.get("meter_per_pixel", 0.05) # Scene scale, depends on camera details
|
55
|
+
self.max_speed = kwargs.get("max_speed", 120) # max_speed adjustment
|
56
|
+
|
57
|
+
def process(self, im0):
|
58
|
+
"""
|
59
|
+
Process an input frame to estimate object speeds based on tracking data.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
im0 (np.ndarray): Input image for processing with shape (H, W, C) for RGB images.
|
63
|
+
|
64
|
+
Returns:
|
65
|
+
(SolutionResults): Contains processed image `plot_im` and `total_tracks` (number of tracked objects).
|
66
|
+
|
67
|
+
Examples:
|
68
|
+
>>> estimator = SpeedEstimator()
|
69
|
+
>>> image = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
|
70
|
+
>>> results = estimator.process(image)
|
71
|
+
"""
|
72
|
+
self.frame_count += 1
|
73
|
+
self.extract_tracks(im0)
|
74
|
+
annotator = SolutionAnnotator(im0, line_width=self.line_width)
|
75
|
+
|
76
|
+
for box, track_id, _, _ in zip(self.boxes, self.track_ids, self.clss, self.confs):
|
77
|
+
self.store_tracking_history(track_id, box)
|
78
|
+
|
79
|
+
if track_id not in self.trk_hist: # Initialize history if new track found
|
80
|
+
self.trk_hist[track_id] = deque(maxlen=self.max_hist)
|
81
|
+
self.trk_frame_ids[track_id] = self.frame_count
|
82
|
+
|
83
|
+
if track_id not in self.locked_ids: # Update history until speed is locked
|
84
|
+
trk_hist = self.trk_hist[track_id]
|
85
|
+
trk_hist.append(self.track_line[-1])
|
86
|
+
|
87
|
+
# Compute and lock speed once enough history is collected
|
88
|
+
if len(trk_hist) == self.max_hist:
|
89
|
+
p0, p1 = trk_hist[0], trk_hist[-1] # First and last points of track
|
90
|
+
dt = (self.frame_count - self.trk_frame_ids[track_id]) / self.fps # Time in seconds
|
91
|
+
if dt > 0:
|
92
|
+
dx, dy = p1[0] - p0[0], p1[1] - p0[1] # pixel displacement
|
93
|
+
pixel_distance = sqrt(dx * dx + dy * dy) # get pixel distance
|
94
|
+
meters = pixel_distance * self.meter_per_pixel # convert to meters
|
95
|
+
self.spd[track_id] = int(
|
96
|
+
min((meters / dt) * 3.6, self.max_speed)
|
97
|
+
) # convert to km/h and store final speed
|
98
|
+
self.locked_ids.add(track_id) # prevent further updates
|
99
|
+
self.trk_hist.pop(track_id, None) # free memory
|
100
|
+
self.trk_frame_ids.pop(track_id, None) # optional: remove frame start too
|
101
|
+
|
102
|
+
if track_id in self.spd:
|
103
|
+
speed_label = f"{self.spd[track_id]} km/h"
|
104
|
+
annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
|
105
|
+
|
106
|
+
plot_im = annotator.result()
|
107
|
+
self.display_output(plot_im) # Display output with base class function
|
108
|
+
|
109
|
+
# Return results with processed image and tracking summary
|
110
|
+
return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))
|
@@ -255,4 +255,6 @@ class ReID:
|
|
255
255
|
def __call__(self, img, dets):
|
256
256
|
"""Extract embeddings for detected objects."""
|
257
257
|
feats = self.model([save_one_box(det, img, save=False) for det in xywh2xyxy(torch.from_numpy(dets[:, :4]))])
|
258
|
+
if feats.shape[0] != dets.shape[0] and feats[0].shape[0] == dets.shape[0]:
|
259
|
+
feats = feats[0] # batched prediction with non-PyTorch backend
|
258
260
|
return [f.cpu().numpy() for f in feats]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.122
|
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>
|
@@ -68,8 +68,8 @@ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
|
|
68
68
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
69
69
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
70
70
|
Provides-Extra: solutions
|
71
|
-
Requires-Dist: shapely
|
72
|
-
Requires-Dist: streamlit
|
71
|
+
Requires-Dist: shapely>=2.0.0; extra == "solutions"
|
72
|
+
Requires-Dist: streamlit>=1.29.0; extra == "solutions"
|
73
73
|
Provides-Extra: logging
|
74
74
|
Requires-Dist: wandb; extra == "logging"
|
75
75
|
Requires-Dist: tensorboard; extra == "logging"
|
@@ -1,114 +0,0 @@
|
|
1
|
-
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
-
|
3
|
-
from time import time
|
4
|
-
|
5
|
-
from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
|
6
|
-
from ultralytics.utils.plotting import colors
|
7
|
-
|
8
|
-
|
9
|
-
class SpeedEstimator(BaseSolution):
|
10
|
-
"""
|
11
|
-
A class to estimate the speed of objects in a real-time video stream based on their tracks.
|
12
|
-
|
13
|
-
This class extends the BaseSolution class and provides functionality for estimating object speeds using
|
14
|
-
tracking data in video streams.
|
15
|
-
|
16
|
-
Attributes:
|
17
|
-
spd (Dict[int, float]): Dictionary storing speed data for tracked objects.
|
18
|
-
trkd_ids (List[int]): List of tracked object IDs that have already been speed-estimated.
|
19
|
-
trk_pt (Dict[int, float]): Dictionary storing previous timestamps for tracked objects.
|
20
|
-
trk_pp (Dict[int, Tuple[float, float]]): Dictionary storing previous positions for tracked objects.
|
21
|
-
region (List[Tuple[int, int]]): List of points defining the speed estimation region.
|
22
|
-
track_line (List[Tuple[float, float]]): List of points representing the object's track.
|
23
|
-
r_s (LineString): LineString object representing the speed estimation region.
|
24
|
-
|
25
|
-
Methods:
|
26
|
-
initialize_region: Initializes the speed estimation region.
|
27
|
-
process: Processes input frames to estimate object speeds.
|
28
|
-
store_tracking_history: Stores the tracking history for an object.
|
29
|
-
extract_tracks: Extracts tracks from the current frame.
|
30
|
-
display_output: Displays the output with annotations.
|
31
|
-
|
32
|
-
Examples:
|
33
|
-
>>> estimator = SpeedEstimator()
|
34
|
-
>>> frame = cv2.imread("frame.jpg")
|
35
|
-
>>> results = estimator.process(frame)
|
36
|
-
>>> cv2.imshow("Speed Estimation", results.plot_im)
|
37
|
-
"""
|
38
|
-
|
39
|
-
def __init__(self, **kwargs):
|
40
|
-
"""
|
41
|
-
Initialize the SpeedEstimator object with speed estimation parameters and data structures.
|
42
|
-
|
43
|
-
Args:
|
44
|
-
**kwargs (Any): Additional keyword arguments passed to the parent class.
|
45
|
-
"""
|
46
|
-
super().__init__(**kwargs)
|
47
|
-
|
48
|
-
self.initialize_region() # Initialize speed region
|
49
|
-
|
50
|
-
self.spd = {} # Dictionary for speed data
|
51
|
-
self.trkd_ids = [] # List for already speed-estimated and tracked IDs
|
52
|
-
self.trk_pt = {} # Dictionary for tracks' previous timestamps
|
53
|
-
self.trk_pp = {} # Dictionary for tracks' previous positions
|
54
|
-
|
55
|
-
def process(self, im0):
|
56
|
-
"""
|
57
|
-
Process an input frame to estimate object speeds based on tracking data.
|
58
|
-
|
59
|
-
Args:
|
60
|
-
im0 (np.ndarray): Input image for processing with shape (H, W, C) for RGB images.
|
61
|
-
|
62
|
-
Returns:
|
63
|
-
(SolutionResults): Contains processed image `plot_im` and `total_tracks` (number of tracked objects).
|
64
|
-
|
65
|
-
Examples:
|
66
|
-
>>> estimator = SpeedEstimator()
|
67
|
-
>>> image = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
|
68
|
-
>>> results = estimator.process(image)
|
69
|
-
"""
|
70
|
-
self.extract_tracks(im0) # Extract tracks
|
71
|
-
annotator = SolutionAnnotator(im0, line_width=self.line_width) # Initialize annotator
|
72
|
-
|
73
|
-
# Draw speed estimation region
|
74
|
-
annotator.draw_region(reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2)
|
75
|
-
|
76
|
-
for box, track_id, cls, conf in zip(self.boxes, self.track_ids, self.clss, self.confs):
|
77
|
-
self.store_tracking_history(track_id, box) # Store track history
|
78
|
-
|
79
|
-
# Initialize tracking data for new objects
|
80
|
-
if track_id not in self.trk_pt:
|
81
|
-
self.trk_pt[track_id] = 0
|
82
|
-
if track_id not in self.trk_pp:
|
83
|
-
self.trk_pp[track_id] = self.track_line[-1]
|
84
|
-
|
85
|
-
speed_label = (
|
86
|
-
f"{int(self.spd[track_id])} km/h"
|
87
|
-
if track_id in self.spd and self.show_labels
|
88
|
-
else self.adjust_box_label(cls, conf, track_id)
|
89
|
-
)
|
90
|
-
annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
|
91
|
-
|
92
|
-
# Determine if object is crossing the speed estimation region
|
93
|
-
if self.LineString([self.trk_pp[track_id], self.track_line[-1]]).intersects(self.r_s):
|
94
|
-
direction = "known"
|
95
|
-
else:
|
96
|
-
direction = "unknown"
|
97
|
-
|
98
|
-
# Calculate speed for objects crossing the region for the first time
|
99
|
-
if direction == "known" and track_id not in self.trkd_ids:
|
100
|
-
self.trkd_ids.append(track_id)
|
101
|
-
time_difference = time() - self.trk_pt[track_id]
|
102
|
-
if time_difference > 0:
|
103
|
-
# Calculate speed based on vertical displacement and time
|
104
|
-
self.spd[track_id] = abs(self.track_line[-1][1] - self.trk_pp[track_id][1]) / time_difference
|
105
|
-
|
106
|
-
# Update tracking data for next frame
|
107
|
-
self.trk_pt[track_id] = time()
|
108
|
-
self.trk_pp[track_id] = self.track_line[-1]
|
109
|
-
|
110
|
-
plot_im = annotator.result()
|
111
|
-
self.display_output(plot_im) # Display output with base class function
|
112
|
-
|
113
|
-
# Return results with processed image and tracking summary
|
114
|
-
return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.121 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|