ultralytics 8.3.29__py3-none-any.whl → 8.3.30__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.
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/__init__.py +3 -0
- ultralytics/engine/results.py +1 -1
- ultralytics/models/yolo/detect/val.py +2 -2
- ultralytics/models/yolo/pose/val.py +2 -2
- ultralytics/models/yolo/segment/val.py +2 -2
- ultralytics/solutions/__init__.py +2 -0
- ultralytics/solutions/analytics.py +1 -1
- ultralytics/solutions/region_counter.py +112 -0
- ultralytics/solutions/solutions.py +2 -0
- ultralytics/utils/tal.py +34 -6
- {ultralytics-8.3.29.dist-info → ultralytics-8.3.30.dist-info}/METADATA +1 -1
- {ultralytics-8.3.29.dist-info → ultralytics-8.3.30.dist-info}/RECORD +17 -16
- {ultralytics-8.3.29.dist-info → ultralytics-8.3.30.dist-info}/WHEEL +1 -1
- {ultralytics-8.3.29.dist-info → ultralytics-8.3.30.dist-info}/LICENSE +0 -0
- {ultralytics-8.3.29.dist-info → ultralytics-8.3.30.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.29.dist-info → ultralytics-8.3.30.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
ultralytics/cfg/__init__.py
CHANGED
@@ -671,6 +671,9 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
671
671
|
)
|
672
672
|
s_n = "count" # Default solution if none provided
|
673
673
|
|
674
|
+
if args and args[0] == "help": # Add check for return if user call `yolo solutions help`
|
675
|
+
return
|
676
|
+
|
674
677
|
cls, method = SOLUTION_MAP[s_n] # solution class name, method name and default source
|
675
678
|
|
676
679
|
from ultralytics import solutions # import ultralytics solutions
|
ultralytics/engine/results.py
CHANGED
@@ -750,7 +750,7 @@ class Results(SimpleClass):
|
|
750
750
|
save_one_box(
|
751
751
|
d.xyxy,
|
752
752
|
self.orig_img.copy(),
|
753
|
-
file=Path(save_dir) / self.names[int(d.cls)] /
|
753
|
+
file=Path(save_dir) / self.names[int(d.cls)] / Path(file_name).with_suffix(".jpg"),
|
754
754
|
BGR=True,
|
755
755
|
)
|
756
756
|
|
@@ -155,8 +155,8 @@ class DetectionValidator(BaseValidator):
|
|
155
155
|
# Evaluate
|
156
156
|
if nl:
|
157
157
|
stat["tp"] = self._process_batch(predn, bbox, cls)
|
158
|
-
|
159
|
-
|
158
|
+
if self.args.plots:
|
159
|
+
self.confusion_matrix.process_batch(predn, bbox, cls)
|
160
160
|
for k in self.stats.keys():
|
161
161
|
self.stats[k].append(stat[k])
|
162
162
|
|
@@ -138,8 +138,8 @@ class PoseValidator(DetectionValidator):
|
|
138
138
|
if nl:
|
139
139
|
stat["tp"] = self._process_batch(predn, bbox, cls)
|
140
140
|
stat["tp_p"] = self._process_batch(predn, bbox, cls, pred_kpts, pbatch["kpts"])
|
141
|
-
|
142
|
-
|
141
|
+
if self.args.plots:
|
142
|
+
self.confusion_matrix.process_batch(predn, bbox, cls)
|
143
143
|
|
144
144
|
for k in self.stats.keys():
|
145
145
|
self.stats[k].append(stat[k])
|
@@ -135,8 +135,8 @@ class SegmentationValidator(DetectionValidator):
|
|
135
135
|
stat["tp_m"] = self._process_batch(
|
136
136
|
predn, bbox, cls, pred_masks, gt_masks, self.args.overlap_mask, masks=True
|
137
137
|
)
|
138
|
-
|
139
|
-
|
138
|
+
if self.args.plots:
|
139
|
+
self.confusion_matrix.process_batch(predn, bbox, cls)
|
140
140
|
|
141
141
|
for k in self.stats.keys():
|
142
142
|
self.stats[k].append(stat[k])
|
@@ -7,6 +7,7 @@ from .heatmap import Heatmap
|
|
7
7
|
from .object_counter import ObjectCounter
|
8
8
|
from .parking_management import ParkingManagement, ParkingPtsSelection
|
9
9
|
from .queue_management import QueueManager
|
10
|
+
from .region_counter import RegionCounter
|
10
11
|
from .speed_estimation import SpeedEstimator
|
11
12
|
from .streamlit_inference import inference
|
12
13
|
|
@@ -21,4 +22,5 @@ __all__ = (
|
|
21
22
|
"SpeedEstimator",
|
22
23
|
"Analytics",
|
23
24
|
"inference",
|
25
|
+
"RegionCounter",
|
24
26
|
)
|
@@ -54,7 +54,7 @@ class Analytics(BaseSolution):
|
|
54
54
|
self.y_label = "Total Counts"
|
55
55
|
|
56
56
|
# Predefined data
|
57
|
-
self.bg_color = "#
|
57
|
+
self.bg_color = "#F3F3F3" # background color of frame
|
58
58
|
self.fg_color = "#111E68" # foreground color of frame
|
59
59
|
self.title = "Ultralytics Solutions" # window name
|
60
60
|
self.max_points = 45 # maximum points to be drawn on window
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
2
|
+
|
3
|
+
from ultralytics.solutions.solutions import BaseSolution
|
4
|
+
from ultralytics.utils.plotting import Annotator, colors
|
5
|
+
|
6
|
+
|
7
|
+
class RegionCounter(BaseSolution):
|
8
|
+
"""
|
9
|
+
A class designed for real-time counting of objects within user-defined regions in a video stream.
|
10
|
+
|
11
|
+
This class inherits from `BaseSolution` and offers functionalities to define polygonal regions in a video
|
12
|
+
frame, track objects, and count those objects that pass through each defined region. This makes it useful
|
13
|
+
for applications that require counting in specified areas, such as monitoring zones or segmented sections.
|
14
|
+
|
15
|
+
Attributes:
|
16
|
+
region_template (dict): A template for creating new counting regions with default attributes including
|
17
|
+
the name, polygon coordinates, and display colors.
|
18
|
+
counting_regions (list): A list storing all defined regions, where each entry is based on `region_template`
|
19
|
+
and includes specific region settings like name, coordinates, and color.
|
20
|
+
|
21
|
+
Methods:
|
22
|
+
add_region: Adds a new counting region with specified attributes, such as the region's name, polygon points,
|
23
|
+
region color, and text color.
|
24
|
+
count: Processes video frames to count objects in each region, drawing regions and displaying counts
|
25
|
+
on the frame. Handles object detection, region definition, and containment checks.
|
26
|
+
"""
|
27
|
+
|
28
|
+
def __init__(self, **kwargs):
|
29
|
+
"""Initializes the RegionCounter class for real-time counting in different regions of the video streams."""
|
30
|
+
super().__init__(**kwargs)
|
31
|
+
self.region_template = {
|
32
|
+
"name": "Default Region",
|
33
|
+
"polygon": None,
|
34
|
+
"counts": 0,
|
35
|
+
"dragging": False,
|
36
|
+
"region_color": (255, 255, 255),
|
37
|
+
"text_color": (0, 0, 0),
|
38
|
+
}
|
39
|
+
self.counting_regions = []
|
40
|
+
|
41
|
+
def add_region(self, name, polygon_points, region_color, text_color):
|
42
|
+
"""
|
43
|
+
Adds a new region to the counting list based on the provided template with specific attributes.
|
44
|
+
|
45
|
+
Args:
|
46
|
+
name (str): Name assigned to the new region.
|
47
|
+
polygon_points (list[tuple]): List of (x, y) coordinates defining the region's polygon.
|
48
|
+
region_color (tuple): BGR color for region visualization.
|
49
|
+
text_color (tuple): BGR color for the text within the region.
|
50
|
+
"""
|
51
|
+
region = self.region_template.copy()
|
52
|
+
region.update(
|
53
|
+
{
|
54
|
+
"name": name,
|
55
|
+
"polygon": self.Polygon(polygon_points),
|
56
|
+
"region_color": region_color,
|
57
|
+
"text_color": text_color,
|
58
|
+
}
|
59
|
+
)
|
60
|
+
self.counting_regions.append(region)
|
61
|
+
|
62
|
+
def count(self, im0):
|
63
|
+
"""
|
64
|
+
Processes the input frame to detect and count objects within each defined region.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
im0 (numpy.ndarray): Input image frame where objects and regions are annotated.
|
68
|
+
|
69
|
+
Returns:
|
70
|
+
im0 (numpy.ndarray): Processed image frame with annotated counting information.
|
71
|
+
"""
|
72
|
+
self.annotator = Annotator(im0, line_width=self.line_width)
|
73
|
+
self.extract_tracks(im0)
|
74
|
+
|
75
|
+
# Region initialization and conversion
|
76
|
+
if self.region is None:
|
77
|
+
self.initialize_region()
|
78
|
+
regions = {"Region#01": self.region}
|
79
|
+
else:
|
80
|
+
regions = self.region if isinstance(self.region, dict) else {"Region#01": self.region}
|
81
|
+
|
82
|
+
# Draw regions and process counts for each defined area
|
83
|
+
for idx, (region_name, reg_pts) in enumerate(regions.items(), start=1):
|
84
|
+
color = colors(idx, True)
|
85
|
+
self.annotator.draw_region(reg_pts=reg_pts, color=color, thickness=self.line_width * 2)
|
86
|
+
self.add_region(region_name, reg_pts, color, self.annotator.get_txt_color())
|
87
|
+
|
88
|
+
# Prepare regions for containment check
|
89
|
+
for region in self.counting_regions:
|
90
|
+
region["prepared_polygon"] = self.prep(region["polygon"])
|
91
|
+
|
92
|
+
# Process bounding boxes and count objects within each region
|
93
|
+
for box, cls in zip(self.boxes, self.clss):
|
94
|
+
self.annotator.box_label(box, label=self.names[cls], color=colors(cls, True))
|
95
|
+
bbox_center = ((box[0] + box[2]) / 2, (box[1] + box[3]) / 2)
|
96
|
+
|
97
|
+
for region in self.counting_regions:
|
98
|
+
if region["prepared_polygon"].contains(self.Point(bbox_center)):
|
99
|
+
region["counts"] += 1
|
100
|
+
|
101
|
+
# Display counts in each region
|
102
|
+
for region in self.counting_regions:
|
103
|
+
self.annotator.text_label(
|
104
|
+
region["polygon"].bounds,
|
105
|
+
label=str(region["counts"]),
|
106
|
+
color=region["region_color"],
|
107
|
+
txt_color=region["text_color"],
|
108
|
+
)
|
109
|
+
region["counts"] = 0 # Reset count for next frame
|
110
|
+
|
111
|
+
self.display_output(im0)
|
112
|
+
return im0
|
@@ -50,10 +50,12 @@ class BaseSolution:
|
|
50
50
|
"""
|
51
51
|
check_requirements("shapely>=2.0.0")
|
52
52
|
from shapely.geometry import LineString, Point, Polygon
|
53
|
+
from shapely.prepared import prep
|
53
54
|
|
54
55
|
self.LineString = LineString
|
55
56
|
self.Polygon = Polygon
|
56
57
|
self.Point = Point
|
58
|
+
self.prep = prep
|
57
59
|
|
58
60
|
# Load config and update with args
|
59
61
|
DEFAULT_SOL_DICT.update(kwargs)
|
ultralytics/utils/tal.py
CHANGED
@@ -58,17 +58,45 @@ class TaskAlignedAssigner(nn.Module):
|
|
58
58
|
"""
|
59
59
|
self.bs = pd_scores.shape[0]
|
60
60
|
self.n_max_boxes = gt_bboxes.shape[1]
|
61
|
+
device = gt_bboxes.device
|
61
62
|
|
62
63
|
if self.n_max_boxes == 0:
|
63
|
-
device = gt_bboxes.device
|
64
64
|
return (
|
65
|
-
torch.full_like(pd_scores[..., 0], self.bg_idx)
|
66
|
-
torch.zeros_like(pd_bboxes)
|
67
|
-
torch.zeros_like(pd_scores)
|
68
|
-
torch.zeros_like(pd_scores[..., 0])
|
69
|
-
torch.zeros_like(pd_scores[..., 0])
|
65
|
+
torch.full_like(pd_scores[..., 0], self.bg_idx),
|
66
|
+
torch.zeros_like(pd_bboxes),
|
67
|
+
torch.zeros_like(pd_scores),
|
68
|
+
torch.zeros_like(pd_scores[..., 0]),
|
69
|
+
torch.zeros_like(pd_scores[..., 0]),
|
70
70
|
)
|
71
71
|
|
72
|
+
try:
|
73
|
+
return self._forward(pd_scores, pd_bboxes, anc_points, gt_labels, gt_bboxes, mask_gt)
|
74
|
+
except torch.OutOfMemoryError:
|
75
|
+
# Move tensors to CPU, compute, then move back to original device
|
76
|
+
cpu_tensors = [t.cpu() for t in (pd_scores, pd_bboxes, anc_points, gt_labels, gt_bboxes, mask_gt)]
|
77
|
+
result = self._forward(*cpu_tensors)
|
78
|
+
return tuple(t.to(device) for t in result)
|
79
|
+
|
80
|
+
def _forward(self, pd_scores, pd_bboxes, anc_points, gt_labels, gt_bboxes, mask_gt):
|
81
|
+
"""
|
82
|
+
Compute the task-aligned assignment. Reference code is available at
|
83
|
+
https://github.com/Nioolek/PPYOLOE_pytorch/blob/master/ppyoloe/assigner/tal_assigner.py.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
pd_scores (Tensor): shape(bs, num_total_anchors, num_classes)
|
87
|
+
pd_bboxes (Tensor): shape(bs, num_total_anchors, 4)
|
88
|
+
anc_points (Tensor): shape(num_total_anchors, 2)
|
89
|
+
gt_labels (Tensor): shape(bs, n_max_boxes, 1)
|
90
|
+
gt_bboxes (Tensor): shape(bs, n_max_boxes, 4)
|
91
|
+
mask_gt (Tensor): shape(bs, n_max_boxes, 1)
|
92
|
+
|
93
|
+
Returns:
|
94
|
+
target_labels (Tensor): shape(bs, num_total_anchors)
|
95
|
+
target_bboxes (Tensor): shape(bs, num_total_anchors, 4)
|
96
|
+
target_scores (Tensor): shape(bs, num_total_anchors, num_classes)
|
97
|
+
fg_mask (Tensor): shape(bs, num_total_anchors)
|
98
|
+
target_gt_idx (Tensor): shape(bs, num_total_anchors)
|
99
|
+
"""
|
72
100
|
mask_pos, align_metric, overlaps = self.get_pos_mask(
|
73
101
|
pd_scores, pd_bboxes, gt_labels, gt_bboxes, anc_points, mask_gt
|
74
102
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.30
|
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>
|
@@ -7,10 +7,10 @@ tests/test_exports.py,sha256=1MvhcQ2qHdbJImHII-bFarcaIcm-kPlEK-OdFLxnj7o,8769
|
|
7
7
|
tests/test_integrations.py,sha256=f5-QCUk1SU_-qn4mBCZwS3GN3tXEBIIXo4z2EhExbHw,6126
|
8
8
|
tests/test_python.py,sha256=I1RRdCwLdrc3jX06huVxct8HX8ccQOmQgVpuEflRl0U,23560
|
9
9
|
tests/test_solutions.py,sha256=sPYhy2d814mIVvojQeVxeZPu0IVy01_Y8zuMcu_9GF0,3790
|
10
|
-
ultralytics/__init__.py,sha256=
|
10
|
+
ultralytics/__init__.py,sha256=rWIiTJOQfPzIOhdWwz2WFyiM9SD4GYuZ2eYzbj6MQYQ,681
|
11
11
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
12
12
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
13
|
-
ultralytics/cfg/__init__.py,sha256=
|
13
|
+
ultralytics/cfg/__init__.py,sha256=ArJow4-pOPN3y6aKOv5KcVXimikI6vAQvQlSRb7IdWE,38743
|
14
14
|
ultralytics/cfg/default.yaml,sha256=jlSdLkFAngX6HvrzJHdZ9kdi-xO7utyLc4X2M3NWhEI,8342
|
15
15
|
ultralytics/cfg/datasets/Argoverse.yaml,sha256=FyeuJT5CHq_9d4hlfAf0kpZlnbUMO0S--UJ1yIqcdKk,3134
|
16
16
|
ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=QVfp_Qp-4rukuicaB4qx86NxSHM8Mrzym8l_fIDo8gw,1195
|
@@ -102,7 +102,7 @@ ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDT
|
|
102
102
|
ultralytics/engine/exporter.py,sha256=DH67LwNDr3fiWxaES-lhSLvm5pCuasXLbQv4FSLCi_M,67171
|
103
103
|
ultralytics/engine/model.py,sha256=TfuTczFjNJ3GW0E_qWVH6OaJ_2I-_Srx7i_4GQebDoo,51472
|
104
104
|
ultralytics/engine/predictor.py,sha256=aS4yJdTK2kYq-TTpzIlWxqnAcBz38zIECZoMb_yOPMY,17597
|
105
|
-
ultralytics/engine/results.py,sha256=
|
105
|
+
ultralytics/engine/results.py,sha256=a1XFZRPwqgKDBOEAibHuT9nP2xefLiWVsMoBJbcr4iA,75058
|
106
106
|
ultralytics/engine/trainer.py,sha256=lbFMLdrdWkk1td6BpUS0_uLhAkiWo-eAmx_Kaov1JPA,37149
|
107
107
|
ultralytics/engine/tuner.py,sha256=WBj8iw1K1TK0hvanlA-wkwmfqh1SI8jEe2dGwUINeTg,11838
|
108
108
|
ultralytics/engine/validator.py,sha256=aWpXE3nrOqaA7jCuUgwxi0FabiGTIXtZvjoJyCX903o,14870
|
@@ -152,7 +152,7 @@ ultralytics/models/yolo/classify/val.py,sha256=Tzizhp3ebzPvwJejrE8tb-TuXw4MdkEI9
|
|
152
152
|
ultralytics/models/yolo/detect/__init__.py,sha256=JR8gZJWn7wMBbh-0j_073nxJVZTMFZVWTOG5Wnvk6w0,229
|
153
153
|
ultralytics/models/yolo/detect/predict.py,sha256=-uZFLutxGYZX47RANcaxC-LFStRbv0nBv_8-ypadQoI,1471
|
154
154
|
ultralytics/models/yolo/detect/train.py,sha256=jayPByykRhJvUeDCN-oZ4M6Yx0rpjAWq9epjJgnHeYA,6363
|
155
|
-
ultralytics/models/yolo/detect/val.py,sha256=
|
155
|
+
ultralytics/models/yolo/detect/val.py,sha256=Ydf0W7FPf-nSz_lOCTcIrlDqhG_kOK8Od6eYsGQDx9U,15144
|
156
156
|
ultralytics/models/yolo/obb/__init__.py,sha256=txWbPGLY1_M7ZwlLQjrwGjTBOlsv9P3yk5ZEgysTinU,193
|
157
157
|
ultralytics/models/yolo/obb/predict.py,sha256=VxpKCKV5dWnOr0GyV1rJGH5SzzRouCYW_8T26xJ8MU8,2037
|
158
158
|
ultralytics/models/yolo/obb/train.py,sha256=_FVYCvHJ5ECi2aN8k7AmVLxRUuun7acSqwWtCBRuL6Q,1473
|
@@ -160,11 +160,11 @@ ultralytics/models/yolo/obb/val.py,sha256=dgKJnGKfdBpYMXsM1_MN2chONd2O6E3hEnITuT
|
|
160
160
|
ultralytics/models/yolo/pose/__init__.py,sha256=OGvxN3LqJot2h8GX1csJ1KErsHnDKsm33Ce6ZBU9Lr4,199
|
161
161
|
ultralytics/models/yolo/pose/predict.py,sha256=cpTe4vTI3etnGCgyMcvxbF0cMNetiWXUwhsipEFX-KQ,2365
|
162
162
|
ultralytics/models/yolo/pose/train.py,sha256=mUC1GaYmRBTvXQsL-uNdcdANoIXdeGGBRdgOKkqRIRI,2926
|
163
|
-
ultralytics/models/yolo/pose/val.py,sha256=
|
163
|
+
ultralytics/models/yolo/pose/val.py,sha256=uAZkNGYvivhpm83y7kgv7cOsgp762kd2GC_8pfQ-Kyk,12382
|
164
164
|
ultralytics/models/yolo/segment/__init__.py,sha256=mSbKOE8BnHL7PL2nCOVG7dRM7CI6hJezFPPwZFjEmy8,247
|
165
165
|
ultralytics/models/yolo/segment/predict.py,sha256=UAzSIc7xlZKr9PVMWS63X4ySUg9QmMh8tHtdfd7D-nk,2468
|
166
166
|
ultralytics/models/yolo/segment/train.py,sha256=UTGGSInq_yuQuNm0wdrVruyiGe04fAZv5v1WMqQl9Ys,2298
|
167
|
-
ultralytics/models/yolo/segment/val.py,sha256=
|
167
|
+
ultralytics/models/yolo/segment/val.py,sha256=LIq3gJTX2VqXwZ3MehBVMXMT-Ga1detezw4h-iwdTao,14052
|
168
168
|
ultralytics/models/yolo/world/__init__.py,sha256=3VTH0q4NOt2EWRom15yCymvmvm0Etp2bmETJUhsVTBI,103
|
169
169
|
ultralytics/models/yolo/world/train.py,sha256=gaDrAmLJpg9qDtmL5evA5HsV2yb4RTRSfk2EDYrHdRg,3686
|
170
170
|
ultralytics/models/yolo/world/train_world.py,sha256=IsnCEVt6DcM9lUskCKmIN-M8MM79xLpwTRqRoAHUnZ4,4857
|
@@ -178,15 +178,16 @@ ultralytics/nn/modules/conv.py,sha256=vOeHZ6Z4sc6-9PrDmRGT1hFkxSBbbWkQm2jRbGGjpq
|
|
178
178
|
ultralytics/nn/modules/head.py,sha256=KCO-qarg2K7uJqQ7L5zVJ4-viiHqmu4bzbSgAw3L_nk,27815
|
179
179
|
ultralytics/nn/modules/transformer.py,sha256=tGiK8NmPfswwW1rbF21r5ILUkkZQ6Nk4s8j16vFBmps,18069
|
180
180
|
ultralytics/nn/modules/utils.py,sha256=a88cKl2wz1nMVSEBiajtvaCbDBQIkESWOKTZ_WAJy90,3195
|
181
|
-
ultralytics/solutions/__init__.py,sha256=
|
181
|
+
ultralytics/solutions/__init__.py,sha256=4i8QCABfxRWPYUEdb58Pbg1xvR_Ra1u-ifB9fx21UUs,711
|
182
182
|
ultralytics/solutions/ai_gym.py,sha256=Jb9Rbd9gOOj2ox4Q5mqalCdvg3RMXA6Cxe5kS18IFgA,5232
|
183
|
-
ultralytics/solutions/analytics.py,sha256=
|
183
|
+
ultralytics/solutions/analytics.py,sha256=C57pIghXeKN8hul8QOV7W9YDMpfFfSfPTBb-lE9HeAc,11535
|
184
184
|
ultralytics/solutions/distance_calculation.py,sha256=KN3CC-dm2dTQylj79IrifCJT8ZhE7hc2EweH3KK31mE,5461
|
185
185
|
ultralytics/solutions/heatmap.py,sha256=If9rosSCmE7pAL1HtVnLkx05gQp6nP1K6HzATMcaEEE,5372
|
186
186
|
ultralytics/solutions/object_counter.py,sha256=vKB7riRm8NjHA6IXyf557FpmV-b0_XoKbXHqMHziXSM,8264
|
187
187
|
ultralytics/solutions/parking_management.py,sha256=1DsEE94eauqcnnFxUYI-BX9eA1GbJVNt7oncj1okYpI,11198
|
188
188
|
ultralytics/solutions/queue_management.py,sha256=D9TqwJSVrZQFxp_M8O62WfBAxkAuDWWnXe7FFmnp7_w,4881
|
189
|
-
ultralytics/solutions/
|
189
|
+
ultralytics/solutions/region_counter.py,sha256=w0c0Sz9XG6rwzr5nA6nb1zFW8IVkTQuatfZNBtOik68,4947
|
190
|
+
ultralytics/solutions/solutions.py,sha256=XEXLQKBWCDdYyZLkmQMyFIqdOEzr4WTfWNajvgjlhmU,7275
|
190
191
|
ultralytics/solutions/speed_estimation.py,sha256=A10DmuZlGkoZUyfHhZWcDRjj1-9GXiDhEjyBbAzfaDs,4936
|
191
192
|
ultralytics/solutions/streamlit_inference.py,sha256=w4dnvSv2FOrpji9W1Ir86phka3OXc7jd_38-OCbQdZw,5701
|
192
193
|
ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
|
@@ -212,7 +213,7 @@ ultralytics/utils/metrics.py,sha256=msPaXc244ndc0NPBhnNlHsKkVhdc-TMgFn5NATlZZVI,
|
|
212
213
|
ultralytics/utils/ops.py,sha256=dsXNdyrYx_p6io6zezig9p84dxS7U-10vceHNVu2IL0,32888
|
213
214
|
ultralytics/utils/patches.py,sha256=J-iOwIRbfUs-inBZerhnXby5tUKjYcOIyvhLTS352JE,3270
|
214
215
|
ultralytics/utils/plotting.py,sha256=TKtdbAOl6gZdFD2hlA5T4LNWfr2LUWbCC-cXkgL1JAU,61089
|
215
|
-
ultralytics/utils/tal.py,sha256=
|
216
|
+
ultralytics/utils/tal.py,sha256=t5sTZwaoglx3pW0P5ootiKFL-AsKZksh3ypHbPTInKE,18354
|
216
217
|
ultralytics/utils/torch_utils.py,sha256=jB03Q-9ajTplxE05CdkmJmpXDUkb4LSiv3S6S2laWII,31608
|
217
218
|
ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
|
218
219
|
ultralytics/utils/tuner.py,sha256=K09-z5k1E4ZriSKoWdwQrJ2PJ2fY1ez3-b2R6aKPTqM,6198
|
@@ -227,9 +228,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=IbGQfEltamUKXJt93uSLQFn8c2rYh3DMTg
|
|
227
228
|
ultralytics/utils/callbacks/raytune.py,sha256=Ck_yFzg7UZXiDWrLHaltjQybzVWSFDfzpdrx9ZYTRfI,700
|
228
229
|
ultralytics/utils/callbacks/tensorboard.py,sha256=SHlE58Fb-sg-uZKtgy-ybIO3SAIfK55aj8kTYGA0Cyg,4167
|
229
230
|
ultralytics/utils/callbacks/wb.py,sha256=oX3JarCJGhzvW556XiEXQNaZblAaK_UETAt3kzkY61w,6869
|
230
|
-
ultralytics-8.3.
|
231
|
-
ultralytics-8.3.
|
232
|
-
ultralytics-8.3.
|
233
|
-
ultralytics-8.3.
|
234
|
-
ultralytics-8.3.
|
235
|
-
ultralytics-8.3.
|
231
|
+
ultralytics-8.3.30.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
232
|
+
ultralytics-8.3.30.dist-info/METADATA,sha256=Sfqm2741qh7purvJHD8A_h1wQs4Gb72aQVH1H1eXg4A,35213
|
233
|
+
ultralytics-8.3.30.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
234
|
+
ultralytics-8.3.30.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
235
|
+
ultralytics-8.3.30.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
236
|
+
ultralytics-8.3.30.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|