ultralytics 8.2.17__py3-none-any.whl → 8.2.19__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.

@@ -11,73 +11,52 @@ from ultralytics.utils.plotting import Annotator, colors
11
11
 
12
12
 
13
13
  class SpeedEstimator:
14
- """A class to estimation speed of objects in real-time video stream based on their tracks."""
14
+ """A class to estimate the speed of objects in a real-time video stream based on their tracks."""
15
15
 
16
- def __init__(self):
17
- """Initializes the speed-estimator class with default values for Visual, Image, track and speed parameters."""
16
+ def __init__(self, names, reg_pts=None, view_img=False, line_thickness=2, region_thickness=5, spdl_dist_thresh=10):
17
+ """
18
+ Initializes the SpeedEstimator with the given parameters.
18
19
 
19
- # Visual & im0 information
20
+ Args:
21
+ names (dict): Dictionary of class names.
22
+ reg_pts (list, optional): List of region points for speed estimation. Defaults to [(20, 400), (1260, 400)].
23
+ view_img (bool, optional): Whether to display the image with annotations. Defaults to False.
24
+ line_thickness (int, optional): Thickness of the lines for drawing boxes and tracks. Defaults to 2.
25
+ region_thickness (int, optional): Thickness of the region lines. Defaults to 5.
26
+ spdl_dist_thresh (int, optional): Distance threshold for speed calculation. Defaults to 10.
27
+ """
28
+ # Visual & image information
20
29
  self.im0 = None
21
30
  self.annotator = None
22
- self.view_img = False
31
+ self.view_img = view_img
23
32
 
24
33
  # Region information
25
- self.reg_pts = [(20, 400), (1260, 400)]
26
- self.region_thickness = 3
34
+ self.reg_pts = reg_pts if reg_pts is not None else [(20, 400), (1260, 400)]
35
+ self.region_thickness = region_thickness
27
36
 
28
- # Predict/track information
37
+ # Tracking information
29
38
  self.clss = None
30
- self.names = None
39
+ self.names = names
31
40
  self.boxes = None
32
41
  self.trk_ids = None
33
42
  self.trk_pts = None
34
- self.line_thickness = 2
43
+ self.line_thickness = line_thickness
35
44
  self.trk_history = defaultdict(list)
36
45
 
37
- # Speed estimator information
46
+ # Speed estimation information
38
47
  self.current_time = 0
39
48
  self.dist_data = {}
40
49
  self.trk_idslist = []
41
- self.spdl_dist_thresh = 10
50
+ self.spdl_dist_thresh = spdl_dist_thresh
42
51
  self.trk_previous_times = {}
43
52
  self.trk_previous_points = {}
44
53
 
45
- # Check if environment support imshow
54
+ # Check if the environment supports imshow
46
55
  self.env_check = check_imshow(warn=True)
47
56
 
48
- def set_args(
49
- self,
50
- reg_pts,
51
- names,
52
- view_img=False,
53
- line_thickness=2,
54
- region_thickness=5,
55
- spdl_dist_thresh=10,
56
- ):
57
- """
58
- Configures the speed estimation and display parameters.
59
-
60
- Args:
61
- reg_pts (list): Initial list of points defining the speed calculation region.
62
- names (dict): object detection classes names
63
- view_img (bool): Flag indicating frame display
64
- line_thickness (int): Line thickness for bounding boxes.
65
- region_thickness (int): Speed estimation region thickness
66
- spdl_dist_thresh (int): Euclidean distance threshold for speed line
67
- """
68
- if reg_pts is None:
69
- print("Region points not provided, using default values")
70
- else:
71
- self.reg_pts = reg_pts
72
- self.names = names
73
- self.view_img = view_img
74
- self.line_thickness = line_thickness
75
- self.region_thickness = region_thickness
76
- self.spdl_dist_thresh = spdl_dist_thresh
77
-
78
57
  def extract_tracks(self, tracks):
79
58
  """
80
- Extracts results from the provided data.
59
+ Extracts results from the provided tracking data.
81
60
 
82
61
  Args:
83
62
  tracks (list): List of tracks obtained from the object tracking process.
@@ -88,11 +67,14 @@ class SpeedEstimator:
88
67
 
89
68
  def store_track_info(self, track_id, box):
90
69
  """
91
- Store track data.
70
+ Stores track data.
92
71
 
93
72
  Args:
