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

ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.49"
3
+ __version__ = "8.2.50"
4
4
 
5
5
  import os
6
6
 
@@ -78,10 +78,13 @@ CLI_HELP_MSG = f"""
78
78
  4. Export a YOLOv8n classification model to ONNX format at image size 224 by 128 (no TASK required)
79
79
  yolo export model=yolov8n-cls.pt format=onnx imgsz=224,128
80
80
 
81
- 6. Explore your datasets using semantic search and SQL with a simple GUI powered by Ultralytics Explorer API
81
+ 5. Explore your datasets using semantic search and SQL with a simple GUI powered by Ultralytics Explorer API
82
82
  yolo explorer
83
-
84
- 5. Run special commands:
83
+
84
+ 6. Streamlit real-time object detection on your webcam with Ultralytics YOLOv8
85
+ yolo streamlit-predict
86
+
87
+ 7. Run special commands:
85
88
  yolo help
86
89
  yolo checks
87
90
  yolo version
@@ -514,6 +517,13 @@ def handle_explorer():
514
517
  subprocess.run(["streamlit", "run", ROOT / "data/explorer/gui/dash.py", "--server.maxMessageSize", "2048"])
515
518
 
516
519
 
520
+ def handle_streamlit_inference():
521
+ """Open the Ultralytics Live Inference streamlit app for real time object detection."""
522
+ checks.check_requirements(["streamlit", "opencv-python", "torch"])
523
+ LOGGER.info("💡 Loading Ultralytics Live Inference app...")
524
+ subprocess.run(["streamlit", "run", ROOT / "solutions/streamlit_inference.py", "--server.headless", "true"])
525
+
526
+
517
527
  def parse_key_value_pair(pair):
518
528
  """Parse one 'key=value' pair and return key and value."""
519
529
  k, v = pair.split("=", 1) # split on first '=' sign
@@ -582,6 +592,7 @@ def entrypoint(debug=""):
582
592
  "login": lambda: handle_yolo_hub(args),
583
593
  "copy-cfg": copy_default_cfg,
584
594
  "explorer": lambda: handle_explorer(),
595
+ "streamlit-predict": lambda: handle_streamlit_inference(),
585
596
  }
586
597
  full_args_dict = {**DEFAULT_CFG_DICT, **{k: None for k in TASKS}, **{k: None for k in MODES}, **special}
587
598
 
@@ -686,7 +686,7 @@ class RandomFlip:
686
686
  flip_idx (array-like, optional): Index mapping for flipping keypoints, if any.
687
687
  """
688
688
  assert direction in {"horizontal", "vertical"}, f"Support direction `horizontal` or `vertical`, got {direction}"
689
- assert 0 <= p <= 1.0
689
+ assert 0 <= p <= 1.0, f"The probability should be in range [0, 1], but got {p}."
690
690
 
691
691
  self.p = p
692
692
  self.direction = direction
