ultralytics 8.3.103__py3-none-any.whl → 8.3.105__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.
tests/test_python.py CHANGED
@@ -199,7 +199,7 @@ def test_track_stream():
199
199
 
200
200
  def test_val():
201
201
  """Test the validation mode of the YOLO model."""
202
- YOLO(MODEL).val(data="coco8.yaml", imgsz=32, save_hybrid=True)
202
+ YOLO(MODEL).val(data="coco8.yaml", imgsz=32)
203
203
 
204
204
 
205
205
  def test_train_scratch():
tests/test_solutions.py CHANGED
@@ -20,7 +20,7 @@ PARKING_VIDEO = "solution_ci_parking_demo.mp4" # only for parking management so
20
20
  PARKING_AREAS_JSON = "solution_ci_parking_areas.json" # only for parking management solution
21
21
  PARKING_MODEL = "solutions_ci_parking_model.pt" # only for parking management solution
22
22
  MODEL_FILE = "yolo11n.pt" # model file used for solutions, except parking management and instance segmentation
23
- REGION = [(20, 400), (1080, 400), (1080, 360), (20, 360)] # for object counting, speed estimation and queue management
23
+ REGION = [(10, 200), (540, 200), (540, 180), (10, 180)] # for object counting, speed estimation and queue management
24
24
 
25
25
  # Test configs for each solution : (name, class, needs_frame_count, video, kwargs)