94
- track_id (int): object track id.
95
- box (list): object bounding box data
73
+ track_id (int): Object track id.
74
+ box (list): Object bounding box data.
75
+
76
+ Returns:
77
+ (list): Updated tracking history for the given track_id.
96
78
  """
97
79
  track = self.trk_history[track_id]
98
80
  bbox_center = (float((box[0] + box[2]) / 2), float((box[1] + box[3]) / 2))
@@ -106,43 +88,39 @@ class SpeedEstimator:
106
88
 
107
89
  def plot_box_and_track(self, track_id, box, cls, track):
108
90
  """
109
- Plot track and bounding box.
91
+ Plots track and bounding box.
110
92
 
111
93
  Args:
112
- track_id (int): object track id.
113
- box (list): object bounding box data
114
- cls (str): object class name
115
- track (list): tracking history for tracks path drawing
94
+ track_id (int): Object track id.
95
+ box (list): Object bounding box data.
96
+ cls (str): Object class name.
97
+ track (list): Tracking history for drawing tracks path.
116
98
  """
117
- speed_label = f"{int(self.dist_data[track_id])}km/ph" if track_id in self.dist_data else self.names[int(cls)]
99
+ speed_label = f"{int(self.dist_data[track_id])} km/h" if track_id in self.dist_data else self.names[int(cls)]
118
100
  bbox_color = colors(int(track_id)) if track_id in self.dist_data else (255, 0, 255)
119
101
 
120
102
  self.annotator.box_label(box, speed_label, bbox_color)
121
-
122
103
  cv2.polylines(self.im0, [self.trk_pts], isClosed=False, color=(0, 255, 0), thickness=1)
123
104
  cv2.circle(self.im0, (int(track[-1][0]), int(track[-1][1])), 5, bbox_color, -1)
124
105
 
125
106
  def calculate_speed(self, trk_id, track):
126
107
  """
127
- Calculation of object speed.
108
+ Calculates the speed of an object.
128
109
 
129
110
  Args:
130
- trk_id (int): object track id.
131
- track (list): tracking history for tracks path drawing
111
+ trk_id (int): Object track id.
112
+ track (list): Tracking history for drawing tracks path.
132
113
  """
133
-
134
114
  if not self.reg_pts[0][0] < track[-1][0] < self.reg_pts[1][0]:
135
115
  return
136
116
  if self.reg_pts[1][1] - self.spdl_dist_thresh < track[-1][1] < self.reg_pts[1][1] + self.spdl_dist_thresh:
137
117
  direction = "known"
138
-
139
118
  elif self.reg_pts[0][1] - self.spdl_dist_thresh < track[-1][1] < self.reg_pts[0][1] + self.spdl_dist_thresh:
140
119
  direction = "known"
141
-
142
120
  else:
143
121
  direction = "unknown"
144
122
 
145
- if self.trk_previous_times[trk_id] != 0 and direction != "unknown" and trk_id not in self.trk_idslist:
123
+ if self.trk_previous_times.get(trk_id) != 0 and direction != "unknown" and trk_id not in self.trk_idslist:
146
124
  self.trk_idslist.append(trk_id)
147
125
 
148
126
  time_difference = time() - self.trk_previous_times[trk_id]
@@ -156,21 +134,24 @@ class SpeedEstimator:
156
134
 
157
135
  def estimate_speed(self, im0, tracks, region_color=(255, 0, 0)):
158
136
  """
159
- Calculate object based on tracking data.
137
+ Estimates the speed of objects based on tracking data.
160
138
 
161
139
  Args:
162
- im0 (nd array): Image
140
+ im0 (ndarray): Image.
163
141
  tracks (list): List of tracks obtained from the object tracking process.
