ultralytics 8.2.55__py3-none-any.whl → 8.2.57__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.
Potentially problematic release.
This version of ultralytics might be problematic. Click here for more details.
- tests/test_solutions.py +90 -0
- ultralytics/__init__.py +1 -1
- ultralytics/data/dataset.py +2 -2
- ultralytics/engine/model.py +2 -0
- ultralytics/solutions/distance_calculation.py +1 -1
- ultralytics/solutions/heatmap.py +2 -2
- ultralytics/solutions/object_counter.py +3 -3
- ultralytics/solutions/queue_management.py +4 -4
- ultralytics/solutions/streamlit_inference.py +15 -25
- ultralytics/utils/plotting.py +8 -9
- ultralytics/utils/torch_utils.py +1 -0
- {ultralytics-8.2.55.dist-info → ultralytics-8.2.57.dist-info}/METADATA +1 -1
- {ultralytics-8.2.55.dist-info → ultralytics-8.2.57.dist-info}/RECORD +17 -16
- {ultralytics-8.2.55.dist-info → ultralytics-8.2.57.dist-info}/LICENSE +0 -0
- {ultralytics-8.2.55.dist-info → ultralytics-8.2.57.dist-info}/WHEEL +0 -0
- {ultralytics-8.2.55.dist-info → ultralytics-8.2.57.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.2.55.dist-info → ultralytics-8.2.57.dist-info}/top_level.txt +0 -0
tests/test_solutions.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
|
|
3
|
+
import cv2
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
from ultralytics import YOLO, solutions
|
|
7
|
+
from ultralytics.utils.downloads import safe_download
|
|
8
|
+
|
|
9
|
+
MAJOR_SOLUTIONS_DEMO = "https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4"
|
|
10
|
+
WORKOUTS_SOLUTION_DEMO = "https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_pose_demo.mp4"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.mark.slow
|
|
14
|
+
def test_major_solutions():
|
|
15
|
+
"""Test the object counting, heatmap, speed estimation and queue management solution."""
|
|
16
|
+
|
|
17
|
+
safe_download(url=MAJOR_SOLUTIONS_DEMO)
|
|
18
|
+
model = YOLO("yolov8n.pt")
|
|
19
|
+
names = model.names
|
|
20
|
+
cap = cv2.VideoCapture("solutions_ci_demo.mp4")
|
|
21
|
+
assert cap.isOpened(), "Error reading video file"
|
|
22
|
+
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
|
|
23
|
+
counter = solutions.ObjectCounter(reg_pts=region_points, names=names, view_img=False)
|
|
24
|
+
heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, names=names, view_img=False)
|
|
25
|
+
speed = solutions.SpeedEstimator(reg_pts=region_points, names=names, view_img=False)
|
|
26
|
+
queue = solutions.QueueManager(names=names, reg_pts=region_points, view_img=False)
|
|
27
|
+
while cap.isOpened():
|
|
28
|
+
success, im0 = cap.read()
|
|
29
|
+
if not success:
|
|
30
|
+
break
|
|
31
|
+
original_im0 = im0.copy()
|
|
32
|
+
tracks = model.track(im0, persist=True, show=False)
|
|
33
|
+
_ = counter.start_counting(original_im0.copy(), tracks)
|
|
34
|
+
_ = heatmap.generate_heatmap(original_im0.copy(), tracks)
|
|
35
|
+
_ = speed.estimate_speed(original_im0.copy(), tracks)
|
|
36
|
+
_ = queue.process_queue(original_im0.copy(), tracks)
|
|
37
|
+
cap.release()
|
|
38
|
+
cv2.destroyAllWindows()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@pytest.mark.slow
|
|
42
|
+
def test_aigym():
|
|
43
|
+
"""Test the workouts monitoring solution."""
|
|
44
|
+
|
|
45
|
+
safe_download(url=WORKOUTS_SOLUTION_DEMO)
|
|
46
|
+
model = YOLO("yolov8n-pose.pt")
|
|
47
|
+
cap = cv2.VideoCapture("solution_ci_pose_demo.mp4")
|
|
48
|
+
assert cap.isOpened(), "Error reading video file"
|
|
49
|
+
gym_object = solutions.AIGym(line_thickness=2, pose_type="squat", kpts_to_check=[5, 11, 13])
|
|
50
|
+
while cap.isOpened():
|
|
51
|
+
success, im0 = cap.read()
|
|
52
|
+
if not success:
|
|
53
|
+
break
|
|
54
|
+
results = model.track(im0, verbose=False)
|
|
55
|
+
_ = gym_object.start_counting(im0, results)
|
|
56
|
+
cap.release()
|
|
57
|
+
cv2.destroyAllWindows()
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@pytest.mark.slow
|
|
61
|
+
def test_instance_segmentation():
|
|
62
|
+
"""Test the instance segmentation solution."""
|
|
63
|
+
|
|
64
|
+
from ultralytics.utils.plotting import Annotator, colors
|
|
65
|
+
|
|
66
|
+
model = YOLO("yolov8n-seg.pt")
|
|
67
|
+
names = model.names
|
|
68
|
+
cap = cv2.VideoCapture("solutions_ci_demo.mp4")
|
|
69
|
+
assert cap.isOpened(), "Error reading video file"
|
|
70
|
+
while cap.isOpened():
|
|
71
|
+
success, im0 = cap.read()
|
|
72
|
+
if not success:
|
|
73
|
+
break
|
|
74
|
+
results = model.predict(im0)
|
|
75
|
+
annotator = Annotator(im0, line_width=2)
|
|
76
|
+
if results[0].masks is not None:
|
|
77
|
+
clss = results[0].boxes.cls.cpu().tolist()
|
|
78
|
+
masks = results[0].masks.xy
|
|
79
|
+
for mask, cls in zip(masks, clss):
|
|
80
|
+
color = colors(int(cls), True)
|
|
81
|
+
annotator.seg_bbox(mask=mask, mask_color=color, label=names[int(cls)])
|
|
82
|
+
cap.release()
|
|
83
|
+
cv2.destroyAllWindows()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@pytest.mark.slow
|
|
87
|
+
def test_streamlit_predict():
|
|
88
|
+
"""Test streamlit predict live inference solution."""
|
|
89
|
+
|
|
90
|
+
solutions.inference()
|
ultralytics/__init__.py
CHANGED
ultralytics/data/dataset.py
CHANGED
|
@@ -15,7 +15,7 @@ from torch.utils.data import ConcatDataset
|
|
|
15
15
|
|
|
16
16
|
from ultralytics.utils import LOCAL_RANK, NUM_THREADS, TQDM, colorstr
|
|
17
17
|
from ultralytics.utils.ops import resample_segments
|
|
18
|
-
from ultralytics.utils.torch_utils import
|
|
18
|
+
from ultralytics.utils.torch_utils import TORCHVISION_0_18
|
|
19
19
|
|
|
20
20
|
from .augment import (
|
|
21
21
|
Compose,
|
|
@@ -417,7 +417,7 @@ class ClassificationDataset:
|
|
|
417
417
|
import torchvision # scope for faster 'import ultralytics'
|
|
418
418
|
|
|
419
419
|
# Base class assigned as attribute rather than used as base class to allow for scoping slow torchvision import
|
|
420
|
-
if
|
|
420
|
+
if TORCHVISION_0_18: # 'allow_empty' argument first introduced in torchvision 0.18
|
|
421
421
|
self.base = torchvision.datasets.ImageFolder(root=root, allow_empty=True)
|
|
422
422
|
else:
|
|
423
423
|
self.base = torchvision.datasets.ImageFolder(root=root)
|
ultralytics/engine/model.py
CHANGED
|
@@ -311,11 +311,13 @@ class Model(nn.Module):
|
|
|
311
311
|
AssertionError: If the model is not a PyTorch model.
|
|
312
312
|
"""
|
|
313
313
|
self._check_is_pytorch_model()
|
|
314
|
+
from copy import deepcopy
|
|
314
315
|
from datetime import datetime
|
|
315
316
|
|
|
316
317
|
from ultralytics import __version__
|
|
317
318
|
|
|
318
319
|
updates = {
|
|
320
|
+
"model": deepcopy(self.model).half() if isinstance(self.model, nn.Module) else self.model,
|
|
319
321
|
"date": datetime.now().isoformat(),
|
|
320
322
|
"version": __version__,
|
|
321
323
|
"license": "AGPL-3.0 License (https://ultralytics.com/license)",
|
|
@@ -24,7 +24,7 @@ class DistanceCalculation:
|
|
|
24
24
|
Initializes the DistanceCalculation class with the given parameters.
|
|
25
25
|
|
|
26
26
|
Args:
|
|
27
|
-
names (dict): Dictionary
|
|
27
|
+
names (dict): Dictionary of classes names.
|
|
28
28
|
pixels_per_meter (int, optional): Conversion factor from pixels to meters. Defaults to 10.
|
|
29
29
|
view_img (bool, optional): Flag to indicate if the video stream should be displayed. Defaults to False.
|
|
30
30
|
line_thickness (int, optional): Thickness of the lines drawn on the image. Defaults to 2.
|
ultralytics/solutions/heatmap.py
CHANGED
|
@@ -18,7 +18,7 @@ class Heatmap:
|
|
|
18
18
|
|
|
19
19
|
def __init__(
|
|
20
20
|
self,
|
|
21
|
-
|
|
21
|
+
names,
|
|
22
22
|
imw=0,
|
|
23
23
|
imh=0,
|
|
24
24
|
colormap=cv2.COLORMAP_JET,
|
|
@@ -44,7 +44,7 @@ class Heatmap:
|
|
|
44
44
|
self.shape = shape
|
|
45
45
|
|
|
46
46
|
self.initialized = False
|
|
47
|
-
self.names =
|
|
47
|
+
self.names = names # Classes names
|
|
48
48
|
|
|
49
49
|
# Image information
|
|
50
50
|
self.imw = imw
|
|
@@ -17,7 +17,7 @@ class ObjectCounter:
|
|
|
17
17
|
|
|
18
18
|
def __init__(
|
|
19
19
|
self,
|
|
20
|
-
|
|
20
|
+
names,
|
|
21
21
|
reg_pts=None,
|
|
22
22
|
count_reg_color=(255, 0, 255),
|
|
23
23
|
count_txt_color=(0, 0, 0),
|
|
@@ -37,7 +37,7 @@ class ObjectCounter:
|
|
|
37
37
|
Initializes the ObjectCounter with various tracking and counting parameters.
|
|
38
38
|
|
|
39
39
|
Args:
|
|
40
|
-
|
|
40
|
+
names (dict): Dictionary of class names.
|
|
41
41
|
reg_pts (list): List of points defining the counting region.
|
|
42
42
|
count_reg_color (tuple): RGB color of the counting region.
|
|
43
43
|
count_txt_color (tuple): RGB color of the count text.
|
|
@@ -72,7 +72,7 @@ class ObjectCounter:
|
|
|
72
72
|
self.view_in_counts = view_in_counts
|
|
73
73
|
self.view_out_counts = view_out_counts
|
|
74
74
|
|
|
75
|
-
self.names =
|
|
75
|
+
self.names = names # Classes names
|
|
76
76
|
self.annotator = None # Annotator
|
|
77
77
|
self.window_name = "Ultralytics YOLOv8 Object Counter"
|
|
78
78
|
|
|
@@ -17,7 +17,7 @@ class QueueManager:
|
|
|
17
17
|
|
|
18
18
|
def __init__(
|
|
19
19
|
self,
|
|
20
|
-
|
|
20
|
+
names,
|
|
21
21
|
reg_pts=None,
|
|
22
22
|
line_thickness=2,
|
|
23
23
|
track_thickness=2,
|
|
@@ -34,7 +34,7 @@ class QueueManager:
|
|
|
34
34
|
Initializes the QueueManager with specified parameters for tracking and counting objects.
|
|
35
35
|
|
|
36
36
|
Args:
|
|
37
|
-
|
|
37
|
+
names (dict): A dictionary mapping class IDs to class names.
|
|
38
38
|
reg_pts (list of tuples, optional): Points defining the counting region polygon. Defaults to a predefined
|
|
39
39
|
rectangle.
|
|
40
40
|
line_thickness (int, optional): Thickness of the annotation lines. Defaults to 2.
|
|
@@ -69,7 +69,7 @@ class QueueManager:
|
|
|
69
69
|
self.view_queue_counts = view_queue_counts
|
|
70
70
|
self.fontsize = fontsize
|
|
71
71
|
|
|
72
|
-
self.names =
|
|
72
|
+
self.names = names # Class names
|
|
73
73
|
self.annotator = None # Annotator
|
|
74
74
|
self.window_name = "Ultralytics YOLOv8 Queue Manager"
|
|
75
75
|
|
|
@@ -139,7 +139,7 @@ class QueueManager:
|
|
|
139
139
|
|
|
140
140
|
def display_frames(self):
|
|
141
141
|
"""Displays the current frame with annotations."""
|
|
142
|
-
if self.env_check:
|
|
142
|
+
if self.env_check and self.view_img:
|
|
143
143
|
self.annotator.draw_region(reg_pts=self.reg_pts, thickness=self.region_thickness, color=self.region_color)
|
|
144
144
|
cv2.namedWindow(self.window_name)
|
|
145
145
|
cv2.imshow(self.window_name, self.im0)
|
|
@@ -6,6 +6,8 @@ import time
|
|
|
6
6
|
import cv2
|
|
7
7
|
import torch
|
|
8
8
|
|
|
9
|
+
from ultralytics.utils.downloads import GITHUB_ASSETS_STEMS
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
def inference():
|
|
11
13
|
"""Runs real-time object detection on video input using Ultralytics YOLOv8 in a Streamlit application."""
|
|
@@ -65,28 +67,12 @@ def inference():
|
|
|
65
67
|
vid_file_name = 0
|
|
66
68
|
|
|
67
69
|
# Add dropdown menu for model selection
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
"YOLOv8l",
|
|
75
|
-
"YOLOv8x",
|
|
76
|
-
"YOLOv8n-Seg",
|
|
77
|
-
"YOLOv8s-Seg",
|
|
78
|
-
"YOLOv8m-Seg",
|
|
79
|
-
"YOLOv8l-Seg",
|
|
80
|
-
"YOLOv8x-Seg",
|
|
81
|
-
"YOLOv8n-Pose",
|
|
82
|
-
"YOLOv8s-Pose",
|
|
83
|
-
"YOLOv8m-Pose",
|
|
84
|
-
"YOLOv8l-Pose",
|
|
85
|
-
"YOLOv8x-Pose",
|
|
86
|
-
),
|
|
87
|
-
)
|
|
88
|
-
model = YOLO(f"{yolov8_model.lower()}.pt") # Load the yolov8 model
|
|
89
|
-
class_names = list(model.names.values()) # Convert dictionary to list of class names
|
|
70
|
+
available_models = (x.replace("yolo", "YOLO") for x in GITHUB_ASSETS_STEMS if x.startswith("yolov8"))
|
|
71
|
+
selected_model = st.sidebar.selectbox("Model", available_models)
|
|
72
|
+
with st.spinner("Model is downloading..."):
|
|
73
|
+
model = YOLO(f"{selected_model.lower()}.pt") # Load the YOLO model
|
|
74
|
+
class_names = list(model.names.values()) # Convert dictionary to list of class names
|
|
75
|
+
st.success("Model loaded successfully!")
|
|
90
76
|
|
|
91
77
|
# Multiselect box with class names and get indices of selected classes
|
|
92
78
|
selected_classes = st.sidebar.multiselect("Classes", class_names, default=class_names[:3])
|
|
@@ -95,8 +81,9 @@ def inference():
|
|
|
95
81
|
if not isinstance(selected_ind, list): # Ensure selected_options is a list
|
|
96
82
|
selected_ind = list(selected_ind)
|
|
97
83
|
|
|
98
|
-
|
|
99
|
-
|
|
84
|
+
enable_trk = st.sidebar.radio("Enable Tracking", ("Yes", "No"))
|
|
85
|
+
conf = float(st.sidebar.slider("Confidence Threshold", 0.0, 1.0, 0.25, 0.01))
|
|
86
|
+
iou = float(st.sidebar.slider("IoU Threshold", 0.0, 1.0, 0.45, 0.01))
|
|
100
87
|
|
|
101
88
|
col1, col2 = st.columns(2)
|
|
102
89
|
org_frame = col1.empty()
|
|
@@ -124,7 +111,10 @@ def inference():
|
|
|
124
111
|
prev_time = curr_time
|
|
125
112
|
|
|
126
113
|
# Store model predictions
|
|
127
|
-
|
|
114
|
+
if enable_trk:
|
|
115
|
+
results = model.track(frame, conf=conf, iou=iou, classes=selected_ind, persist=True)
|
|
116
|
+
else:
|
|
117
|
+
results = model(frame, conf=conf, iou=iou, classes=selected_ind)
|
|
128
118
|
annotated_frame = results[0].plot() # Add annotations on frame
|
|
129
119
|
|
|
130
120
|
# display frame
|
ultralytics/utils/plotting.py
CHANGED
|
@@ -726,20 +726,18 @@ class Annotator:
|
|
|
726
726
|
)
|
|
727
727
|
cv2.putText(self.im, stage_text, stage_text_position, 0, self.sf, txt_color, self.tf)
|
|
728
728
|
|
|
729
|
-
def seg_bbox(self, mask, mask_color=(255, 0, 255),
|
|
729
|
+
def seg_bbox(self, mask, mask_color=(255, 0, 255), label=None, txt_color=(255, 255, 255)):
|
|
730
730
|
"""
|
|
731
731
|
Function for drawing segmented object in bounding box shape.
|
|
732
732
|
|
|
733
733
|
Args:
|
|
734
734
|
mask (list): masks data list for instance segmentation area plotting
|
|
735
|
-
mask_color (
|
|
736
|
-
|
|
737
|
-
|
|
735
|
+
mask_color (RGB): mask foreground color
|
|
736
|
+
label (str): Detection label text
|
|
737
|
+
txt_color (RGB): text color
|
|
738
738
|
"""
|
|
739
739
|
|
|
740
740
|
cv2.polylines(self.im, [np.int32([mask])], isClosed=True, color=mask_color, thickness=2)
|
|
741
|
-
|
|
742
|
-
label = f"Track ID: {track_label}" if track_label else det_label
|
|
743
741
|
text_size, _ = cv2.getTextSize(label, 0, self.sf, self.tf)
|
|
744
742
|
|
|
745
743
|
cv2.rectangle(
|
|
@@ -750,9 +748,10 @@ class Annotator:
|
|
|
750
748
|
-1,
|
|
751
749
|
)
|
|
752
750
|
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
751
|
+
if label:
|
|
752
|
+
cv2.putText(
|
|
753
|
+
self.im, label, (int(mask[0][0]) - text_size[0] // 2, int(mask[0][1])), 0, self.sf, txt_color, self.tf
|
|
754
|
+
)
|
|
756
755
|
|
|
757
756
|
def plot_distance_and_line(self, distance_m, distance_mm, centroids, line_color, centroid_color):
|
|
758
757
|
"""
|
ultralytics/utils/torch_utils.py
CHANGED
|
@@ -40,6 +40,7 @@ TORCH_2_0 = check_version(torch.__version__, "2.0.0")
|
|
|
40
40
|
TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
|
|
41
41
|
TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
|
|
42
42
|
TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
|
|
43
|
+
TORCHVISION_0_18 = check_version(TORCHVISION_VERSION, "0.18.0")
|
|
43
44
|
|
|
44
45
|
|
|
45
46
|
@contextmanager
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.57
|
|
4
4
|
Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
6
6
|
Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
@@ -7,7 +7,8 @@ tests/test_explorer.py,sha256=NcxSJeB6FxwkN09hQl7nnQL--HjfHB_WcZk0mEmBNHI,2215
|
|
|
7
7
|
tests/test_exports.py,sha256=Uezf3OatpPHlo5qoPw-2kqkZxuMCF9L4XF2riD4vmII,8225
|
|
8
8
|
tests/test_integrations.py,sha256=xglcfMPjfVh346PV8WTpk6tBxraCXEFJEQyyJMr5tyU,6064
|
|
9
9
|
tests/test_python.py,sha256=qhtSQ7NDfBChsVUxeSwfUIkoKq0S1Z-Rd9_MP023Y5k,21794
|
|
10
|
-
|
|
10
|
+
tests/test_solutions.py,sha256=EACnPXbeJe2aVTOKfqMk5jclKKCWCVgFEzjpR6y7Sh8,3304
|
|
11
|
+
ultralytics/__init__.py,sha256=xxc9nMqmuQxnsmyw2hU4F0LM5UJkCIXsBBqzyv-czNE,694
|
|
11
12
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
|
12
13
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
|
13
14
|
ultralytics/cfg/__init__.py,sha256=MqUsV-Mdk80dO64yY7JmplEO0Awb-25Lfx4YC9QYxhc,26210
|
|
@@ -87,7 +88,7 @@ ultralytics/data/augment.py,sha256=V0iyu_9q_mx-G_61sPA1FWt_6ErJY4SnY_W62uxKOqI,5
|
|
|
87
88
|
ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
|
|
88
89
|
ultralytics/data/build.py,sha256=AfMmz0sHIYmwry_90tEJFRk_kz0S3SolScVXqYHiT08,7261
|
|
89
90
|
ultralytics/data/converter.py,sha256=7640xKuf7LPeoTwoCvgbIXM5xbzyq72Hu2Rf2lrgjRY,17554
|
|
90
|
-
ultralytics/data/dataset.py,sha256=
|
|
91
|
+
ultralytics/data/dataset.py,sha256=XrHMe79IQODD51cPGFaeX2MPXZUJzcPI-ywNJe6jMN4,22462
|
|
91
92
|
ultralytics/data/loaders.py,sha256=XnwJsrejnigaG0wwivKccFUxq002czYa4cgVfGzsFms,24078
|
|
92
93
|
ultralytics/data/split_dota.py,sha256=fWezt1Bo3jiZ6AyUWdBtTUuvLamPv1t7JD-DirM9gQ8,10142
|
|
93
94
|
ultralytics/data/utils.py,sha256=GHmqx6e5yRfcUD2Qkwk-tQfhXCwtUMFD3Uf6d699nGo,31046
|
|
@@ -98,7 +99,7 @@ ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2
|
|
|
98
99
|
ultralytics/data/explorer/gui/dash.py,sha256=CPlFIIhf53j_YVAqealsC3AbcztdPqZxfniQcBnlKK4,10042
|
|
99
100
|
ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
100
101
|
ultralytics/engine/exporter.py,sha256=yV5DKjz5DZ6BrW8mOC5Nb5eDcuCc93Ft-RQwJ21xVZs,58729
|
|
101
|
-
ultralytics/engine/model.py,sha256=
|
|
102
|
+
ultralytics/engine/model.py,sha256=OvQsoANg5oyN3k3K-ppa4KrIqPi96hvfGcjqd-TU5l0,39215
|
|
102
103
|
ultralytics/engine/predictor.py,sha256=W58kDCFH2AfoFzpGbos3k8zUEVsLunBuM8sc2B64rPY,17449
|
|
103
104
|
ultralytics/engine/results.py,sha256=5MevvBz0E-cpDf55FqweInlKdcQPb7sz0EgZSROJqw4,35817
|
|
104
105
|
ultralytics/engine/trainer.py,sha256=vFdWN6I-DoAHZYmxjRDeYcc44B9i8tBtK8u6oMgyj9o,35476
|
|
@@ -175,13 +176,13 @@ ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQj
|
|
|
175
176
|
ultralytics/solutions/__init__.py,sha256=O_G9jh34NnFsHKSA8zcJH0CHtg1Q01JEiRWGwX3vGJY,631
|
|
176
177
|
ultralytics/solutions/ai_gym.py,sha256=KQdx0RP9t9y1MqYMVlYUSn09SVJSUwKvgxPri_DhczM,4721
|
|
177
178
|
ultralytics/solutions/analytics.py,sha256=UI8HoegfIJGgvQPOt4-e9A0ss2_ofM7zzxcbKlhe66k,11572
|
|
178
|
-
ultralytics/solutions/distance_calculation.py,sha256=
|
|
179
|
-
ultralytics/solutions/heatmap.py,sha256=
|
|
180
|
-
ultralytics/solutions/object_counter.py,sha256=
|
|
179
|
+
ultralytics/solutions/distance_calculation.py,sha256=dmHxKfC6CNwgS5otN5AF0LkygdZMGbn9UZ06Zrs-hlk,6485
|
|
180
|
+
ultralytics/solutions/heatmap.py,sha256=lPvC9XEbRodOfZSUdF5BlGVMAT9TVpjIyp3Ed_1ssb0,10376
|
|
181
|
+
ultralytics/solutions/object_counter.py,sha256=C80ET_-tIKv7pfshO8DFwimCieBHV4Ns7WruaY0ScgQ,10762
|
|
181
182
|
ultralytics/solutions/parking_management.py,sha256=Bd7FU3WZ8mRBWq81Z5c8jH5WloF4jPKo8TycqU_AcEI,9786
|
|
182
|
-
ultralytics/solutions/queue_management.py,sha256=
|
|
183
|
+
ultralytics/solutions/queue_management.py,sha256=CxFvHwSHq8OZ5aW7x2F10jcjkGAQ3LSJ5z69zusRVbs,6781
|
|
183
184
|
ultralytics/solutions/speed_estimation.py,sha256=kjqMSHGTHMZaNgTKNKWULxnJQNsvhq4WMUphMVlBjsc,6768
|
|
184
|
-
ultralytics/solutions/streamlit_inference.py,sha256=
|
|
185
|
+
ultralytics/solutions/streamlit_inference.py,sha256=_IB4f9qHQPB39NrHUbNNj8vhx1HF7fiecRi0wfdXzPU,5412
|
|
185
186
|
ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
|
|
186
187
|
ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
|
|
187
188
|
ultralytics/trackers/bot_sort.py,sha256=39AvhYVbT7izF3--rX_e6Lhgb5czTA23gw6AgnNcRds,8601
|
|
@@ -204,9 +205,9 @@ ultralytics/utils/loss.py,sha256=tAAi_l0SAtbtqT8AQSBSCvEyv342-r04H2KcSF1Yk_w,337
|
|
|
204
205
|
ultralytics/utils/metrics.py,sha256=C7qFuZjwGqbsG4sggm_qfm8gVuBUwHg_Fhxj08b6NfU,53671
|
|
205
206
|
ultralytics/utils/ops.py,sha256=Jlb0YBkN_SMVT2AjKPEjxgOtgnj7i7HTBh9FEwpoprU,33509
|
|
206
207
|
ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
|
|
207
|
-
ultralytics/utils/plotting.py,sha256=
|
|
208
|
+
ultralytics/utils/plotting.py,sha256=5HRfiG2dklWZJheTxGTy0gFRk39utHcZbMJl7j2hnMI,55522
|
|
208
209
|
ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
|
|
209
|
-
ultralytics/utils/torch_utils.py,sha256=
|
|
210
|
+
ultralytics/utils/torch_utils.py,sha256=8B-NJKGysxUKbstHJfrpnT9Kgp3Imb4jIYWyFYKkrwM,27892
|
|
210
211
|
ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
|
|
211
212
|
ultralytics/utils/tuner.py,sha256=49KAadKZsUeCpwIm5Sn0grb0RPcMNI8vHGLwroDEJNI,6171
|
|
212
213
|
ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
|
|
@@ -220,9 +221,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
|
|
|
220
221
|
ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
|
|
221
222
|
ultralytics/utils/callbacks/tensorboard.py,sha256=QEgOVhUqY9akOs5TJIwz1Rvn6l32xWLpOxlwEyWF0B8,4136
|
|
222
223
|
ultralytics/utils/callbacks/wb.py,sha256=9-fjQIdLjr3b73DTE3rHO171KvbH1VweJ-bmbv-rqTw,6747
|
|
223
|
-
ultralytics-8.2.
|
|
224
|
-
ultralytics-8.2.
|
|
225
|
-
ultralytics-8.2.
|
|
226
|
-
ultralytics-8.2.
|
|
227
|
-
ultralytics-8.2.
|
|
228
|
-
ultralytics-8.2.
|
|
224
|
+
ultralytics-8.2.57.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
225
|
+
ultralytics-8.2.57.dist-info/METADATA,sha256=fIBO5P9-jTY-g2D8Ko5BoagltvtoYeUgekd0SapcYW8,41217
|
|
226
|
+
ultralytics-8.2.57.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
|
|
227
|
+
ultralytics-8.2.57.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
228
|
+
ultralytics-8.2.57.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
229
|
+
ultralytics-8.2.57.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|