@@ -1210,7 +1210,7 @@ def classify_transforms(
1210
1210
  import torchvision.transforms as T # scope for faster 'import ultralytics'
1211
1211
 
1212
1212
  if isinstance(size, (tuple, list)):
1213
- assert len(size) == 2
1213
+ assert len(size) == 2, f"'size' tuples must be length 2, not length {len(size)}"
1214
1214
  scale_size = tuple(math.floor(x / crop_fraction) for x in size)
1215
1215
  else:
1216
1216
  scale_size = math.floor(size / crop_fraction)
@@ -1288,7 +1288,7 @@ def classify_augmentations(
1288
1288
  secondary_tfl = []
1289
1289
  disable_color_jitter = False
1290
1290
  if auto_augment:
1291
- assert isinstance(auto_augment, str)
1291
+ assert isinstance(auto_augment, str), f"Provided argument should be string, but got type {type(auto_augment)}"
1292
1292
  # color jitter is typically disabled if AA/RA on,
1293
1293
  # this allows override without breaking old hparm cfgs
1294
1294
  disable_color_jitter = not force_color_jitter
@@ -42,7 +42,7 @@ class BaseTensor(SimpleClass):
42
42
  base_tensor = BaseTensor(data, orig_shape)
43
43
  ```
44
44
  """
45
- assert isinstance(data, (torch.Tensor, np.ndarray))
45
+ assert isinstance(data, (torch.Tensor, np.ndarray)), "data must be torch.Tensor or np.ndarray"
46
46
  self.data = data
47
47
  self.orig_shape = orig_shape
48
48
 
@@ -286,7 +286,7 @@ class FastSAMPrompt:
286
286
  def box_prompt(self, bbox):
287
287
  """Modifies the bounding box properties and calculates IoU between masks and bounding box."""
288
288
  if self.results[0].masks is not None:
289
- assert bbox[2] != 0 and bbox[3] != 0
289
+ assert bbox[2] != 0 and bbox[3] != 0, "Bounding box width and height should not be zero"
290
290
  masks = self.results[0].masks.data
291
291
  target_height, target_width = self.results[0].orig_shape
292
292
  h = masks.shape[1]
@@ -133,7 +133,7 @@ def remove_small_regions(mask: np.ndarray, area_thresh: float, mode: str) -> Tup
133
133
  """Remove small disconnected regions or holes in a mask, returning the mask and a modification indicator."""
134
134
  import cv2 # type: ignore
135
135
 
136
- assert mode in {"holes", "islands"}
136
+ assert mode in {"holes", "islands"}, f"Provided mode {mode} is invalid"
137
137
  correct_holes = mode == "holes"
138
138
  working_mask = (correct_holes ^ mask).astype(np.uint8)
139
139
  n_labels, regions, stats, _ = cv2.connectedComponentsWithStats(working_mask, 8)
@@ -261,7 +261,7 @@ class Attention(torch.nn.Module):
261
261
  """
262
262
  super().__init__()
263
263
 
264
- assert isinstance(resolution, tuple) and len(resolution) == 2
264
+ assert isinstance(resolution, tuple) and len(resolution) == 2, "'resolution' argument not tuple of length 2"
265
265
  self.num_heads = num_heads
266
266
  self.scale = key_dim**-0.5
267
267
  self.key_dim = key_dim
@@ -72,8 +72,8 @@ class WorldTrainerFromScratch(WorldTrainer):
72
72
  """
73
73
  final_data = {}
74
74
  data_yaml = self.args.data
75
- assert data_yaml.get("train", False) # object365.yaml
76
- assert data_yaml.get("val", False) # lvis.yaml
75
+ assert data_yaml.get("train", False), "train dataset not found" # object365.yaml
76
+ assert data_yaml.get("val", False), "validation dataset not found" # lvis.yaml
77
77
  data = {k: [check_det_dataset(d) for d in v.get("yolo_data", [])] for k, v in data_yaml.items()}
78
78
  assert len(data["val"]) == 1, f"Only support validating on 1 dataset for now, but got {len(data['val'])}."
79
79
  val_split = "minival" if "lvis" in data["val"][0]["val"] else "val"
ultralytics/nn/tasks.py CHANGED
@@ -276,7 +276,7 @@ class BaseModel(nn.Module):
276
276
  batch (dict): Batch to compute loss on
277
277
  preds (torch.Tensor | List[torch.Tensor]): Predictions.
278
278
  """
279
- if not hasattr(self, "criterion"):
279
+ if getattr(self, "criterion", None) is None:
280
280
  self.criterion = self.init_criterion()
281
281
 
282
282
  preds = self.forward(batch["img"]) if preds is None else preds
@@ -8,6 +8,7 @@ from .object_counter import ObjectCounter
8
8
  from .parking_management import ParkingManagement, ParkingPtsSelection
9
9
  from .queue_management import QueueManager
10
10
  from .speed_estimation import SpeedEstimator
11
+ from .streamlit_inference import inference
11
12
 
12
13
  __all__ = (
13
14
  "AIGym",
@@ -0,0 +1,154 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ import io
4
+ import time
5
+
6
+ import cv2
7
+ import torch
8
+
9
+
10
+ def inference():
11
+ """Runs real-time object detection on video input using Ultralytics YOLOv8 in a Streamlit application."""
12
+
13
+ # Scope imports for faster ultralytics package load speeds
14
+ import streamlit as st
15
+
16
+ from ultralytics import YOLO
17
+
18
+ # Hide main menu style
19
+ menu_style_cfg = """<style>MainMenu {visibility: hidden;}</style>"""
20
+
21
+ # Main title of streamlit application
22
+ main_title_cfg = """<div><h1 style="color:#FF64DA; text-align:center; font-size:40px;
23
+ font-family: 'Archivo', sans-serif; margin-top:-50px;margin-bottom:20px;">
24
+ Ultralytics YOLOv8 Streamlit Application
25
+ </h1></div>"""
26
+
27
+ # Subtitle of streamlit application
28
+ sub_title_cfg = """<div><h4 style="color:#042AFF; text-align:center;
29
+ font-family: 'Archivo', sans-serif; margin-top:-15px; margin-bottom:50px;">
30
+ Experience real-time object detection on your webcam with the power of Ultralytics YOLOv8! 🚀</h4>
31
+ </div>"""
32
+
33
+ # Set html page configuration
34
+ st.set_page_config(page_title="Ultralytics Streamlit App", layout="wide", initial_sidebar_state="auto")
35
+
36
+ # Append the custom HTML
37
+ st.markdown(menu_style_cfg, unsafe_allow_html=True)
38
+ st.markdown(main_title_cfg, unsafe_allow_html=True)
39
+ st.markdown(sub_title_cfg, unsafe_allow_html=True)
40
+
41
+ # Add ultralytics logo in sidebar
42
+ with st.sidebar:
43
+ logo = "https://raw.githubusercontent.com/ultralytics/assets/main/logo/Ultralytics_Logotype_Original.svg"
44
+ st.image(logo, width=250)
45
+
46
+ # Add elements to vertical setting menu
47
+ st.sidebar.title("User Configuration")
48
+
49
+ # Add video source selection dropdown
50
+ source = st.sidebar.selectbox(
51
+ "Video",
52
+ ("webcam", "video"),
53
+ )
54
+
55
+ vid_file_name = ""
56
+ if source == "video":
57
+ vid_file = st.sidebar.file_uploader("Upload Video File", type=["mp4", "mov", "avi", "mkv"])
58
+ if vid_file is not None:
59
+ g = io.BytesIO(vid_file.read()) # BytesIO Object
60
+ vid_location = "ultralytics.mp4"
61
+ with open(vid_location, "wb") as out: # Open temporary file as bytes
62
+ out.write(g.read()) # Read bytes into file
63
+ vid_file_name = "ultralytics.mp4"
64
+ elif source == "webcam":
65
+ vid_file_name = 0
66
+
67
+ # Add dropdown menu for model selection
68
+ yolov8_model = st.sidebar.selectbox(
69
+ "Model",
70
+ (
71
+ "YOLOv8n",
72
+ "YOLOv8s",
73
+ "YOLOv8m",
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
90
+
91
+ # Multiselect box with class names and get indices of selected classes
92
+ selected_classes = st.sidebar.multiselect("Classes", class_names, default=class_names[:3])
93
+ selected_ind = [class_names.index(option) for option in selected_classes]
94
+
95
+ if not isinstance(selected_ind, list): # Ensure selected_options is a list
96
+ selected_ind = list(selected_ind)
97
+
98
+ conf_thres = st.sidebar.slider("Confidence Threshold", 0.0, 1.0, 0.25, 0.01)
99
+ nms_thres = st.sidebar.slider("NMS Threshold", 0.0, 1.0, 0.45, 0.01)
100
+
101
+ col1, col2 = st.columns(2)
102
+ org_frame = col1.empty()
103
+ ann_frame = col2.empty()
104
+
105
+ fps_display = st.sidebar.empty() # Placeholder for FPS display
106
+
107
+ if st.sidebar.button("Start"):
108
+ videocapture = cv2.VideoCapture(vid_file_name) # Capture the video
109
+
110
+ if not videocapture.isOpened():
111
+ st.error("Could not open webcam.")
112
+
113
+ stop_button = st.button("Stop") # Button to stop the inference
114
+
115
+ prev_time = 0
116
+ while videocapture.isOpened():
117
+ success, frame = videocapture.read()
118
+ if not success:
119
+ st.warning("Failed to read frame from webcam. Please make sure the webcam is connected properly.")
120
+ break
121
+
122
+ curr_time = time.time()
123
+ fps = 1 / (curr_time - prev_time)
124
+ prev_time = curr_time
125
+
126
+ # Store model predictions
127
+ results = model(frame, conf=float(conf_thres), iou=float(nms_thres), classes=selected_ind)
128
+ annotated_frame = results[0].plot() # Add annotations on frame
129
+
130
+ # display frame
131
+ org_frame.image(frame, channels="BGR")
132
+ ann_frame.image(annotated_frame, channels="BGR")
133
+
134
+ if stop_button:
135
+ videocapture.release() # Release the capture
136
+ torch.cuda.empty_cache() # Clear CUDA memory
137
+ st.stop() # Stop streamlit app
138
+
139
+ # Display FPS in sidebar
140
+ fps_display.metric("FPS", f"{fps:.2f}")
141
+
142
+ # Release the capture
143
+ videocapture.release()
144
+
145
+ # Clear CUDA memory
146
+ torch.cuda.empty_cache()
147
+
148
+ # Destroy window
149
+ cv2.destroyAllWindows()
150
+
151
+
152
+ # Main function call
153
+ if __name__ == "__main__":
154
+ inference()
@@ -740,18 +740,18 @@ class Annotator:
740
740
  cv2.polylines(self.im, [np.int32([mask])], isClosed=True, color=mask_color, thickness=2)
741
741
 
742
742
  label = f"Track ID: {track_label}" if track_label else det_label
743
- text_size, _ = cv2.getTextSize(label, 0, 0.7, 1)
743
+ text_size, _ = cv2.getTextSize(label, 0, self.sf, self.tf)
744
744
 
745
745
  cv2.rectangle(
746
746
  self.im,
747
747
  (int(mask[0][0]) - text_size[0] // 2 - 10, int(mask[0][1]) - text_size[1] - 10),
748
- (int(mask[0][0]) + text_size[0] // 2 + 5, int(mask[0][1] + 5)),
748
+ (int(mask[0][0]) + text_size[0] // 2 + 10, int(mask[0][1] + 10)),
749
749
  mask_color,
750
750
  -1,
751
751
  )
752
752
 
753
753
  cv2.putText(
754
- self.im, label, (int(mask[0][0]) - text_size[0] // 2, int(mask[0][1]) - 5), 0, 0.7, (255, 255, 255), 2
754
+ self.im, label, (int(mask[0][0]) - text_size[0] // 2, int(mask[0][1])), 0, self.sf, (255, 255, 255), self.tf
755
755
  )
756
756
 
757
757
  def plot_distance_and_line(self, distance_m, distance_mm, centroids, line_color, centroid_color):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.49
3
+ Version: 8.2.50
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
@@ -55,7 +55,7 @@ Requires-Dist: mkdocs-material >=9.5.9 ; extra == 'dev'
55
55
  Requires-Dist: mkdocstrings[python] ; extra == 'dev'
56
56
  Requires-Dist: mkdocs-jupyter ; extra == 'dev'
57
57
  Requires-Dist: mkdocs-redirects ; extra == 'dev'
58
- Requires-Dist: mkdocs-ultralytics-plugin >=0.0.48 ; extra == 'dev'
58
+ Requires-Dist: mkdocs-ultralytics-plugin >=0.0.49 ; extra == 'dev'
59
59
  Provides-Extra: explorer
60
60
  Requires-Dist: lancedb ; extra == 'explorer'
61
61
  Requires-Dist: duckdb <=0.9.2 ; extra == 'explorer'
@@ -90,10 +90,10 @@ Requires-Dist: dvclive >=2.12.0 ; extra == 'logging'
90
90
 
91
91
  <div>
92
92
  <a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
93
- <a href="https://codecov.io/github/ultralytics/ultralytics"><img src="https://codecov.io/github/ultralytics/ultralytics/branch/main/graph/badge.svg?token=HHW7IIVFVY" alt="Ultralytics Code Coverage"></a>
94
93
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLOv8 Citation"></a>
95
94
  <a href="https://hub.docker.com/r/ultralytics/ultralytics"><img src="https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker" alt="Ultralytics Docker Pulls"></a>
96
95
  <a href="https://ultralytics.com/discord"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
96
+ <a href="https://community.ultralytics.com"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
97
97
  <br>
98
98
  <a href="https://console.paperspace.com/github/ultralytics/ultralytics"><img src="https://assets.paperspace.io/img/gradient-badge.svg" alt="Run Ultralytics on Gradient"></a>
99
99
  <a href="https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open Ultralytics In Colab"></a>
@@ -7,10 +7,10 @@ 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=80Iy-sn3qHBJ5Vg_mRbplj5CbCZNUNvikP4e2f2onnM,21728
10
- ultralytics/__init__.py,sha256=ijX2QpsACNyCzQDWv7jCFB7y7q6X8pF7BiqxWZ0BbZI,694
10
+ ultralytics/__init__.py,sha256=cz3a4wY3FLHMpesIDvftOEzTffv1X5fJlY-ITi7yhpY,694
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=XcIMQd1Nk5OecwjwdBJMNAaDbZV5mLCkZV2YZ7REPbA,25638
13
+ ultralytics/cfg/__init__.py,sha256=MqUsV-Mdk80dO64yY7JmplEO0Awb-25Lfx4YC9QYxhc,26210
14
14
  ultralytics/cfg/default.yaml,sha256=xRKVF-Z9E3imXTU9OCK94kj3jGgYoo67VJQwuYlHiUU,8228
15
15
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=FyeuJT5CHq_9d4hlfAf0kpZlnbUMO0S--UJ1yIqcdKk,3134
16
16
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=YDsyFPI6F6-OQXLBM3hOXo3vADYREwZzmMQfJNdpWyM,1193
@@ -83,7 +83,7 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q
83
83
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
84
84
  ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
85
85
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
86
- ultralytics/data/augment.py,sha256=zekY4Lw_dxsbPpm4jDSr7PYtWwj7iBaRqBcAeeDFDS4,59554
86
+ ultralytics/data/augment.py,sha256=GFvkL5s5KmKpDrJbDftUZqSDbRJpgkJVF5SXgz7gBMk,59747
87
87
  ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
88
88
  ultralytics/data/build.py,sha256=AfMmz0sHIYmwry_90tEJFRk_kz0S3SolScVXqYHiT08,7261
89
89
  ultralytics/data/converter.py,sha256=7640xKuf7LPeoTwoCvgbIXM5xbzyq72Hu2Rf2lrgjRY,17554
@@ -100,7 +100,7 @@ ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDT
100
100
  ultralytics/engine/exporter.py,sha256=csuukmfnqkrcJQx9Z008LrobxhIOYubSj9jkCUHN2do,58557
101
101
  ultralytics/engine/model.py,sha256=8qD5irabp8BF7bBZGwztCu8yAVQQp1kksYSea9EhdEo,39078
102
102
  ultralytics/engine/predictor.py,sha256=W58kDCFH2AfoFzpGbos3k8zUEVsLunBuM8sc2B64rPY,17449
103
- ultralytics/engine/results.py,sha256=I5vFrmtfHS-3N3_P-N_TgAu0GdQ2_1YOSoRhLMdJlf4,35365
103
+ ultralytics/engine/results.py,sha256=APjlY9mG05QbHJb50tLHNG_REBA6pSR4r3bgb2RTHQU,35408
104
104
  ultralytics/engine/trainer.py,sha256=K3I7HWtgt72FH91Wl8La8Wl9zgg4TN-AiYIGGWjKGKw,35447
105
105
  ultralytics/engine/tuner.py,sha256=iZrgMmXSDpfuDu4bdFRflmAsscys2-8W8qAGxSyOVJE,11844
106
106
  ultralytics/engine/validator.py,sha256=Y21Uo8_Zto4qjk_YqQk6k7tyfpq_Qk9cfjeXeyDRxs8,14643
@@ -112,7 +112,7 @@ ultralytics/models/__init__.py,sha256=TT9iLCL_n9Y80dcUq0Fo-p-GRZCSU2vrWXM3CoMwqq
112
112
  ultralytics/models/fastsam/__init__.py,sha256=0dt65jZ_5b7Q-mdXN8MSEkgnFRA0FIwlel_LS2RaOlU,254
113
113
  ultralytics/models/fastsam/model.py,sha256=c7GGwaa9AXssJFwrcuytFHpPOlgSrS3n0utyf4JSL2o,1055
114
114
  ultralytics/models/fastsam/predict.py,sha256=0WHUFrqHUNy1cTNpLKsN0FKqLKCvr7fHU6pp91_QVg0,4121
115
- ultralytics/models/fastsam/prompt.py,sha256=ThrYA1fJiAM2AFdZB7F3j_6p5-QsvphydjowRrIXKOI,15915
115
+ ultralytics/models/fastsam/prompt.py,sha256=_SZumoIYjZA8jML9K2bNY8UX6T5_8MTjw9Hhm_Ozdyo,15967
116
116
  ultralytics/models/fastsam/utils.py,sha256=r-b362Wb7P2ZAlOwWckPJM6HLvg-eFDDz4wkA0ymLd0,2157
117
117
  ultralytics/models/fastsam/val.py,sha256=ILKmw3U8FYmmQsO9wk9-bJ9Pyp_ZthJM36b61L75s3Y,1967
118
118
  ultralytics/models/nas/__init__.py,sha256=d6-WTrYLXvbPs58ebA0-583ODi-VyzXc-t4aGIDQK6M,179
@@ -125,7 +125,7 @@ ultralytics/models/rtdetr/predict.py,sha256=-NFBAv_4VIUcXycO7wA8IH6EHXrVyOir-5PZ
125
125
  ultralytics/models/rtdetr/train.py,sha256=20AFYVW9NPxw0-cp-sRdIovWidFL0IIhJRv2oZjkPlM,3685
126
126
  ultralytics/models/rtdetr/val.py,sha256=4QQArdaGEY8rJsJuvyJ032f8GGVGdV2jURHK2EdMxyk,5566
127
127
  ultralytics/models/sam/__init__.py,sha256=9A1iyfPN_ncqq3TMExe_-uPoARjEX3psoHEI1xMG2VE,144
128
- ultralytics/models/sam/amg.py,sha256=MsKSRS2SieZK_n-m2ICk1QpcYogl5mofcsVa-4FXYvo,7935
128
+ ultralytics/models/sam/amg.py,sha256=He2c4nIoZ__F_pL18rRl278R8iBjWXBM2Z_vxfuVOkk,7971
129
129
  ultralytics/models/sam/build.py,sha256=-i-vj0egQ2idBZUf3Xf-H89QeToM3ky0HTxKP_KEXTs,4944
130
130
  ultralytics/models/sam/model.py,sha256=dkEhqJEZFuSoKubMaAjUx1U9Np49AII3nBScdH8rMBI,4707
131
131
  ultralytics/models/sam/predict.py,sha256=BuSaqMOkpwiM5H5sWOE1CDIwEDkz8uMKV6AMRysCZk4,23614
@@ -133,7 +133,7 @@ ultralytics/models/sam/modules/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz
133
133
  ultralytics/models/sam/modules/decoders.py,sha256=7NWnBNupxGYvH0S1N0R6NBHxdVFRUrrnL9EqAw09J4E,7816
134
134
  ultralytics/models/sam/modules/encoders.py,sha256=pRNZHzt2J2xD_D0Btu8pk4DcItfr6dRr9rcRfxoZZhU,24746
135
135
  ultralytics/models/sam/modules/sam.py,sha256=zC4l4kcrIQD_ekczjl2l6dgaABqqjROZxQ-FDb-itt0,2783
136
- ultralytics/models/sam/modules/tiny_encoder.py,sha256=_fdtgoYcsQKmvit7Ii9iUmL3Zh42IziEswtZZ38JXrk,29181
136
+ ultralytics/models/sam/modules/tiny_encoder.py,sha256=rAY9JuyxUpFivFUUPVjK2aUYlsXEZ0JGKVoEWDGf0Eo,29228
137
137
  ultralytics/models/sam/modules/transformer.py,sha256=VINZMb4xkx4IHAbJdhCq2XLDvaFBMup7RGC16DLS7OY,11164
138
138
  ultralytics/models/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
139
139
  ultralytics/models/utils/loss.py,sha256=PmlKDe4xQTiYkPSCdNUabxJC7bh43zGxiKVIxsXBVGE,15135
@@ -162,17 +162,17 @@ ultralytics/models/yolo/segment/train.py,sha256=aOQpDIptZfKSl9mFa6B-3W3QccMRlmBI
162
162
  ultralytics/models/yolo/segment/val.py,sha256=DxEpR0FaQePlOXb19-FO4G0Nl9rWf9smtAh9eH__2g0,11806
163
163
  ultralytics/models/yolo/world/__init__.py,sha256=3VTH0q4NOt2EWRom15yCymvmvm0Etp2bmETJUhsVTBI,103
164
164
  ultralytics/models/yolo/world/train.py,sha256=acYN2-onL69LrL4av6_hY2r5AY0urC0WViDstn7npfI,3686
165
- ultralytics/models/yolo/world/train_world.py,sha256=n0XTAHYxufHU5OZ_QjpkHieKik-24z0LrYKzWYbCLvA,4798
165
+ ultralytics/models/yolo/world/train_world.py,sha256=IsnCEVt6DcM9lUskCKmIN-M8MM79xLpwTRqRoAHUnZ4,4857
166
166
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
167
167
  ultralytics/nn/autobackend.py,sha256=stqN66L8iloqKxBBYaAespsj2ZoSossouFiFf_Txi0s,31163
168
- ultralytics/nn/tasks.py,sha256=PmSVVDtjFbIZYe-Tb1pd4uhJzr9syl_xWhhURLXRn4E,45827
168
+ ultralytics/nn/tasks.py,sha256=aoQyGuFQ3GbPj42cfZDfkq5m5Q5Ec_045PW20d_-kv8,45837
169
169
  ultralytics/nn/modules/__init__.py,sha256=mARjWk83WPYF5phXhXfPbAu2ZohtdbHdi5zzoxyMubo,2553
170
170
  ultralytics/nn/modules/block.py,sha256=DIXowCZn_Luc5VgGQEGXi34fqeiz_bhaNT48zEzguDM,34491
171
171
  ultralytics/nn/modules/conv.py,sha256=Ywe87IhuaS22mR2JJ9xjnW8Sb-m7WTjxuqIxV_Dv8lI,12722
172
172
  ultralytics/nn/modules/head.py,sha256=6VV6t2OJ_t9fCdhFxzcMcirp6lonv-xSm0o2yFghZZ0,26747
173
173
  ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
174
174
  ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
175
- ultralytics/solutions/__init__.py,sha256=aO9h0JQDfaQR2PCk7yCRxu2odb3Zxu76RdYSv9JPfm8,588
175
+ ultralytics/solutions/__init__.py,sha256=O_G9jh34NnFsHKSA8zcJH0CHtg1Q01JEiRWGwX3vGJY,631
176
176
  ultralytics/solutions/ai_gym.py,sha256=KQdx0RP9t9y1MqYMVlYUSn09SVJSUwKvgxPri_DhczM,4721
177
177
  ultralytics/solutions/analytics.py,sha256=UI8HoegfIJGgvQPOt4-e9A0ss2_ofM7zzxcbKlhe66k,11572
178
178
  ultralytics/solutions/distance_calculation.py,sha256=pSIkyytHGRAaNzIrkkNkiOnSVWU1PYvURlCIV_jRORA,6505
@@ -181,6 +181,7 @@ ultralytics/solutions/object_counter.py,sha256=IR2kvgjlaHuzfq55gtwBiGFJ7dS5-5OCF
181
181
  ultralytics/solutions/parking_management.py,sha256=Bd7FU3WZ8mRBWq81Z5c8jH5WloF4jPKo8TycqU_AcEI,9786
182
182
  ultralytics/solutions/queue_management.py,sha256=ECm6gLZplmE9Cm-zdOazHBBDcW-vvr8nx2M28fcPbts,6787
183
183
  ultralytics/solutions/speed_estimation.py,sha256=kjqMSHGTHMZaNgTKNKWULxnJQNsvhq4WMUphMVlBjsc,6768
184
+ ultralytics/solutions/streamlit_inference.py,sha256=IsQMrwINV1C3YtUDhf3vXboxNNsSY3Awdnids_Nmd8k,5356
184
185
  ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
185
186
  ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
186
187
  ultralytics/trackers/bot_sort.py,sha256=39AvhYVbT7izF3--rX_e6Lhgb5czTA23gw6AgnNcRds,8601
@@ -203,7 +204,7 @@ ultralytics/utils/loss.py,sha256=tAAi_l0SAtbtqT8AQSBSCvEyv342-r04H2KcSF1Yk_w,337
203
204
  ultralytics/utils/metrics.py,sha256=C7qFuZjwGqbsG4sggm_qfm8gVuBUwHg_Fhxj08b6NfU,53671
204
205
  ultralytics/utils/ops.py,sha256=Jlb0YBkN_SMVT2AjKPEjxgOtgnj7i7HTBh9FEwpoprU,33509
205
206
  ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
206
- ultralytics/utils/plotting.py,sha256=Aiu_J5mYGugvZ0WxHMbXftlR9lQh53iGPemHb2RT87k,55533
207
+ ultralytics/utils/plotting.py,sha256=p9IoGCqlXAs5YV28oI7l0KR_4F2sXxDDnd3EuFsLOHw,55551
207
208
  ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
208
209
  ultralytics/utils/torch_utils.py,sha256=uuiXENrjF8a0PydZRfdp3bQ4oQZ9FyERXXfqGyXLCg0,27713
209
210
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
@@ -219,9 +220,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
219
220
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
220
221
  ultralytics/utils/callbacks/tensorboard.py,sha256=QEgOVhUqY9akOs5TJIwz1Rvn6l32xWLpOxlwEyWF0B8,4136
221
222
  ultralytics/utils/callbacks/wb.py,sha256=9-fjQIdLjr3b73DTE3rHO171KvbH1VweJ-bmbv-rqTw,6747
222
- ultralytics-8.2.49.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
223
- ultralytics-8.2.49.dist-info/METADATA,sha256=dh_uPQjZxr7nyIO0lfbYI-qRpf-pyMmx79Z2HePDkMk,41210
224
- ultralytics-8.2.49.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
225
- ultralytics-8.2.49.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
226
- ultralytics-8.2.49.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
227
- ultralytics-8.2.49.dist-info/RECORD,,
223
+ ultralytics-8.2.50.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
224
+ ultralytics-8.2.50.dist-info/METADATA,sha256=G9owtFJbc_lWfEfdwUDmMu44yOF_y4O6l5r1L4vLu-4,41217
225
+ ultralytics-8.2.50.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
226
+ ultralytics-8.2.50.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
227
+ ultralytics-8.2.50.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
228
+ ultralytics-8.2.50.dist-info/RECORD,,