164
- region_color (tuple): Color to use when drawing regions.
142
+ region_color (tuple, optional): Color to use when drawing regions. Defaults to (255, 0, 0).
143
+
144
+ Returns:
145
+ (ndarray): The image with annotated boxes and tracks.
165
146
  """
166
147
  self.im0 = im0
167
148
  if tracks[0].boxes.id is None:
168
149
  if self.view_img and self.env_check:
169
150
  self.display_frames()
170
151
  return im0
171
- self.extract_tracks(tracks)
172
152
 
173
- self.annotator = Annotator(self.im0, line_width=2)
153
+ self.extract_tracks(tracks)
154
+ self.annotator = Annotator(self.im0, line_width=self.line_thickness)
174
155
  self.annotator.draw_region(reg_pts=self.reg_pts, color=region_color, thickness=self.region_thickness)
175
156
 
176
157
  for box, trk_id, cls in zip(self.boxes, self.trk_ids, self.clss):
@@ -188,11 +169,12 @@ class SpeedEstimator:
188
169
  return im0
189
170
 
190
171
  def display_frames(self):
191
- """Display frame."""
172
+ """Displays the current frame."""
192
173
  cv2.imshow("Ultralytics Speed Estimation", self.im0)
193
174
  if cv2.waitKey(1) & 0xFF == ord("q"):
194
175
  return
195
176
 
196
177
 
197
178
  if __name__ == "__main__":
198
- SpeedEstimator()
179
+ names = {0: "person", 1: "car"} # example class names
180
+ speed_estimator = SpeedEstimator(names)
@@ -378,7 +378,7 @@ class Annotator:
378
378
  cv2.polylines(self.im, [points], isClosed=False, color=color, thickness=track_thickness)
379
379
  cv2.circle(self.im, (int(track[-1][0]), int(track[-1][1])), track_thickness * 2, color, -1)
380
380
 
381
- def queue_counts_display(self, label, points=None, region_color=(255, 255, 255), txt_color=(0, 0, 0), fontsize=0.7):
381
+ def queue_counts_display(self, label, points=None, region_color=(255, 255, 255), txt_color=(0, 0, 0)):
382
382
  """
383
383
  Displays queue counts on an image centered at the points with customizable font size and colors.
384
384
 
@@ -387,14 +387,14 @@ class Annotator:
387
387
  points (tuple): region points for center point calculation to display text
388
388
  region_color (RGB): queue region color
389
389
  txt_color (RGB): text display color
390
- fontsize (float): text fontsize
391
390
  """
391
+
392
392
  x_values = [point[0] for point in points]
393
393
  y_values = [point[1] for point in points]
394
394
  center_x = sum(x_values) // len(points)
395
395
  center_y = sum(y_values) // len(points)
396
396
 
397
- text_size = cv2.getTextSize(label, 0, fontScale=fontsize, thickness=self.tf)[0]
397
+ text_size = cv2.getTextSize(label, 0, fontScale=self.sf, thickness=self.tf)[0]
398
398
  text_width = text_size[0]
399
399
  text_height = text_size[1]
400
400
 
@@ -413,13 +413,12 @@ class Annotator:
413
413
  label,
414
414
  (text_x, text_y),
415
415
  0,
416
- fontScale=fontsize,
416
+ fontScale=self.sf,
417
417
  color=txt_color,
418
418
  thickness=self.tf,
419
419
  lineType=cv2.LINE_AA,
420
420
  )
421
421
 
422
- ### Parking management utils
423
422
  def display_objects_labels(self, im0, text, txt_color, bg_color, x_center, y_center, margin):
424
423
  """
425
424
  Display the bounding boxes labels in parking management app.
@@ -445,7 +444,6 @@ class Annotator:
445
444
  cv2.rectangle(im0, (rect_x1, rect_y1), (rect_x2, rect_y2), bg_color, -1)
446
445
  cv2.putText(im0, text, (text_x, text_y), 0, self.sf, txt_color, self.tf, lineType=cv2.LINE_AA)
447
446
 
448
- # Parking lot and object counting app
449
447
  def display_analytics(self, im0, text, txt_color, bg_color, margin):