26
26
  SOLUTIONS = [
ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.103"
3
+ __version__ = "8.3.105"
4
4
 
5
5
  import os
6
6
 
@@ -214,7 +214,6 @@ CFG_BOOL_KEYS = frozenset(
214
214
  "overlap_mask",
215
215
  "val",
216
216
  "save_json",
217
- "save_hybrid",
218
217
  "half",
219
218
  "dnn",
220
219
  "plots",
@@ -437,22 +436,25 @@ def _handle_deprecation(custom: Dict) -> Dict:
437
436
  equivalents. It also handles value conversions where necessary, such as inverting boolean values for
438
437
  'hide_labels' and 'hide_conf'.
439
438
  """
440
- for key in custom.copy().keys():
441
- if key == "boxes":
442
- deprecation_warn(key, "show_boxes")
443
- custom["show_boxes"] = custom.pop("boxes")
444
- if key == "hide_labels":
445
- deprecation_warn(key, "show_labels")
446
- custom["show_labels"] = custom.pop("hide_labels") == "False"
447
- if key == "hide_conf":
448
- deprecation_warn(key, "show_conf")
449
- custom["show_conf"] = custom.pop("hide_conf") == "False"
450
- if key == "line_thickness":
451
- deprecation_warn(key, "line_width")
452
- custom["line_width"] = custom.pop("line_thickness")
453
- if key == "label_smoothing":
454
- deprecation_warn(key)
455
- custom.pop("label_smoothing")
439
+ deprecated_mappings = {
440
+ "boxes": ("show_boxes", lambda v: v),
441
+ "hide_labels": ("show_labels", lambda v: not bool(v)),
442
+ "hide_conf": ("show_conf", lambda v: not bool(v)),
443
+ "line_thickness": ("line_width", lambda v: v),
444
+ }
445
+ removed_keys = {"label_smoothing", "save_hybrid"}
446
+
447
+ for old_key, (new_key, transform) in deprecated_mappings.items():
448
+ if old_key not in custom:
449
+ continue
450
+ deprecation_warn(old_key, new_key)
451
+ custom[new_key] = transform(custom.pop(old_key))
452
+
453
+ for key in removed_keys:
454
+ if key not in custom:
455
+ continue
456
+ deprecation_warn(key)
457
+ custom.pop(key)
456
458
 
457
459
  return custom
458
460
 
@@ -47,7 +47,6 @@ dropout: 0.0 # (float) use dropout regularization (classify train only)
47
47
  val: True # (bool) validate/test during training
48
48
  split: val # (str) dataset split to use for validation, i.e. 'val', 'test' or 'train'
49
49
  save_json: False # (bool) save results to JSON file
50
- save_hybrid: False # (bool) save hybrid version of labels (labels + additional predictions)
51
50
  conf: # (float, optional) object confidence threshold for detection (default 0.25 predict, 0.001 val)
52
51
  iou: 0.7 # (float) intersection over union (IoU) threshold for NMS
53
52
  max_det: 300 # (int) maximum number of detections per image
@@ -282,6 +282,11 @@ class Exporter:
282
282
  dla = self.args.device.split(":")[-1]
283
283
  self.args.device = "0" # update device to "0"
284
284
  assert dla in {"0", "1"}, f"Expected self.args.device='dla:0' or 'dla:1, but got {self.args.device}."
285
+ if imx and self.args.device is None and torch.cuda.is_available():
286
+ LOGGER.warning(
287
+ "WARNING ⚠️ Exporting on CPU while CUDA is available, setting device=0 for faster export on GPU."
288
+ )
289
+ self.args.device = "0" # update device to "0"
285
290
  self.device = select_device("cpu" if self.args.device is None else self.args.device)
286
291
 
287
292
  # Argument compatibility checks
@@ -62,12 +62,6 @@ class DetectionValidator(BaseValidator):
62
62
  self.metrics = DetMetrics(save_dir=self.save_dir)
63
63
  self.iouv = torch.linspace(0.5, 0.95, 10) # IoU vector for mAP@0.5:0.95
64
64
  self.niou = self.iouv.numel()
65
- self.lb = [] # for autolabelling
66
- if self.args.save_hybrid and self.args.task == "detect":
67
- LOGGER.warning(
68
- "WARNING ⚠️ 'save_hybrid=True' will append ground truth to predictions for autolabelling.\n"
69
- "WARNING ⚠️ 'save_hybrid=True' will cause incorrect mAP.\n"
70
- )
71
65
 
72
66
  def preprocess(self, batch):
73
67
  """
@@ -84,15 +78,6 @@ class DetectionValidator(BaseValidator):
84
78
  for k in ["batch_idx", "cls", "bboxes"]:
85
79
  batch[k] = batch[k].to(self.device)
86
80
 
87
- if self.args.save_hybrid and self.args.task == "detect":
88
- height, width = batch["img"].shape[2:]
89
- nb = len(batch["img"])
90
- bboxes = batch["bboxes"] * torch.tensor((width, height, width, height), device=self.device)
91
- self.lb = [
92
- torch.cat([batch["cls"][batch["batch_idx"] == i], bboxes[batch["batch_idx"] == i]], dim=-1)
93
- for i in range(nb)
94
- ]
95
-
96
81
  return batch
97
82
 
98
83
  def init_metrics(self, model):
@@ -139,7 +124,6 @@ class DetectionValidator(BaseValidator):
139
124
  preds,
140
125
  self.args.conf,
141
126
  self.args.iou,
142
- labels=self.lb,
143
127
  nc=self.nc,
144
128
  multi_label=True,
145
129
  agnostic=self.args.single_cls or self.args.agnostic_nms,
@@ -341,7 +341,7 @@ class YOLOE(Model):
341
341
 
342
342
  self.predictor.setup_model(model=self.model)
343
343
 
344
- if refer_image is None and source:
344
+ if refer_image is None and source is not None:
345
345
  dataset = load_inference_source(source)
346
346
  if dataset.mode in {"video", "stream"}:
347
347
  # NOTE: set the first frame as refer image for videos/streams inference
@@ -158,6 +158,10 @@ class YOLOEDetectValidator(DetectionValidator):
158
158
  assert load_vp, "Refer data is only used for visual prompt validation."
159
159
  self.device = select_device(self.args.device)
160
160
 
161
+ if isinstance(model, str):
162
+ from ultralytics.nn.tasks import attempt_load_weights
163
+
164
+ model = attempt_load_weights(model, device=self.device, inplace=True)
161
165
  model.eval().to(self.device)
162
166
  data = check_det_dataset(refer_data or self.args.data)
163
167
  names = [name.split("/")[0] for name in list(data["names"].values())]
@@ -369,8 +369,8 @@ class LRPCHead(nn.Module):
369
369
  if self.enabled:
370
370
  pf_score = self.pf(cls_feat)[0, 0].flatten(0)
371
371
  mask = pf_score.sigmoid() > conf
372
-
373
- cls_feat = self.vocab(cls_feat.flatten(2).transpose(-1, -2)[:, mask])
372
+ cls_feat = cls_feat.flatten(2).transpose(-1, -2)
373
+ cls_feat = self.vocab(cls_feat * mask.unsqueeze(-1).int() if not conf else cls_feat[:, mask])
374
374
  return (self.loc(loc_feat), cls_feat.transpose(-1, -2)), mask
375
375
  else:
376
376
  cls_feat = self.vocab(cls_feat)
@@ -478,7 +478,9 @@ class YOLOEDetect(Detect):
478
478
  cls_feat = self.cv3[i](x[i])
479
479
  loc_feat = self.cv2[i](x[i])
480
480
  assert isinstance(self.lrpc[i], LRPCHead)
481
- x[i], mask = self.lrpc[i](cls_feat, loc_feat, getattr(self, "conf", 0.001))
481
+ x[i], mask = self.lrpc[i](
482
+ cls_feat, loc_feat, 0 if self.export and not self.dynamic else getattr(self, "conf", 0.001)
483
+ )
482
484
  masks.append(mask)
483
485
  shape = x[0][0].shape
484
486
  if self.dynamic or self.shape != shape:
@@ -499,7 +501,7 @@ class YOLOEDetect(Detect):
499
501
  dbox = self.decode_bboxes(self.dfl(box), self.anchors.unsqueeze(0)) * self.strides
500
502
 
501
503
  mask = torch.cat(masks)
502
- y = torch.cat((dbox[:, :, mask], cls.sigmoid()), 1)
504
+ y = torch.cat((dbox if self.export and not self.dynamic else dbox[..., mask], cls.sigmoid()), 1)
503
505
 
504
506
  if return_mask:
505
507
  return (y, mask) if self.export else ((y, x), mask)
@@ -560,7 +562,7 @@ class YOLOESegment(YOLOEDetect):
560
562
  return x, mc, p
561
563
 
562
564
  if has_lrpc:
563
- mc = mc[:, :, mask]
565
+ mc = (mc * mask.int()) if self.export and not self.dynamic else mc[..., mask]
564
566
 
565
567
  return (torch.cat([x, mc], 1), p) if self.export else (torch.cat([x[0], mc], 1), (x[1], mc, p))
566
568
 
@@ -45,6 +45,7 @@ class ObjectCounter(BaseSolution):
45
45
 
46
46
  self.show_in = self.CFG["show_in"]
47
47
  self.show_out = self.CFG["show_out"]
48
+ self.margin = self.line_width * 2 # Scales the background rectangle size to display counts properly
48
49
 
49
50
  def count_objects(self, current_centroid, track_id, prev_position, cls):
50
51
  """
@@ -144,7 +145,7 @@ class ObjectCounter(BaseSolution):
144
145
  if value["IN"] != 0 or value["OUT"] != 0
145
146
  }
146
147
  if labels_dict:
147
- self.annotator.display_analytics(plot_im, labels_dict, (104, 31, 17), (255, 255, 255), 10)
148
+ self.annotator.display_analytics(plot_im, labels_dict, (104, 31, 17), (255, 255, 255), self.margin)
148
149
 
149
150
  def process(self, im0):
150
151
  """
@@ -79,9 +79,7 @@ class BaseSolution:
79
79
  self.LOGGER.info(f"Ultralytics Solutions: ✅ {DEFAULT_SOL_DICT}")
80
80
 
81
81
  self.region = self.CFG["region"] # Store region data for other classes usage
82
- self.line_width = (
83
- self.CFG["line_width"] if self.CFG["line_width"] is not None else 2
84
- ) # Store line_width for usage
82
+ self.line_width = self.CFG["line_width"] if self.CFG["line_width"] not in (None, 0) else 2 # Store line_width
85
83
 
86
84
  # Load Model and store classes names
87
85
  if self.CFG["model"] is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.103
3
+ Version: 8.3.105
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>
@@ -5,13 +5,13 @@ tests/test_cuda.py,sha256=0uvTF4bY_Grsd_Xgtp7TdIEgMpUqKv8_kWA82NYDl_g,6260
5
5
  tests/test_engine.py,sha256=aGqZ8P7QO5C_nOa1b4FOyk92Ysdk5WiP-ST310Vyxys,4962
6
6
  tests/test_exports.py,sha256=dhZn86LdbapW15RthQF870LGxDjC1MUZhlGdBgPmgIQ,9716
7
7
  tests/test_integrations.py,sha256=ZgpddWHEVqiP4bGhVw8fLc2wdz0rCxuxr0FQ2dTgnIE,6067
8
- tests/test_python.py,sha256=Xrxx-Cul4xumA5qDCnduXOA3InfADT3jrtnEh4jpOeY,24638
9
- tests/test_solutions.py,sha256=FrQfIjjFeOf3kLU6-1mC7qOhgEkWFuc5Djc2sf2dQHU,5532
10
- ultralytics/__init__.py,sha256=eLvuHAOilZjuxx9JiZennZVVDKbymiy8fSI1S3uu6lE,730
8
+ tests/test_python.py,sha256=ij0MV87WtbY2WVs0uP41GdVxt_p_M5Rrkldna3M5nXY,24620
9
+ tests/test_solutions.py,sha256=428CUFC-ns0GDRZWt_er1Ma8Kb1jtDgSj3cw3T2HjWE,5530
10
+ ultralytics/__init__.py,sha256=70uClMXEl0zWqRYtxBGmqsXSqZT6XKCKR-m47cxzkGA,730
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=fmoJOyFlUaZFR1dso6I0wS6YXUSMFRh_PmC00_9DOiI,39902
14
- ultralytics/cfg/default.yaml,sha256=tHE_VB_tzq5K1BntCCukmFIViwiRv0R-H6ZNucCnYsY,8469
13
+ ultralytics/cfg/__init__.py,sha256=UCUFiZg-bqJwpuLLaGgy7RvAMxD-nbcVsPLxSo8x3ZA,39821
14
+ ultralytics/cfg/default.yaml,sha256=Ia-t5xMw-GbvYhmEjFSVExZMmWZT44ifMpZic9MsnA8,8377
15
15
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=_xlEDIJ9XkUo0v_iNL7FW079BoSeZtKSuLteKTtGbA8,3275
16
16
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=SHND_CFkojxw5iQD5Mcgju2kCZIl0gW2ajuzv1cqoL0,1224
17
17
  ultralytics/cfg/datasets/DOTAv1.yaml,sha256=j_DvXVQzZ4dQmf8I7oPX4v9xO3WZXztxV4Xo9VhUTsM,1194
@@ -111,7 +111,7 @@ ultralytics/data/loaders.py,sha256=_Gyp_BfGTZwsFdn4UnolXxdU_sAYZLIrv0L2TRI9R5g,2
111
111
  ultralytics/data/split_dota.py,sha256=p8eVGht9tABSVbf9vwvxA_AQYEva3IGHePKlMeNrn64,11872
112
112
  ultralytics/data/utils.py,sha256=aRPwIoLrCML_Kcd0dI9B6c5Ct4dvhdF36rDHtuf7Ww4,33217
113
113
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
114
- ultralytics/engine/exporter.py,sha256=Tt6hfbdyytFVlC5y8lIEdg9UXU3HwIYohsC8vJv8jtw,78052
114
+ ultralytics/engine/exporter.py,sha256=XJYeJYloVPkXyl7-kCzbYt6KqqZPpLz4-BgkUrQFlOc,78346
115
115
  ultralytics/engine/model.py,sha256=YgQKYZrPENSTvLENspg-bXI9FinzzWARfb0U-C9vH-M,52916
116
116
  ultralytics/engine/predictor.py,sha256=fRUh82EJlu_6ZlIy8NFovlCcgX53UbRYSXcLljOs7Sc,21669
117
117
  ultralytics/engine/results.py,sha256=H3pFJhUjYKvVyOUqqZjfIn8vnCpl81aYNOnregMrBoQ,79716
@@ -156,7 +156,7 @@ ultralytics/models/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXp
156
156
  ultralytics/models/utils/loss.py,sha256=nAzhm4oMJqI3-ejAB9jXIHebTd8H_l3a8-NJcIiJEvo,19665
157
157
  ultralytics/models/utils/ops.py,sha256=SuBnwwgUTqByNHpufobGLW72yO2cyfZFi14KAFWSjjw,13613
158
158
  ultralytics/models/yolo/__init__.py,sha256=or0j5xvcM0usMlsFTYhNAOcQUri7reD0cD9JR5b7zDk,307
159
- ultralytics/models/yolo/model.py,sha256=hUFcEFa8_4i3rBvOGUIDTvHvV7POEeq8tNz806KF1NQ,14345
159
+ ultralytics/models/yolo/model.py,sha256=mNsz_eqpMMxpvWgx-OF0StxGNxslIR8LQJ7QQ8DvjKw,14357
160
160
  ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
161
161
  ultralytics/models/yolo/classify/predict.py,sha256=JV9szginTQ9Lpob0FozhKMiEIu1vVaYg4YItuVK2AFM,4081
162
162
  ultralytics/models/yolo/classify/train.py,sha256=fVGzEOtuOj_76tmBP5wBLixUDYyNh07PR8ONLYWmH3U,9711
@@ -164,7 +164,7 @@ ultralytics/models/yolo/classify/val.py,sha256=xk-YwSQdl_oqyCBV0OOAOcXFL6CchebFO
164
164
  ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
165
165
  ultralytics/models/yolo/detect/predict.py,sha256=KZTf2UI7O8ZmPaihqCgsb8IwwchSQTBnO8kAlv8XEMo,4376
166
166
  ultralytics/models/yolo/detect/train.py,sha256=kGsSeek0qbX3tvmGAK2PEOMnNXsGwq3frllpiEdF5Vg,9527
167
- ultralytics/models/yolo/detect/val.py,sha256=gCe9kjYpV6D3BFlyJN8HjoNJDIf-4nSbFSWfyJ12GGA,19256
167
+ ultralytics/models/yolo/detect/val.py,sha256=RxB1ULF13KkWW-_oeDGVYsqobO3n4EWlTY-JwNWC4j0,18449
168
168
  ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
169
169
  ultralytics/models/yolo/obb/predict.py,sha256=L40iamQgTY7VDn0WggG2jeJK8cVUo1qsNuFSbK67ry0,2974
170
170
  ultralytics/models/yolo/obb/train.py,sha256=O1wHMrNXb2EPFQIizynjqu-B-76WyWa6755SMrzayWQ,3438
@@ -184,7 +184,7 @@ ultralytics/models/yolo/yoloe/__init__.py,sha256=Z9QEmbDYABkx15zFILDsFNNz1IyZ5hl
184
184
  ultralytics/models/yolo/yoloe/predict.py,sha256=pjvQ8TKlAe_KIFo70qiNdOrSTITU3pcJ4VE_k7uJjDk,6994
185
185
  ultralytics/models/yolo/yoloe/train.py,sha256=7JxJkMN9bkUGsO-RojFG2Q3yfdKhb-TXlBVJUBG65Qg,17651
186
186
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=JguKB1ez8Rf7XBu_D_mWHMLJto7y7Kr2m0Tq2NwDtwU,5269
187
- ultralytics/models/yolo/yoloe/val.py,sha256=n-wDJprRMqqio6Ndsg_OpjNJQCPy_wIMzPMzecESzjs,8244
187
+ ultralytics/models/yolo/yoloe/val.py,sha256=utdt8wZvvW9OPxO5rx8KsFlkLG0FXj0YMD7Jhyk54D8,8440
188
188
  ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
189
189
  ultralytics/nn/autobackend.py,sha256=Y597hrrvhHlRX5SoOiXJZXj_1ND9kHMn94V2m_saRAU,38871
190
190
  ultralytics/nn/tasks.py,sha256=r9CoXW9owNK5UWH2ufM5cyG3DB5TEEIX-JmhTSECCN8,62991
@@ -193,7 +193,7 @@ ultralytics/nn/modules/__init__.py,sha256=dXLtIk9rt944WfsTdpgEdWOg3HQEHdwQztuZ6W
193
193
  ultralytics/nn/modules/activation.py,sha256=PvXZkA9AzEntR575JkFORdmtcRwATyy0lje-uHA5_8w,2210
194
194
  ultralytics/nn/modules/block.py,sha256=sYk0TV76s8oedhPTB29LmvhkT0H7N1gt30DqWDfX4X0,66641
195
195
  ultralytics/nn/modules/conv.py,sha256=gleKBtHa-c4Fj2kyWmG31XtfuB2srWpfWqHntKCzE3c,21445
196
- ultralytics/nn/modules/head.py,sha256=-fx5p5uj8jM7DkPn9F4RmcfZIL_-vO3Oh864Nb_LRyc,37999
196
+ ultralytics/nn/modules/head.py,sha256=QykXSBLLnp2BUE2xuQIdNXTR-cNaeL4e_aNBMZPD1Dw,38259
197
197
  ultralytics/nn/modules/transformer.py,sha256=tC80QKFaLtWZo0zVNTuORX4pOu6HVs2wS0vSM-3h5W4,28227
198
198
  ultralytics/nn/modules/utils.py,sha256=rn8yTObZGkQoqVzjbZWLaHiytppG4ffjMME4Lw60glM,6092
199
199
  ultralytics/solutions/__init__.py,sha256=pjNYva0qnw-4hf_tTLx_dgIfg24XrYLLp3kygPj95rs,1113
@@ -203,13 +203,13 @@ ultralytics/solutions/distance_calculation.py,sha256=n6bPNJ7YbPKAaHWsra6CQQtrDR0
203
203
  ultralytics/solutions/heatmap.py,sha256=dagbZ0Vn4UdywNyiAypYW5v1uzOWf521QrkzmqyeCEc,5626
204
204
  ultralytics/solutions/instance_segmentation.py,sha256=q8vXQmnoqbiExq3CVYMybkdJ7X2AZWsExUA0--3d_5w,3505
205
205
  ultralytics/solutions/object_blurrer.py,sha256=9Qzs8M3YI--FoWvihMytFdtnhin6gQ0l_uy6CsdoF9U,3896
206
- ultralytics/solutions/object_counter.py,sha256=_5XsW6TwIh7_PK1d8Ny-Xd1a-pqTAzIDV02bHysnJmY,9881
206
+ ultralytics/solutions/object_counter.py,sha256=QXBRBEv_a0uiOYYzsNdu0VAH62rg97v1EiSHy60O1q4,9999
207
207
  ultralytics/solutions/object_cropper.py,sha256=AlIM-RnqFRogAY8JilE0KnbzFMulaIYJGPpn1nFRL5w,3386
208
208
  ultralytics/solutions/parking_management.py,sha256=uojHB17GxzFgzEmCBTEW5XK2h3ONjooW6dHaveWVTcY,13294
209
209
  ultralytics/solutions/queue_management.py,sha256=cUzAMMeWijowkdiuaSUZRr0S3I5MTHkCQOLjOqS0JN0,4299
210
210
  ultralytics/solutions/region_counter.py,sha256=LKZuykgmnevKKzYifyeHQwQroF7tJJIPI6HVXi5mb9M,5299
211
211
  ultralytics/solutions/security_alarm.py,sha256=KLP1R5qAFcmMliHfsuYNS_k-E1vGbOccLrzbmcpp4xQ,6254
212
- ultralytics/solutions/solutions.py,sha256=LROzwtuNnpktuOmVWw82vItT_5mTaQSS_o7ZSi4zwtI,31771
212
+ ultralytics/solutions/solutions.py,sha256=BaNvMA0svTKVgE1sFgnPpBRypHy6mlwqIUXUGzL8aMs,31742
213
213
  ultralytics/solutions/speed_estimation.py,sha256=Ewx389Z8sVL7NTEV7Hc9JbRBR0NMthGiIJk7-gyzD2Q,5149
214
214
  ultralytics/solutions/streamlit_inference.py,sha256=M0ppTFInqSPrdytZBLH8x-XoA7zFc7PaRQ51wHG9ppU,9846
215
215
  ultralytics/solutions/trackzone.py,sha256=05XVTQVCGHFAuFNPzyv0VXKQSJKiyWkU6zkXVo4_dxw,3792
@@ -252,9 +252,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=XXnnKQ-MoLIexl8y2Vb0i-cCLyePE0n5BU
252
252
  ultralytics/utils/callbacks/raytune.py,sha256=omVZNNuzYxsZZXrF9xpbFv7R1Wjdx1j-gv0xXuZrQas,1122
253
253
  ultralytics/utils/callbacks/tensorboard.py,sha256=7eUX21_Ym7i6iN4euZzrqglphyl5xak1yl_-wfFshbg,5502
254
254
  ultralytics/utils/callbacks/wb.py,sha256=iDRFXI4IIDm8R5OI89DMTmjs8aHLo1HRCLkOFKdaMG4,7507
255
- ultralytics-8.3.103.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
256
- ultralytics-8.3.103.dist-info/METADATA,sha256=x_z2b3rRWJiP_P8y0fEjNHXQHwrcDp04hEPb-rxCL8M,37355
257
- ultralytics-8.3.103.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
258
- ultralytics-8.3.103.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
259
- ultralytics-8.3.103.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
260
- ultralytics-8.3.103.dist-info/RECORD,,
255
+ ultralytics-8.3.105.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
256
+ ultralytics-8.3.105.dist-info/METADATA,sha256=HYewTGSUpFpPREiAy_L5PYIA00RbBfj5jbm7miunRc0,37355
257
+ ultralytics-8.3.105.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
258
+ ultralytics-8.3.105.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
259
+ ultralytics-8.3.105.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
260
+ ultralytics-8.3.105.dist-info/RECORD,,