dgenerate-ultralytics-headless 8.3.134__py3-none-any.whl
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.
- dgenerate_ultralytics_headless-8.3.134.dist-info/METADATA +400 -0
- dgenerate_ultralytics_headless-8.3.134.dist-info/RECORD +272 -0
- dgenerate_ultralytics_headless-8.3.134.dist-info/WHEEL +5 -0
- dgenerate_ultralytics_headless-8.3.134.dist-info/entry_points.txt +3 -0
- dgenerate_ultralytics_headless-8.3.134.dist-info/licenses/LICENSE +661 -0
- dgenerate_ultralytics_headless-8.3.134.dist-info/top_level.txt +1 -0
- tests/__init__.py +22 -0
- tests/conftest.py +83 -0
- tests/test_cli.py +138 -0
- tests/test_cuda.py +215 -0
- tests/test_engine.py +131 -0
- tests/test_exports.py +236 -0
- tests/test_integrations.py +154 -0
- tests/test_python.py +694 -0
- tests/test_solutions.py +187 -0
- ultralytics/__init__.py +30 -0
- ultralytics/assets/bus.jpg +0 -0
- ultralytics/assets/zidane.jpg +0 -0
- ultralytics/cfg/__init__.py +1023 -0
- ultralytics/cfg/datasets/Argoverse.yaml +77 -0
- ultralytics/cfg/datasets/DOTAv1.5.yaml +37 -0
- ultralytics/cfg/datasets/DOTAv1.yaml +36 -0
- ultralytics/cfg/datasets/GlobalWheat2020.yaml +68 -0
- ultralytics/cfg/datasets/HomeObjects-3K.yaml +33 -0
- ultralytics/cfg/datasets/ImageNet.yaml +2025 -0
- ultralytics/cfg/datasets/Objects365.yaml +443 -0
- ultralytics/cfg/datasets/SKU-110K.yaml +58 -0
- ultralytics/cfg/datasets/VOC.yaml +106 -0
- ultralytics/cfg/datasets/VisDrone.yaml +77 -0
- ultralytics/cfg/datasets/african-wildlife.yaml +25 -0
- ultralytics/cfg/datasets/brain-tumor.yaml +23 -0
- ultralytics/cfg/datasets/carparts-seg.yaml +44 -0
- ultralytics/cfg/datasets/coco-pose.yaml +42 -0
- ultralytics/cfg/datasets/coco.yaml +118 -0
- ultralytics/cfg/datasets/coco128-seg.yaml +101 -0
- ultralytics/cfg/datasets/coco128.yaml +101 -0
- ultralytics/cfg/datasets/coco8-multispectral.yaml +104 -0
- ultralytics/cfg/datasets/coco8-pose.yaml +26 -0
- ultralytics/cfg/datasets/coco8-seg.yaml +101 -0
- ultralytics/cfg/datasets/coco8.yaml +101 -0
- ultralytics/cfg/datasets/crack-seg.yaml +22 -0
- ultralytics/cfg/datasets/dog-pose.yaml +24 -0
- ultralytics/cfg/datasets/dota8-multispectral.yaml +38 -0
- ultralytics/cfg/datasets/dota8.yaml +35 -0
- ultralytics/cfg/datasets/hand-keypoints.yaml +26 -0
- ultralytics/cfg/datasets/lvis.yaml +1240 -0
- ultralytics/cfg/datasets/medical-pills.yaml +22 -0
- ultralytics/cfg/datasets/open-images-v7.yaml +666 -0
- ultralytics/cfg/datasets/package-seg.yaml +22 -0
- ultralytics/cfg/datasets/signature.yaml +21 -0
- ultralytics/cfg/datasets/tiger-pose.yaml +25 -0
- ultralytics/cfg/datasets/xView.yaml +155 -0
- ultralytics/cfg/default.yaml +127 -0
- ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +17 -0
- ultralytics/cfg/models/11/yolo11-cls.yaml +33 -0
- ultralytics/cfg/models/11/yolo11-obb.yaml +50 -0
- ultralytics/cfg/models/11/yolo11-pose.yaml +51 -0
- ultralytics/cfg/models/11/yolo11-seg.yaml +50 -0
- ultralytics/cfg/models/11/yolo11.yaml +50 -0
- ultralytics/cfg/models/11/yoloe-11-seg.yaml +48 -0
- ultralytics/cfg/models/11/yoloe-11.yaml +48 -0
- ultralytics/cfg/models/12/yolo12-cls.yaml +32 -0
- ultralytics/cfg/models/12/yolo12-obb.yaml +48 -0
- ultralytics/cfg/models/12/yolo12-pose.yaml +49 -0
- ultralytics/cfg/models/12/yolo12-seg.yaml +48 -0
- ultralytics/cfg/models/12/yolo12.yaml +48 -0
- ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +53 -0
- ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +45 -0
- ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +45 -0
- ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +57 -0
- ultralytics/cfg/models/v10/yolov10b.yaml +45 -0
- ultralytics/cfg/models/v10/yolov10l.yaml +45 -0
- ultralytics/cfg/models/v10/yolov10m.yaml +45 -0
- ultralytics/cfg/models/v10/yolov10n.yaml +45 -0
- ultralytics/cfg/models/v10/yolov10s.yaml +45 -0
- ultralytics/cfg/models/v10/yolov10x.yaml +45 -0
- ultralytics/cfg/models/v3/yolov3-spp.yaml +49 -0
- ultralytics/cfg/models/v3/yolov3-tiny.yaml +40 -0
- ultralytics/cfg/models/v3/yolov3.yaml +49 -0
- ultralytics/cfg/models/v5/yolov5-p6.yaml +62 -0
- ultralytics/cfg/models/v5/yolov5.yaml +51 -0
- ultralytics/cfg/models/v6/yolov6.yaml +56 -0
- ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +45 -0
- ultralytics/cfg/models/v8/yoloe-v8.yaml +45 -0
- ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +28 -0
- ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +28 -0
- ultralytics/cfg/models/v8/yolov8-cls.yaml +32 -0
- ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +58 -0
- ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +60 -0
- ultralytics/cfg/models/v8/yolov8-ghost.yaml +50 -0
- ultralytics/cfg/models/v8/yolov8-obb.yaml +49 -0
- ultralytics/cfg/models/v8/yolov8-p2.yaml +57 -0
- ultralytics/cfg/models/v8/yolov8-p6.yaml +59 -0
- ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +60 -0
- ultralytics/cfg/models/v8/yolov8-pose.yaml +50 -0
- ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +49 -0
- ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +59 -0
- ultralytics/cfg/models/v8/yolov8-seg.yaml +49 -0
- ultralytics/cfg/models/v8/yolov8-world.yaml +51 -0
- ultralytics/cfg/models/v8/yolov8-worldv2.yaml +49 -0
- ultralytics/cfg/models/v8/yolov8.yaml +49 -0
- ultralytics/cfg/models/v9/yolov9c-seg.yaml +41 -0
- ultralytics/cfg/models/v9/yolov9c.yaml +41 -0
- ultralytics/cfg/models/v9/yolov9e-seg.yaml +64 -0
- ultralytics/cfg/models/v9/yolov9e.yaml +64 -0
- ultralytics/cfg/models/v9/yolov9m.yaml +41 -0
- ultralytics/cfg/models/v9/yolov9s.yaml +41 -0
- ultralytics/cfg/models/v9/yolov9t.yaml +41 -0
- ultralytics/cfg/trackers/botsort.yaml +22 -0
- ultralytics/cfg/trackers/bytetrack.yaml +14 -0
- ultralytics/data/__init__.py +26 -0
- ultralytics/data/annotator.py +66 -0
- ultralytics/data/augment.py +2945 -0
- ultralytics/data/base.py +438 -0
- ultralytics/data/build.py +258 -0
- ultralytics/data/converter.py +754 -0
- ultralytics/data/dataset.py +834 -0
- ultralytics/data/loaders.py +676 -0
- ultralytics/data/scripts/download_weights.sh +18 -0
- ultralytics/data/scripts/get_coco.sh +61 -0
- ultralytics/data/scripts/get_coco128.sh +18 -0
- ultralytics/data/scripts/get_imagenet.sh +52 -0
- ultralytics/data/split.py +125 -0
- ultralytics/data/split_dota.py +325 -0
- ultralytics/data/utils.py +777 -0
- ultralytics/engine/__init__.py +1 -0
- ultralytics/engine/exporter.py +1519 -0
- ultralytics/engine/model.py +1156 -0
- ultralytics/engine/predictor.py +502 -0
- ultralytics/engine/results.py +1840 -0
- ultralytics/engine/trainer.py +853 -0
- ultralytics/engine/tuner.py +243 -0
- ultralytics/engine/validator.py +377 -0
- ultralytics/hub/__init__.py +168 -0
- ultralytics/hub/auth.py +137 -0
- ultralytics/hub/google/__init__.py +176 -0
- ultralytics/hub/session.py +446 -0
- ultralytics/hub/utils.py +248 -0
- ultralytics/models/__init__.py +9 -0
- ultralytics/models/fastsam/__init__.py +7 -0
- ultralytics/models/fastsam/model.py +61 -0
- ultralytics/models/fastsam/predict.py +181 -0
- ultralytics/models/fastsam/utils.py +24 -0
- ultralytics/models/fastsam/val.py +40 -0
- ultralytics/models/nas/__init__.py +7 -0
- ultralytics/models/nas/model.py +102 -0
- ultralytics/models/nas/predict.py +58 -0
- ultralytics/models/nas/val.py +39 -0
- ultralytics/models/rtdetr/__init__.py +7 -0
- ultralytics/models/rtdetr/model.py +63 -0
- ultralytics/models/rtdetr/predict.py +84 -0
- ultralytics/models/rtdetr/train.py +85 -0
- ultralytics/models/rtdetr/val.py +191 -0
- ultralytics/models/sam/__init__.py +6 -0
- ultralytics/models/sam/amg.py +260 -0
- ultralytics/models/sam/build.py +358 -0
- ultralytics/models/sam/model.py +170 -0
- ultralytics/models/sam/modules/__init__.py +1 -0
- ultralytics/models/sam/modules/blocks.py +1129 -0
- ultralytics/models/sam/modules/decoders.py +515 -0
- ultralytics/models/sam/modules/encoders.py +854 -0
- ultralytics/models/sam/modules/memory_attention.py +299 -0
- ultralytics/models/sam/modules/sam.py +1006 -0
- ultralytics/models/sam/modules/tiny_encoder.py +1002 -0
- ultralytics/models/sam/modules/transformer.py +351 -0
- ultralytics/models/sam/modules/utils.py +394 -0
- ultralytics/models/sam/predict.py +1605 -0
- ultralytics/models/utils/__init__.py +1 -0
- ultralytics/models/utils/loss.py +455 -0
- ultralytics/models/utils/ops.py +268 -0
- ultralytics/models/yolo/__init__.py +7 -0
- ultralytics/models/yolo/classify/__init__.py +7 -0
- ultralytics/models/yolo/classify/predict.py +88 -0
- ultralytics/models/yolo/classify/train.py +233 -0
- ultralytics/models/yolo/classify/val.py +215 -0
- ultralytics/models/yolo/detect/__init__.py +7 -0
- ultralytics/models/yolo/detect/predict.py +124 -0
- ultralytics/models/yolo/detect/train.py +217 -0
- ultralytics/models/yolo/detect/val.py +451 -0
- ultralytics/models/yolo/model.py +354 -0
- ultralytics/models/yolo/obb/__init__.py +7 -0
- ultralytics/models/yolo/obb/predict.py +66 -0
- ultralytics/models/yolo/obb/train.py +81 -0
- ultralytics/models/yolo/obb/val.py +283 -0
- ultralytics/models/yolo/pose/__init__.py +7 -0
- ultralytics/models/yolo/pose/predict.py +79 -0
- ultralytics/models/yolo/pose/train.py +154 -0
- ultralytics/models/yolo/pose/val.py +394 -0
- ultralytics/models/yolo/segment/__init__.py +7 -0
- ultralytics/models/yolo/segment/predict.py +113 -0
- ultralytics/models/yolo/segment/train.py +123 -0
- ultralytics/models/yolo/segment/val.py +428 -0
- ultralytics/models/yolo/world/__init__.py +5 -0
- ultralytics/models/yolo/world/train.py +119 -0
- ultralytics/models/yolo/world/train_world.py +176 -0
- ultralytics/models/yolo/yoloe/__init__.py +22 -0
- ultralytics/models/yolo/yoloe/predict.py +169 -0
- ultralytics/models/yolo/yoloe/train.py +298 -0
- ultralytics/models/yolo/yoloe/train_seg.py +124 -0
- ultralytics/models/yolo/yoloe/val.py +191 -0
- ultralytics/nn/__init__.py +29 -0
- ultralytics/nn/autobackend.py +842 -0
- ultralytics/nn/modules/__init__.py +182 -0
- ultralytics/nn/modules/activation.py +53 -0
- ultralytics/nn/modules/block.py +1966 -0
- ultralytics/nn/modules/conv.py +712 -0
- ultralytics/nn/modules/head.py +880 -0
- ultralytics/nn/modules/transformer.py +713 -0
- ultralytics/nn/modules/utils.py +164 -0
- ultralytics/nn/tasks.py +1627 -0
- ultralytics/nn/text_model.py +351 -0
- ultralytics/solutions/__init__.py +41 -0
- ultralytics/solutions/ai_gym.py +116 -0
- ultralytics/solutions/analytics.py +252 -0
- ultralytics/solutions/config.py +106 -0
- ultralytics/solutions/distance_calculation.py +124 -0
- ultralytics/solutions/heatmap.py +127 -0
- ultralytics/solutions/instance_segmentation.py +84 -0
- ultralytics/solutions/object_blurrer.py +90 -0
- ultralytics/solutions/object_counter.py +195 -0
- ultralytics/solutions/object_cropper.py +84 -0
- ultralytics/solutions/parking_management.py +273 -0
- ultralytics/solutions/queue_management.py +93 -0
- ultralytics/solutions/region_counter.py +120 -0
- ultralytics/solutions/security_alarm.py +154 -0
- ultralytics/solutions/similarity_search.py +172 -0
- ultralytics/solutions/solutions.py +724 -0
- ultralytics/solutions/speed_estimation.py +110 -0
- ultralytics/solutions/streamlit_inference.py +196 -0
- ultralytics/solutions/templates/similarity-search.html +160 -0
- ultralytics/solutions/trackzone.py +88 -0
- ultralytics/solutions/vision_eye.py +68 -0
- ultralytics/trackers/__init__.py +7 -0
- ultralytics/trackers/basetrack.py +124 -0
- ultralytics/trackers/bot_sort.py +260 -0
- ultralytics/trackers/byte_tracker.py +480 -0
- ultralytics/trackers/track.py +125 -0
- ultralytics/trackers/utils/__init__.py +1 -0
- ultralytics/trackers/utils/gmc.py +376 -0
- ultralytics/trackers/utils/kalman_filter.py +493 -0
- ultralytics/trackers/utils/matching.py +157 -0
- ultralytics/utils/__init__.py +1435 -0
- ultralytics/utils/autobatch.py +106 -0
- ultralytics/utils/autodevice.py +174 -0
- ultralytics/utils/benchmarks.py +695 -0
- ultralytics/utils/callbacks/__init__.py +5 -0
- ultralytics/utils/callbacks/base.py +234 -0
- ultralytics/utils/callbacks/clearml.py +153 -0
- ultralytics/utils/callbacks/comet.py +552 -0
- ultralytics/utils/callbacks/dvc.py +205 -0
- ultralytics/utils/callbacks/hub.py +108 -0
- ultralytics/utils/callbacks/mlflow.py +138 -0
- ultralytics/utils/callbacks/neptune.py +140 -0
- ultralytics/utils/callbacks/raytune.py +43 -0
- ultralytics/utils/callbacks/tensorboard.py +132 -0
- ultralytics/utils/callbacks/wb.py +185 -0
- ultralytics/utils/checks.py +897 -0
- ultralytics/utils/dist.py +119 -0
- ultralytics/utils/downloads.py +499 -0
- ultralytics/utils/errors.py +43 -0
- ultralytics/utils/export.py +219 -0
- ultralytics/utils/files.py +221 -0
- ultralytics/utils/instance.py +499 -0
- ultralytics/utils/loss.py +813 -0
- ultralytics/utils/metrics.py +1356 -0
- ultralytics/utils/ops.py +885 -0
- ultralytics/utils/patches.py +143 -0
- ultralytics/utils/plotting.py +1011 -0
- ultralytics/utils/tal.py +416 -0
- ultralytics/utils/torch_utils.py +990 -0
- ultralytics/utils/triton.py +116 -0
- ultralytics/utils/tuner.py +159 -0
tests/test_solutions.py
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
# Tests Ultralytics Solutions: https://docs.ultralytics.com/solutions/,
|
4
|
+
# including every solution excluding DistanceCalculation and Security Alarm System.
|
5
|
+
|
6
|
+
import cv2
|
7
|
+
import pytest
|
8
|
+
|
9
|
+
from tests import MODEL, TMP
|
10
|
+
from ultralytics import solutions
|
11
|
+
from ultralytics.utils import ASSETS_URL, IS_RASPBERRYPI, LINUX, checks
|
12
|
+
from ultralytics.utils.downloads import safe_download
|
13
|
+
|
14
|
+
# Pre-defined arguments values
|
15
|
+
SHOW = False
|
16
|
+
DEMO_VIDEO = "solutions_ci_demo.mp4" # for all the solutions, except workout, object cropping and parking management
|
17
|
+
CROP_VIDEO = "decelera_landscape_min.mov" # for object cropping solution
|
18
|
+
POSE_VIDEO = "solution_ci_pose_demo.mp4" # only for workouts monitoring solution
|
19
|
+
PARKING_VIDEO = "solution_ci_parking_demo.mp4" # only for parking management solution
|
20
|
+
PARKING_AREAS_JSON = "solution_ci_parking_areas.json" # only for parking management solution
|
21
|
+
PARKING_MODEL = "solutions_ci_parking_model.pt" # only for parking management solution
|
22
|
+
REGION = [(10, 200), (540, 200), (540, 180), (10, 180)] # for object counting, speed estimation and queue management
|
23
|
+
|
24
|
+
# Test configs for each solution : (name, class, needs_frame_count, video, kwargs)
|
25
|
+
SOLUTIONS = [
|
26
|
+
(
|
27
|
+
"ObjectCounter",
|
28
|
+
solutions.ObjectCounter,
|
29
|
+
False,
|
30
|
+
DEMO_VIDEO,
|
31
|
+
{"region": REGION, "model": MODEL, "show": SHOW},
|
32
|
+
),
|
33
|
+
(
|
34
|
+
"Heatmap",
|
35
|
+
solutions.Heatmap,
|
36
|
+
False,
|
37
|
+
DEMO_VIDEO,
|
38
|
+
{"colormap": cv2.COLORMAP_PARULA, "model": MODEL, "show": SHOW, "region": None},
|
39
|
+
),
|
40
|
+
(
|
41
|
+
"HeatmapWithRegion",
|
42
|
+
solutions.Heatmap,
|
43
|
+
False,
|
44
|
+
DEMO_VIDEO,
|
45
|
+
{"colormap": cv2.COLORMAP_PARULA, "region": REGION, "model": MODEL, "show": SHOW},
|
46
|
+
),
|
47
|
+
(
|
48
|
+
"SpeedEstimator",
|
49
|
+
solutions.SpeedEstimator,
|
50
|
+
False,
|
51
|
+
DEMO_VIDEO,
|
52
|
+
{"region": REGION, "model": MODEL, "show": SHOW},
|
53
|
+
),
|
54
|
+
(
|
55
|
+
"QueueManager",
|
56
|
+
solutions.QueueManager,
|
57
|
+
False,
|
58
|
+
DEMO_VIDEO,
|
59
|
+
{"region": REGION, "model": MODEL, "show": SHOW},
|
60
|
+
),
|
61
|
+
(
|
62
|
+
"LineAnalytics",
|
63
|
+
solutions.Analytics,
|
64
|
+
True,
|
65
|
+
DEMO_VIDEO,
|
66
|
+
{"analytics_type": "line", "model": MODEL, "show": SHOW},
|
67
|
+
),
|
68
|
+
(
|
69
|
+
"PieAnalytics",
|
70
|
+
solutions.Analytics,
|
71
|
+
True,
|
72
|
+
DEMO_VIDEO,
|
73
|
+
{"analytics_type": "pie", "model": MODEL, "show": SHOW},
|
74
|
+
),
|
75
|
+
(
|
76
|
+
"BarAnalytics",
|
77
|
+
solutions.Analytics,
|
78
|
+
True,
|
79
|
+
DEMO_VIDEO,
|
80
|
+
{"analytics_type": "bar", "model": MODEL, "show": SHOW},
|
81
|
+
),
|
82
|
+
(
|
83
|
+
"AreaAnalytics",
|
84
|
+
solutions.Analytics,
|
85
|
+
True,
|
86
|
+
DEMO_VIDEO,
|
87
|
+
{"analytics_type": "area", "model": MODEL, "show": SHOW},
|
88
|
+
),
|
89
|
+
("TrackZone", solutions.TrackZone, False, DEMO_VIDEO, {"region": REGION, "model": MODEL, "show": SHOW}),
|
90
|
+
(
|
91
|
+
"ObjectCropper",
|
92
|
+
solutions.ObjectCropper,
|
93
|
+
False,
|
94
|
+
CROP_VIDEO,
|
95
|
+
{"crop_dir": str(TMP / "cropped-detections"), "model": MODEL, "show": SHOW},
|
96
|
+
),
|
97
|
+
(
|
98
|
+
"ObjectBlurrer",
|
99
|
+
solutions.ObjectBlurrer,
|
100
|
+
False,
|
101
|
+
DEMO_VIDEO,
|
102
|
+
{"blur_ratio": 0.5, "model": MODEL, "show": SHOW},
|
103
|
+
),
|
104
|
+
(
|
105
|
+
"InstanceSegmentation",
|
106
|
+
solutions.InstanceSegmentation,
|
107
|
+
False,
|
108
|
+
DEMO_VIDEO,
|
109
|
+
{"model": "yolo11n-seg.pt", "show": SHOW},
|
110
|
+
),
|
111
|
+
("VisionEye", solutions.VisionEye, False, DEMO_VIDEO, {"model": MODEL, "show": SHOW}),
|
112
|
+
(
|
113
|
+
"RegionCounter",
|
114
|
+
solutions.RegionCounter,
|
115
|
+
False,
|
116
|
+
DEMO_VIDEO,
|
117
|
+
{"region": REGION, "model": MODEL, "show": SHOW},
|
118
|
+
),
|
119
|
+
("AIGym", solutions.AIGym, False, POSE_VIDEO, {"kpts": [6, 8, 10], "show": SHOW}),
|
120
|
+
(
|
121
|
+
"ParkingManager",
|
122
|
+
solutions.ParkingManagement,
|
123
|
+
False,
|
124
|
+
PARKING_VIDEO,
|
125
|
+
{"model": str(TMP / PARKING_MODEL), "show": SHOW, "json_file": str(TMP / PARKING_AREAS_JSON)},
|
126
|
+
),
|
127
|
+
(
|
128
|
+
"StreamlitInference",
|
129
|
+
solutions.Inference,
|
130
|
+
False,
|
131
|
+
None, # streamlit application don't require video file
|
132
|
+
{}, # streamlit application don't accept arguments
|
133
|
+
),
|
134
|
+
]
|
135
|
+
|
136
|
+
|
137
|
+
def process_video(solution, video_path, needs_frame_count=False):
|
138
|
+
"""Process video with solution, feeding frames and optional frame count."""
|
139
|
+
cap = cv2.VideoCapture(video_path)
|
140
|
+
assert cap.isOpened(), f"Error reading video file {video_path}"
|
141
|
+
|
142
|
+
frame_count = 0
|
143
|
+
while cap.isOpened():
|
144
|
+
success, im0 = cap.read()
|
145
|
+
if not success:
|
146
|
+
break
|
147
|
+
frame_count += 1
|
148
|
+
im_copy = im0.copy()
|
149
|
+
args = [im_copy, frame_count] if needs_frame_count else [im_copy]
|
150
|
+
_ = solution(*args)
|
151
|
+
|
152
|
+
cap.release()
|
153
|
+
|
154
|
+
|
155
|
+
@pytest.mark.skipif(
|
156
|
+
(LINUX and checks.IS_PYTHON_3_11) or IS_RASPBERRYPI,
|
157
|
+
reason="Disabled for testing due to --slow test errors after YOLOE PR.",
|
158
|
+
)
|
159
|
+
@pytest.mark.parametrize("name, solution_class, needs_frame_count, video, kwargs", SOLUTIONS)
|
160
|
+
def test_solution(name, solution_class, needs_frame_count, video, kwargs):
|
161
|
+
"""Test individual Ultralytics solution."""
|
162
|
+
if video:
|
163
|
+
safe_download(url=f"{ASSETS_URL}/{video}", dir=TMP)
|
164
|
+
if name == "ParkingManager":
|
165
|
+
safe_download(url=f"{ASSETS_URL}/{PARKING_AREAS_JSON}", dir=TMP)
|
166
|
+
safe_download(url=f"{ASSETS_URL}/{PARKING_MODEL}", dir=TMP)
|
167
|
+
elif name == "StreamlitInference":
|
168
|
+
if checks.check_imshow(): # do not merge with elif above
|
169
|
+
solution_class(**kwargs).inference() # requires interactive GUI environment
|
170
|
+
return
|
171
|
+
|
172
|
+
process_video(
|
173
|
+
solution=solution_class(**kwargs),
|
174
|
+
video_path=str(TMP / video),
|
175
|
+
needs_frame_count=needs_frame_count,
|
176
|
+
)
|
177
|
+
|
178
|
+
|
179
|
+
@pytest.mark.slow
|
180
|
+
@pytest.mark.skipif(checks.IS_PYTHON_3_8, reason="Disabled due to unsupported CLIP dependencies.")
|
181
|
+
@pytest.mark.skipif(IS_RASPBERRYPI, reason="Disabled due to slow performance on Raspberry Pi.")
|
182
|
+
def test_similarity_search():
|
183
|
+
"""Test similarity search solution."""
|
184
|
+
from ultralytics import solutions
|
185
|
+
|
186
|
+
searcher = solutions.VisualAISearch()
|
187
|
+
_ = searcher("a dog sitting on a bench") # Returns the results in format "- img name | similarity score"
|
ultralytics/__init__.py
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
__version__ = "8.3.134"
|
4
|
+
|
5
|
+
import os
|
6
|
+
|
7
|
+
# Set ENV variables (place before imports)
|
8
|
+
if not os.environ.get("OMP_NUM_THREADS"):
|
9
|
+
os.environ["OMP_NUM_THREADS"] = "1" # default for reduced CPU utilization during training
|
10
|
+
|
11
|
+
from ultralytics.models import NAS, RTDETR, SAM, YOLO, YOLOE, FastSAM, YOLOWorld
|
12
|
+
from ultralytics.utils import ASSETS, SETTINGS
|
13
|
+
from ultralytics.utils.checks import check_yolo as checks
|
14
|
+
from ultralytics.utils.downloads import download
|
15
|
+
|
16
|
+
settings = SETTINGS
|
17
|
+
__all__ = (
|
18
|
+
"__version__",
|
19
|
+
"ASSETS",
|
20
|
+
"YOLO",
|
21
|
+
"YOLOWorld",
|
22
|
+
"YOLOE",
|
23
|
+
"NAS",
|
24
|
+
"SAM",
|
25
|
+
"FastSAM",
|
26
|
+
"RTDETR",
|
27
|
+
"checks",
|
28
|
+
"download",
|
29
|
+
"settings",
|
30
|
+
)
|
Binary file
|
Binary file
|