450
448
  """
451
449
  Display the overall statistics for parking lots
@@ -459,12 +457,12 @@ class Annotator:
459
457
 
460
458
  horizontal_gap = int(im0.shape[1] * 0.02)
461
459
  vertical_gap = int(im0.shape[0] * 0.01)
462
-
463
460
  text_y_offset = 0
464
-
465
461
  for label, value in text.items():
466
462
  txt = f"{label}: {value}"
467
- text_size = cv2.getTextSize(txt, 0, int(self.sf * 1.5), int(self.tf * 1.5))[0]
463
+ text_size = cv2.getTextSize(txt, 0, self.sf, self.tf)[0]
464
+ if text_size[0] < 5 or text_size[1] < 5:
465
+ text_size = (5, 5)
468
466
  text_x = im0.shape[1] - text_size[0] - margin * 2 - horizontal_gap
469
467
  text_y = text_y_offset + text_size[1] + margin * 2 + vertical_gap
470
468
  rect_x1 = text_x - margin * 2
@@ -472,9 +470,7 @@ class Annotator:
472
470
  rect_x2 = text_x + text_size[0] + margin * 2
473
471
  rect_y2 = text_y + margin * 2
474
472
  cv2.rectangle(im0, (rect_x1, rect_y1), (rect_x2, rect_y2), bg_color, -1)
475
- cv2.putText(
476
- im0, txt, (text_x, text_y), 0, int(self.sf * 1.5), txt_color, int(self.tf * 1.5), lineType=cv2.LINE_AA
477
- )
473
+ cv2.putText(im0, txt, (text_x, text_y), 0, self.sf, txt_color, self.tf, lineType=cv2.LINE_AA)
478
474
  text_y_offset = rect_y2
479
475
 
480
476
  @staticmethod
@@ -518,7 +514,9 @@ class Annotator:
518
514
  cv2.circle(self.im, (int(x_coord), int(y_coord)), radius, (0, 255, 0), -1, lineType=cv2.LINE_AA)
519
515
  return self.im
520
516
 
521
- def plot_angle_and_count_and_stage(self, angle_text, count_text, stage_text, center_kpt, line_thickness=2):
517
+ def plot_angle_and_count_and_stage(
518
+ self, angle_text, count_text, stage_text, center_kpt, color=(104, 31, 17), txt_color=(255, 255, 255)
519
+ ):
522
520
  """
523
521
  Plot the pose angle, count value and step stage.
524
522
 
@@ -527,16 +525,17 @@ class Annotator:
527
525
  count_text (str): counts value for workout monitoring
528
526
  stage_text (str): stage decision for workout monitoring
529
527
  center_kpt (int): centroid pose index for workout monitoring
530
- line_thickness (int): thickness for text display
528
+ color (tuple): text background color for workout monitoring
529
+ txt_color (tuple): text foreground color for workout monitoring
531
530
  """
531
+
532
532
  angle_text, count_text, stage_text = (f" {angle_text:.2f}", f"Steps : {count_text}", f" {stage_text}")
533
- font_scale = 0.6 + (line_thickness / 10.0)
534
533
 
535
534
  # Draw angle
536
- (angle_text_width, angle_text_height), _ = cv2.getTextSize(angle_text, 0, font_scale, line_thickness)
535
+ (angle_text_width, angle_text_height), _ = cv2.getTextSize(angle_text, 0, self.sf, self.tf)
537
536
  angle_text_position = (int(center_kpt[0]), int(center_kpt[1]))
538
537
  angle_background_position = (angle_text_position[0], angle_text_position[1] - angle_text_height - 5)
539
- angle_background_size = (angle_text_width + 2 * 5, angle_text_height + 2 * 5 + (line_thickness * 2))
538
+ angle_background_size = (angle_text_width + 2 * 5, angle_text_height + 2 * 5 + (self.tf * 2))
540
539
  cv2.rectangle(
541
540
  self.im,
542
541
  angle_background_position,
@@ -544,19 +543,19 @@ class Annotator:
544
543
  angle_background_position[0] + angle_background_size[0],
545
544
  angle_background_position[1] + angle_background_size[1],
546
545
  ),
547
- (255, 255, 255),
546
+ color,
548
547
  -1,
549
548
  )
550
- cv2.putText(self.im, angle_text, angle_text_position, 0, font_scale, (0, 0, 0), line_thickness)
549
+ cv2.putText(self.im, angle_text, angle_text_position, 0, self.sf, txt_color, self.tf)
551
550
 
552
551
  # Draw Counts
553
- (count_text_width, count_text_height), _ = cv2.getTextSize(count_text, 0, font_scale, line_thickness)
552
+ (count_text_width, count_text_height), _ = cv2.getTextSize(count_text, 0, self.sf, self.tf)
554
553
  count_text_position = (angle_text_position[0], angle_text_position[1] + angle_text_height + 20)
555
554
  count_background_position = (
556
555
  angle_background_position[0],
557
556
  angle_background_position[1] + angle_background_size[1] + 5,
558
557
  )
559
- count_background_size = (count_text_width + 10, count_text_height + 10 + (line_thickness * 2))
558
+ count_background_size = (count_text_width + 10, count_text_height + 10 + self.tf)
560
559
 
561
560
  cv2.rectangle(
562
561
  self.im,
@@ -565,13 +564,13 @@ class Annotator:
565
564
  count_background_position[0] + count_background_size[0],
566
565
  count_background_position[1] + count_background_size[1],
567
566
  ),
568
- (255, 255, 255),
567
+ color,
569
568
  -1,
570
569
  )
571
- cv2.putText(self.im, count_text, count_text_position, 0, font_scale, (0, 0, 0), line_thickness)
570
+ cv2.putText(self.im, count_text, count_text_position, 0, self.sf, txt_color, self.tf)
572
571
 
573
572
  # Draw Stage
574
- (stage_text_width, stage_text_height), _ = cv2.getTextSize(stage_text, 0, font_scale, line_thickness)
573
+ (stage_text_width, stage_text_height), _ = cv2.getTextSize(stage_text, 0, self.sf, self.tf)
575
574
  stage_text_position = (int(center_kpt[0]), int(center_kpt[1]) + angle_text_height + count_text_height + 40)
576
575
  stage_background_position = (stage_text_position[0], stage_text_position[1] - stage_text_height - 5)
577
576
  stage_background_size = (stage_text_width + 10, stage_text_height + 10)
@@ -583,10 +582,10 @@ class Annotator:
583
582
  stage_background_position[0] + stage_background_size[0],
584
583
  stage_background_position[1] + stage_background_size[1],
585
584
  ),
586
- (255, 255, 255),
585
+ color,
587
586
  -1,
588
587
  )
589
- cv2.putText(self.im, stage_text, stage_text_position, 0, font_scale, (0, 0, 0), line_thickness)
588
+ cv2.putText(self.im, stage_text, stage_text_position, 0, self.sf, txt_color, self.tf)
590
589
 
591
590
  def seg_bbox(self, mask, mask_color=(255, 0, 255), det_label=None, track_label=None):
592
591
  """
@@ -626,29 +625,30 @@ class Annotator:
626
625
  line_color (RGB): Distance line color.
627
626
  centroid_color (RGB): Bounding box centroid color.
628
627
  """
629
- (text_width_m, text_height_m), _ = cv2.getTextSize(f"Distance M: {distance_m:.2f}m", 0, 0.8, 2)
630
- cv2.rectangle(self.im, (15, 25), (15 + text_width_m + 10, 25 + text_height_m + 20), (255, 255, 255), -1)
628
+
629
+ (text_width_m, text_height_m), _ = cv2.getTextSize(f"Distance M: {distance_m:.2f}m", 0, self.sf, self.tf)
630
+ cv2.rectangle(self.im, (15, 25), (15 + text_width_m + 10, 25 + text_height_m + 20), line_color, -1)
631
631
  cv2.putText(
632
632
  self.im,
633
633
  f"Distance M: {distance_m:.2f}m",
634
634
  (20, 50),
635
635
  0,
636
- 0.8,
637
- (0, 0, 0),
638
- 2,
636
+ self.sf,
637
+ centroid_color,
638
+ self.tf,
639
639
  cv2.LINE_AA,
640
640
  )
641
641
 
642
- (text_width_mm, text_height_mm), _ = cv2.getTextSize(f"Distance MM: {distance_mm:.2f}mm", 0, 0.8, 2)
643
- cv2.rectangle(self.im, (15, 75), (15 + text_width_mm + 10, 75 + text_height_mm + 20), (255, 255, 255), -1)
642
+ (text_width_mm, text_height_mm), _ = cv2.getTextSize(f"Distance MM: {distance_mm:.2f}mm", 0, self.sf, self.tf)
643
+ cv2.rectangle(self.im, (15, 75), (15 + text_width_mm + 10, 75 + text_height_mm + 20), line_color, -1)
644
644
  cv2.putText(
645
645
  self.im,
646
646
  f"Distance MM: {distance_mm:.2f}mm",
647
647
  (20, 100),
648
648
  0,
649
- 0.8,
650
- (0, 0, 0),
651
- 2,
649
+ self.sf,
650
+ centroid_color,
651
+ self.tf,
652
652
  cv2.LINE_AA,
653
653
  )
654
654
 
@@ -656,7 +656,7 @@ class Annotator:
656
656
  cv2.circle(self.im, centroids[0], 6, centroid_color, -1)
657
657
  cv2.circle(self.im, centroids[1], 6, centroid_color, -1)
658
658
 
659
- def visioneye(self, box, center_point, color=(235, 219, 11), pin_color=(255, 0, 255), thickness=2, pins_radius=10):
659
+ def visioneye(self, box, center_point, color=(235, 219, 11), pin_color=(255, 0, 255)):
660
660
  """
661
661
  Function for pinpoint human-vision eye mapping and plotting.
662
662
 
@@ -665,13 +665,11 @@ class Annotator:
665
665
  center_point (tuple): center point for vision eye view
666
666
  color (tuple): object centroid and line color value
667
667
  pin_color (tuple): visioneye point color value
668
- thickness (int): int value for line thickness
669
- pins_radius (int): visioneye point radius value
670
668
  """
671
669
  center_bbox = int((box[0] + box[2]) / 2), int((box[1] + box[3]) / 2)
672
- cv2.circle(self.im, center_point, pins_radius, pin_color, -1)
673
- cv2.circle(self.im, center_bbox, pins_radius, color, -1)
674
- cv2.line(self.im, center_point, center_bbox, color, thickness)
670
+ cv2.circle(self.im, center_point, self.tf * 2, pin_color, -1)
671
+ cv2.circle(self.im, center_bbox, self.tf * 2, color, -1)
672
+ cv2.line(self.im, center_point, center_bbox, color, self.tf)
675
673
 
676
674
 
677
675
  @TryExcept() # known issue https://github.com/ultralytics/yolov5/issues/5395
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.17
3
+ Version: 8.2.19
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
@@ -1,4 +1,4 @@
1
- ultralytics/__init__.py,sha256=G0Fr2DYO26jojNMc5L1Cj1hwMNfDIfVIM3BrrbrHY1o,633
1
+ ultralytics/__init__.py,sha256=NObQc9-CGvcpMj8hOJ6v61xO8ImAy6eciiFIiIqfVVA,633
2
2
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
3
3
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
4
4
  ultralytics/cfg/__init__.py,sha256=lR6jykSO_0cigsjrqSyFj_8JG_LvYi796viasyWhcfs,21358
@@ -27,6 +27,7 @@ ultralytics/cfg/datasets/dota8.yaml,sha256=HlwU4tpnUCCn7DQBXYRBGbfARNcALfCCRJnqy
27
27
  ultralytics/cfg/datasets/lvis.yaml,sha256=-pMOD5-00zrvArVTErHrrKA9X8sA9vkRnw-A_Ub762M,29705
28
28
  ultralytics/cfg/datasets/open-images-v7.yaml,sha256=gsN0JXLSdQglio024p6NEegNbX06kJUNuj0bh9oEi-U,12493
29
29
  ultralytics/cfg/datasets/package-seg.yaml,sha256=t6iu8MwulLxLVT2QdeOXz2fcCRcqufGpKOXUjTg2gMA,801
30
+ ultralytics/cfg/datasets/signature.yaml,sha256=lHAS4HsFIhUbIhoBvCQd7T3ADmCfc5QG_wrEvOmq2NA,728
30
31
  ultralytics/cfg/datasets/tiger-pose.yaml,sha256=v2pOOrijTqdFA82nd2Jt-ZOWKNQl_qYgEqSgl4d0xWs,864
31
32
  ultralytics/cfg/datasets/xView.yaml,sha256=rjQPRNk--jlYN9wcVTu1KbopgZIkWXhr_s1UkSdcERs,5217
32
33
  ultralytics/cfg/models/rt-detr/rtdetr-l.yaml,sha256=Nbzi93tAJhBw69hUNBkzXaeMMWwW6tWeAsdN8ynryuU,1934
@@ -56,17 +57,17 @@ ultralytics/cfg/models/v8/yolov8-seg.yaml,sha256=fN85m_aDMCH4oTJ3z-ft98Pdh6dk0pZ
56
57
  ultralytics/cfg/models/v8/yolov8-world.yaml,sha256=RXTp_tgix8dbnVHprapxiK2aax7M2qIfmuR-aAve4sU,2019
57
58
  ultralytics/cfg/models/v8/yolov8-worldv2.yaml,sha256=fvGVUxvlBOjN6LUiiaiGsnjK5ZKjwYGWxgkJ49hGmMg,1956
58
59
  ultralytics/cfg/models/v8/yolov8.yaml,sha256=VjSe_V2Gn9ZpJrwTtz0A6_6IMp6UuugNiR7aEShR5rc,1889
59
- ultralytics/cfg/models/v9/yolov9c-seg.yaml,sha256=N4gKdqTF-oHAOAQnaB03sNbf39mzPmlWAxdqxz73OsU,1271
60
- ultralytics/cfg/models/v9/yolov9c.yaml,sha256=YIEWXY_jN9oieF0AyiNMXsawW4Qb8OoSvaLSX0uZCc4,1256
61
- ultralytics/cfg/models/v9/yolov9e-seg.yaml,sha256=ewM-vKHlv3FyF8AVsTHki-nop56DpRDeozq5v5xtuzw,2212
62
- ultralytics/cfg/models/v9/yolov9e.yaml,sha256=oK9Qj3kdEiug43J2k4YGL-fkxvGwgixB87W3FjBQwfo,2196
60
+ ultralytics/cfg/models/v9/yolov9c-seg.yaml,sha256=526Rv4rjzHT-Vkm1JIhe3E7FEQ5FOCVkKesVd1bsc6k,1251
61
+ ultralytics/cfg/models/v9/yolov9c.yaml,sha256=eya4Dv8YUHcdFpQcqOPLA9f1tdvoNW12erOb5BqqQFY,1236
62
+ ultralytics/cfg/models/v9/yolov9e-seg.yaml,sha256=XOXSAY1Mt7R4qi8TwzrJEYnJ1lSCHjyk5yOIDjYv_a8,2178
63
+ ultralytics/cfg/models/v9/yolov9e.yaml,sha256=BBy8Ghz51gghMDbc0bTbAmYmVuATaFFY2QEpoPCmmZo,2162
63
64
  ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q2KYnVudo,883
64
65
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
65
66
  ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
66
67
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
67
68
  ultralytics/data/augment.py,sha256=OyGg5Ltmhi6sH8ImEiolr6KaiJPPB7bPqqcd3OHo_fQ,57665
68
69
  ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
69
- ultralytics/data/build.py,sha256=D9ov-H1p5Ui72lqWMyLmeD4kN0hIL3LX9t4DoT8tHGY,7270
70
+ ultralytics/data/build.py,sha256=nFdshVSDqU-tY9luH1T-cYnWHEdh9PtxRkwrs2UahMo,7268
70
71
  ultralytics/data/converter.py,sha256=NLDiV67RshbKQnMJUiQQF11boVzEqgi2Hz39nKVAI4U,17528
71
72
  ultralytics/data/dataset.py,sha256=NFaXyHRn64TyTEbtSkr7SkqWXK8bEJl6lZ6M1JwO3MY,22201
72
73
  ultralytics/data/loaders.py,sha256=UxNLLV6rwUDog9MSOkHpDn52TO-X2g2P4a5ZwvB7Ii8,23142
@@ -78,7 +79,7 @@ ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yf
78
79
  ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
79
80
  ultralytics/data/explorer/gui/dash.py,sha256=2oAbNroR2lfS45v53M1sRqZklLXbbj6qXqNxvplulC0,10087
80
81
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
81
- ultralytics/engine/exporter.py,sha256=2troO7ah3gAhHyQ2VCjFvaK9NBc6uleIVft5IRBjeFM,58122
82
+ ultralytics/engine/exporter.py,sha256=n2_2oTirHfdPDoeSD1feRNvWAXZHugo92JB6W0GWeiw,58316
82
83
  ultralytics/engine/model.py,sha256=IE6HE9VIzqO3DscxSLexub0LUR673eiPFrCPCt6ozEE,40103
83
84
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
84
85
  ultralytics/engine/results.py,sha256=1ZY6eXb5uHmDShAXPmXZ-117ZlqeffEZLd2LqFgg8Ik,30975
@@ -153,14 +154,14 @@ ultralytics/nn/modules/conv.py,sha256=Ywe87IhuaS22mR2JJ9xjnW8Sb-m7WTjxuqIxV_Dv8l
153
154
  ultralytics/nn/modules/head.py,sha256=3N_4zW1UvhI1jCrIxIkNYxQDdiW6HxtxpaNAAudq6NU,22236
154
155
  ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
155
156
  ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
156
- ultralytics/solutions/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
157
- ultralytics/solutions/ai_gym.py,sha256=IZHpvmNyEQT_aqMTrA5sIjCsl3_5Zl2WG31HxGT6KV4,5696
158
- ultralytics/solutions/distance_calculation.py,sha256=N1QB5uDG_6sp8jD5uSwp_NTPmyP4UCqJm9G2lNrgpr8,6334
159
- ultralytics/solutions/heatmap.py,sha256=LDY8cpmsenkaWgDmaKuOPMyQcPCH4jQeMvgbZlTx2fc,11970
160
- ultralytics/solutions/object_counter.py,sha256=nYwUN_9M5azW9zET_hnV7wIY8gDNR4LtUoWo4C2cbXw,11287
161
- ultralytics/solutions/parking_management.py,sha256=-AxUfpBoCCMAaYzeYRohCdBvG0Y7bG37Rvz04sO-6NE,9080
162
- ultralytics/solutions/queue_management.py,sha256=TBQ2dIKYtymBjhdw0Enxa22KHyH3IdXf2C-1Se21siA,6684
163
- ultralytics/solutions/speed_estimation.py,sha256=lvaU-F8f3V4KFVKFaNS7isIdYtMSFjh_zF9gl0Mals8,6714
157
+ ultralytics/solutions/__init__.py,sha256=Ogwo0ckEqzULTiRopo6ZeqjBwlHgsg2WYyO_rGARtQA,490
158
+ ultralytics/solutions/ai_gym.py,sha256=xpKBX37VmAjJpSPUfC8w1IQ0wqOcURAeWZ_3LoVrXSs,4639
159
+ ultralytics/solutions/distance_calculation.py,sha256=pSIkyytHGRAaNzIrkkNkiOnSVWU1PYvURlCIV_jRORA,6505
160
+ ultralytics/solutions/heatmap.py,sha256=AHXnmXhoQ95ph74zsdrvX_Lfy3wF0SsH0MIeTixE7Qg,10386
161
+ ultralytics/solutions/object_counter.py,sha256=htcQGWJX1y-vXVV1yUiTDT3sm8ByItjSNfu2Rl2IEmk,10808
162
+ ultralytics/solutions/parking_management.py,sha256=b0ZyIspCULKO0OIYHEi7x2BqMBQR-QPmOxDfcfuU2ho,9696
163
+ ultralytics/solutions/queue_management.py,sha256=ECm6gLZplmE9Cm-zdOazHBBDcW-vvr8nx2M28fcPbts,6787
164
+ ultralytics/solutions/speed_estimation.py,sha256=kjqMSHGTHMZaNgTKNKWULxnJQNsvhq4WMUphMVlBjsc,6768
164
165
  ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
165
166
  ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
166
167
  ultralytics/trackers/bot_sort.py,sha256=39AvhYVbT7izF3--rX_e6Lhgb5czTA23gw6AgnNcRds,8601
@@ -183,7 +184,7 @@ ultralytics/utils/loss.py,sha256=ejXnPEIAzNEoNz2UjW0_fcdeUs9Hy-jPzUrJ3FiIIwE,327
183
184
  ultralytics/utils/metrics.py,sha256=XPD-xP0fchR8KgCuTcihV2-n0EK1cWi3-53BWN_pLuA,53518
184
185
  ultralytics/utils/ops.py,sha256=wZCWx7dm5GJNIJHyZaFJRetGcQ7prdv-anplqq9figQ,33309
185
186
  ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
186
- ultralytics/utils/plotting.py,sha256=ihlGqsBjL23p9ngI0rbjV1Mk10y4p6Z62SlxRORzDaU,48466
187
+ ultralytics/utils/plotting.py,sha256=47mfSDCP7Pt3jT_IlgnIwIH3wcBeSh04lbzep_F2wPc,48207
187
188
  ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
188
189
  ultralytics/utils/torch_utils.py,sha256=6AjQsncSsXZ3Cf_YzxWBeEBbks9s7gvPVpU6-dV3psg,26771
189
190
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
@@ -199,9 +200,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
199
200
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
200
201
  ultralytics/utils/callbacks/tensorboard.py,sha256=Z1veCVcn9THPhdplWuIzwlsW2yF7y-On9IZIk3khM0Y,4135
201
202
  ultralytics/utils/callbacks/wb.py,sha256=DViD0KeXH_i3eVT_CLR4bZFs1TMMUZBVBBYIS3aUfp0,6745
202
- ultralytics-8.2.17.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
203
- ultralytics-8.2.17.dist-info/METADATA,sha256=GcIxwa4tBdg4vIjFyoAMvBvp04FpuhAF3hN8KWHt64o,40694
204
- ultralytics-8.2.17.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
205
- ultralytics-8.2.17.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
206
- ultralytics-8.2.17.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
207
- ultralytics-8.2.17.dist-info/RECORD,,
203
+ ultralytics-8.2.19.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
204
+ ultralytics-8.2.19.dist-info/METADATA,sha256=rclTaqVO3NUEG2sUMvgs2nXlYADCmdzjQqFiqTofyN4,40694
205
+ ultralytics-8.2.19.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
206
+ ultralytics-8.2.19.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
207
+ ultralytics-8.2.19.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
208
+ ultralytics-8.2.19.dist-info/RECORD,,