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

@@ -83,6 +83,7 @@ from ultralytics.utils import (
83
83
  WINDOWS,
84
84
  __version__,
85
85
  callbacks,
86
+ checks,
86
87
  colorstr,
87
88
  get_default_args,
88
89
  yaml_save,
@@ -184,6 +185,7 @@ class Exporter:
184
185
  if sum(flags) != 1:
185
186
  raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
186
187
  jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, ncnn = flags # export booleans
188
+ is_tf_format = any((saved_model, pb, tflite, edgetpu, tfjs))
187
189
 
188
190
  # Device
189
191
  if fmt == "engine" and self.args.device is None:
@@ -243,7 +245,7 @@ class Exporter:
243
245
  m.dynamic = self.args.dynamic
244
246
  m.export = True
245
247
  m.format = self.args.format
246
- elif isinstance(m, C2f) and not any((saved_model, pb, tflite, edgetpu, tfjs)):
248
+ elif isinstance(m, C2f) and not is_tf_format:
247
249
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
248
250
  m.forward = m.forward_split
249
251
 
@@ -303,7 +305,7 @@ class Exporter:
303
305
  f[3], _ = self.export_openvino()
304
306
  if coreml: # CoreML
305
307
  f[4], _ = self.export_coreml()
306
- if any((saved_model, pb, tflite, edgetpu, tfjs)): # TensorFlow formats
308
+ if is_tf_format: # TensorFlow formats
307
309
  self.args.int8 |= edgetpu
308
310
  f[5], keras_model = self.export_saved_model()
309
311
  if pb or tfjs: # pb prerequisite to tfjs
@@ -777,11 +779,10 @@ class Exporter:
777
779
  _ = self.cache.write_bytes(cache)
778
780
 
779
781
  # Load dataset w/ builder (for batching) and calibrate
780
- dataset = self.get_int8_calibration_dataloader(prefix)
781
782
  config.int8_calibrator = EngineCalibrator(
782
- dataset=dataset,
783
+ dataset=self.get_int8_calibration_dataloader(prefix),
783
784
  batch=2 * self.args.batch,
784
- cache=self.file.with_suffix(".cache"),
785
+ cache=str(self.file.with_suffix(".cache")),
785
786
  )
786
787
 
787
788
  elif half:
@@ -813,7 +814,7 @@ class Exporter:
813
814
  except ImportError:
814
815
  suffix = "-macos" if MACOS else "-aarch64" if ARM64 else "" if cuda else "-cpu"
815
816
  version = "" if ARM64 else "<=2.13.1"
816
- check_requirements(f"tensorflow{suffix}{version}")
817
+ check_requirements((f"tensorflow{suffix}{version}", "keras"))
817
818
  import tensorflow as tf # noqa
818
819
  if ARM64:
819
820
  check_requirements("cmake") # 'cmake' is needed to build onnxsim on aarch64
@@ -828,8 +829,8 @@ class Exporter:
828
829
  "flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
829
830
  "onnxruntime-gpu" if cuda else "onnxruntime",
830
831
  ),
831
- cmds="--extra-index-url https://pypi.ngc.nvidia.com",
832
- ) # onnx_graphsurgeon only on NVIDIA
832
+ cmds="--extra-index-url https://pypi.ngc.nvidia.com", # onnx_graphsurgeon only on NVIDIA
833
+ )
833
834
 
834
835
  LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...")
835
836
  check_version(
@@ -855,24 +856,17 @@ class Exporter:
855
856
  f_onnx, _ = self.export_onnx()
856
857
 
857
858
  # Export to TF
858
- tmp_file = f / "tmp_tflite_int8_calibration_images.npy" # int8 calibration images file
859
859
  np_data = None
860
860
  if self.args.int8:
861
+ tmp_file = f / "tmp_tflite_int8_calibration_images.npy" # int8 calibration images file
861
862
  verbosity = "info"
862
863
  if self.args.data:
863
- # Generate calibration data for integer quantization
864
- dataloader = self.get_int8_calibration_dataloader(prefix)
865
- images = []
866
- for i, batch in enumerate(dataloader):
867
- if i >= 100: # maximum number of calibration images
868
- break
869
- im = batch["img"].permute(1, 2, 0)[None] # list to nparray, CHW to BHWC
870
- images.append(im)
871
864
  f.mkdir()
865
+ images = [batch["img"].permute(0, 2, 3, 1) for batch in self.get_int8_calibration_dataloader(prefix)]
872
866
  images = torch.cat(images, 0).float()
873
867
  # mean = images.view(-1, 3).mean(0) # imagenet mean [123.675, 116.28, 103.53]
874
868
  # std = images.view(-1, 3).std(0) # imagenet std [58.395, 57.12, 57.375]
875
- np.save(str(tmp_file), images.numpy()) # BHWC
869
+ np.save(str(tmp_file), images.numpy().astype(np.float32)) # BHWC
876
870
  np_data = [["images", tmp_file, [[[[0, 0, 0]]]], [[[[255, 255, 255]]]]]]
877
871
  else:
878
872
  verbosity = "error"
@@ -1017,10 +1011,11 @@ class Exporter:
1017
1011
  """Add metadata to *.tflite models per https://www.tensorflow.org/lite/models/convert/metadata."""
1018
1012
  import flatbuffers
1019
1013
 
1020
- if MACOS: # TFLite Support bug https://github.com/tensorflow/tflite-support/issues/954#issuecomment-2108570845
1014
+ if ARM64:
1021
1015
  from tflite_support import metadata # noqa
1022
1016
  from tflite_support import metadata_schema_py_generated as schema # noqa
1023
1017
  else:
1018
+ # TFLite Support bug https://github.com/tensorflow/tflite-support/issues/954#issuecomment-2108570845
1024
1019
  from tensorflow_lite_support.metadata import metadata_schema_py_generated as schema # noqa
1025
1020
  from tensorflow_lite_support.metadata.python import metadata # noqa
1026
1021
 
@@ -5,7 +5,7 @@ from .analytics import Analytics
5
5
  from .distance_calculation import DistanceCalculation
6
6
  from .heatmap import Heatmap
7
7
  from .object_counter import ObjectCounter
8
- from .parking_management import ParkingManagement
8
+ from .parking_management import ParkingManagement, ParkingPtsSelection
9
9
  from .queue_management import QueueManager
10
10
  from .speed_estimation import SpeedEstimator
11
11
 
@@ -1,3 +1,5 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
1
3
  from itertools import cycle
2
4
 
3
5
  import cv2
@@ -1,3 +1,5 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
1
3
  import json
2
4
  from tkinter import filedialog, messagebox
3
5
 
@@ -10,32 +12,31 @@ from ultralytics.utils.plotting import Annotator
10
12
 
11
13
 
12
14
  class ParkingPtsSelection:
13
- def __init__(self, master):
14
- """
15
- Initializes the UI for selecting parking zone points in a tkinter window.
16
-
17
- Args:
18
- master (tk.Tk): The main tkinter window object.
19
- """
15
+ def __init__(self):
16
+ """Initializes the UI for selecting parking zone points in a tkinter window."""
20
17
  check_requirements("tkinter")
18
+
21
19
  import tkinter as tk
22
20
 
23
- self.master = master
24
- master.title("Ultralytics Parking Zones Points Selector")
21
+ self.tk = tk
22
+ self.master = tk.Tk()
23
+ self.master.title("Ultralytics Parking Zones Points Selector")
25
24
 
26
25
  # Disable window resizing
27
- master.resizable(False, False)
26
+ self.master.resizable(False, False)
28
27
 
29
28
  # Setup canvas for image display
30
- self.canvas = tk.Canvas(master, bg="white")
29
+ self.canvas = self.tk.Canvas(self.master, bg="white")
31
30
 
32
31
  # Setup buttons
33
- button_frame = tk.Frame(master)
34
- button_frame.pack(side=tk.TOP)
32
+ button_frame = self.tk.Frame(self.master)
33
+ button_frame.pack(side=self.tk.TOP)
35
34
 
36
- tk.Button(button_frame, text="Upload Image", command=self.upload_image).grid(row=0, column=0)
37
- tk.Button(button_frame, text="Remove Last BBox", command=self.remove_last_bounding_box).grid(row=0, column=1)
38
- tk.Button(button_frame, text="Save", command=self.save_to_json).grid(row=0, column=2)
35
+ self.tk.Button(button_frame, text="Upload Image", command=self.upload_image).grid(row=0, column=0)
36
+ self.tk.Button(button_frame, text="Remove Last BBox", command=self.remove_last_bounding_box).grid(
37
+ row=0, column=1
38
+ )
39
+ self.tk.Button(button_frame, text="Save", command=self.save_to_json).grid(row=0, column=2)
39
40
 
40
41
  # Initialize properties
41
42
  self.image_path = None
@@ -50,6 +51,8 @@ class ParkingPtsSelection:
50
51
  self.canvas_max_width = 1280
51
52
  self.canvas_max_height = 720
52
53
 
54
+ self.master.mainloop()
55
+
53
56
  def upload_image(self):
54
57
  """Upload an image and resize it to fit canvas."""
55
58
  self.image_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
@@ -74,12 +77,12 @@ class ParkingPtsSelection:
74
77
  if self.canvas:
75
78
  self.canvas.destroy() # Destroy previous canvas
76
79
 
77
- self.canvas = tk.Canvas(self.master, bg="white", width=canvas_width, height=canvas_height)
80
+ self.canvas = self.tk.Canvas(self.master, bg="white", width=canvas_width, height=canvas_height)
78
81
  resized_image = self.image.resize((canvas_width, canvas_height), Image.LANCZOS)
79
82
  self.canvas_image = ImageTk.PhotoImage(resized_image)
80
- self.canvas.create_image(0, 0, anchor=tk.NW, image=self.canvas_image)
83
+ self.canvas.create_image(0, 0, anchor=self.tk.NW, image=self.canvas_image)
81
84
 
82
- self.canvas.pack(side=tk.BOTTOM)
85
+ self.canvas.pack(side=self.tk.BOTTOM)
83
86
  self.canvas.bind("<Button-1>", self.on_canvas_click)
84
87
 
85
88
  # Reset bounding boxes and current box
@@ -115,7 +118,7 @@ class ParkingPtsSelection:
115
118
  if self.bounding_boxes:
116
119
  self.bounding_boxes.pop() # Remove the last bounding box
117
120
  self.canvas.delete("all") # Clear the canvas
118
- self.canvas.create_image(0, 0, anchor=tk.NW, image=self.canvas_image) # Redraw the image
121
+ self.canvas.create_image(0, 0, anchor=self.tk.NW, image=self.canvas_image) # Redraw the image
119
122
 
120
123
  # Redraw all bounding boxes
121
124
  for box in self.bounding_boxes:
@@ -210,6 +213,7 @@ class ParkingManagement:
210
213
  im0 (ndarray): inference image
211
214
  boxes (list): bounding boxes data
212
215
  clss (list): bounding boxes classes list
216
+
213
217
  Returns:
214
218
  filled_slots (int): total slots that are filled in parking lot
215
219
  empty_slots (int): total slots that are available in parking lot
@@ -23,7 +23,6 @@ from ultralytics.utils import (
23
23
  ASSETS,
24
24
  AUTOINSTALL,
25
25
  IS_COLAB,
26
- IS_DOCKER,
27
26
  IS_JUPYTER,
28
27
  IS_KAGGLE,
29
28
  IS_PIP_PACKAGE,
@@ -322,17 +321,18 @@ def check_font(font="Arial.ttf"):
322
321
  return file
323
322
 
324
323
 
325
- def check_python(minimum: str = "3.8.0") -> bool:
324
+ def check_python(minimum: str = "3.8.0", hard: bool = True) -> bool:
326
325
  """
327
326
  Check current python version against the required minimum version.
328
327
 
329
328
  Args:
330
329
  minimum (str): Required minimum version of python.
330
+ hard (bool, optional): If True, raise an AssertionError if the requirement is not met.
331
331
 
332
332
  Returns:
333
333
  (bool): Whether the installed Python version meets the minimum constraints.
334
334
  """
335
- return check_version(PYTHON_VERSION, minimum, name="Python ", hard=True)
335
+ return check_version(PYTHON_VERSION, minimum, name="Python", hard=hard)
336
336
 
337
337
 
338
338
  @TryExcept()
@@ -735,4 +735,5 @@ def cuda_is_available() -> bool:
735
735
 
736
736
 
737
737
  # Define constants
738
+ IS_PYTHON_MINIMUM_3_10 = check_python("3.10", hard=False)
738
739
  IS_PYTHON_3_12 = PYTHON_VERSION.startswith("3.12")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.20
3
+ Version: 8.2.22
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,13 @@
1
- ultralytics/__init__.py,sha256=Pa8IO0eX0nMRjtR4BmzIZv_TbcZuYhojgEsSM8qUg1s,633
1
+ tests/__init__.py,sha256=9evx3lOdKZeY1iWXvH-FkMkgf8jLucWICoabzeD6aYg,626
2
+ tests/conftest.py,sha256=WOrMDmrxdYskt1nQmbPPhZ6zo1cJzS4vO7gVcKuEo2k,2545
3
+ tests/test_cli.py,sha256=BOvCGdTxYEKb5hPeKkDtfN2sX2FxjfmUYq9mbPKL7hU,4866
4
+ tests/test_cuda.py,sha256=Ga_fRdcfhKXwy3_C5x0a9P8MdsoIo1ko73IwaOqwtX0,4799
5
+ tests/test_engine.py,sha256=GA3igv3CTEMb4YYwZDlYPESv5RAuaZ-t3BscvBpQ5AY,4706
6
+ tests/test_explorer.py,sha256=r1pWer2y290Y0DqsM-La7egfEY0497YCdC4rwq3URV4,2178
7
+ tests/test_exports.py,sha256=TTmwlY3FAcVPffUFP9La0vpzNnfKYjej5nKqurCbwZg,6863
8
+ tests/test_integrations.py,sha256=J3D_LAy5gaawoLEMDrCj4HO8965o4kK1t4UBRot6EEw,5848
9
+ tests/test_python.py,sha256=invyej59wozoSZV4Rb7zwkgyVkRZrL149e-xb-c7xew,20086
10
+ ultralytics/__init__.py,sha256=dfT25agEhxx4fmylSQF8MO-vmCllbHmQne6L3UMxsv0,633
2
11
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
3
12
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
4
13
  ultralytics/cfg/__init__.py,sha256=lR6jykSO_0cigsjrqSyFj_8JG_LvYi796viasyWhcfs,21358
@@ -65,7 +74,7 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q
65
74
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
66
75
  ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
67
76
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
68
- ultralytics/data/augment.py,sha256=OyGg5Ltmhi6sH8ImEiolr6KaiJPPB7bPqqcd3OHo_fQ,57665
77
+ ultralytics/data/augment.py,sha256=XOcVRcc1qx3b98YdvrpwNPgNBeJAx2fpC06Y7XLAdkw,59600
69
78
  ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
70
79
  ultralytics/data/build.py,sha256=nFdshVSDqU-tY9luH1T-cYnWHEdh9PtxRkwrs2UahMo,7268
71
80
  ultralytics/data/converter.py,sha256=NLDiV67RshbKQnMJUiQQF11boVzEqgi2Hz39nKVAI4U,17528
@@ -79,7 +88,7 @@ ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yf
79
88
  ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
80
89
  ultralytics/data/explorer/gui/dash.py,sha256=2oAbNroR2lfS45v53M1sRqZklLXbbj6qXqNxvplulC0,10087
81
90
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
82
- ultralytics/engine/exporter.py,sha256=Lmd9CS_odYZ3bgmixf66RCE_cLnr_XFhXVkV6GXU9vM,58529
91
+ ultralytics/engine/exporter.py,sha256=c5Ky8_cElAjPm8y3-2-pJgn0bMGyqivvC2XhFH5gDsY,58222
83
92
  ultralytics/engine/model.py,sha256=IE6HE9VIzqO3DscxSLexub0LUR673eiPFrCPCt6ozEE,40103
84
93
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
85
94
  ultralytics/engine/results.py,sha256=zRuEIrBtpoCQ3M6a_YscnyXrWSP-zpL3ACv0gTdrDaw,30987
@@ -154,13 +163,13 @@ ultralytics/nn/modules/conv.py,sha256=Ywe87IhuaS22mR2JJ9xjnW8Sb-m7WTjxuqIxV_Dv8l
154
163
  ultralytics/nn/modules/head.py,sha256=3N_4zW1UvhI1jCrIxIkNYxQDdiW6HxtxpaNAAudq6NU,22236
155
164
  ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
156
165
  ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
157
- ultralytics/solutions/__init__.py,sha256=ZeIPizmm2SM0e7KZ7nmh9WWNYChSszWwDmHB-WAfaAY,540
166
+ ultralytics/solutions/__init__.py,sha256=S4m7p_rpg2pk9PdnqqD-6Sk--wDHxZSo7cUZjSwj_iQ,561
158
167
  ultralytics/solutions/ai_gym.py,sha256=HDzzvBVFqWgQw2IgtEx5Eo3tEKbFRY3gkiVqax-4j2w,4683
159
- ultralytics/solutions/analytics.py,sha256=ddv-5ertQAzZmhfIi9G6PK3Z1mK8mCKWUwRVgJACves,7050
168
+ ultralytics/solutions/analytics.py,sha256=qJihaifoNLGKEq_6kpMzkz_6a2tvzbO9WlYPzYsZtuk,7093
160
169
  ultralytics/solutions/distance_calculation.py,sha256=pSIkyytHGRAaNzIrkkNkiOnSVWU1PYvURlCIV_jRORA,6505
161
170
  ultralytics/solutions/heatmap.py,sha256=AHXnmXhoQ95ph74zsdrvX_Lfy3wF0SsH0MIeTixE7Qg,10386
162
171
  ultralytics/solutions/object_counter.py,sha256=htcQGWJX1y-vXVV1yUiTDT3sm8ByItjSNfu2Rl2IEmk,10808
163
- ultralytics/solutions/parking_management.py,sha256=b0ZyIspCULKO0OIYHEi7x2BqMBQR-QPmOxDfcfuU2ho,9696
172
+ ultralytics/solutions/parking_management.py,sha256=Bd7FU3WZ8mRBWq81Z5c8jH5WloF4jPKo8TycqU_AcEI,9786
164
173
  ultralytics/solutions/queue_management.py,sha256=ECm6gLZplmE9Cm-zdOazHBBDcW-vvr8nx2M28fcPbts,6787
165
174
  ultralytics/solutions/speed_estimation.py,sha256=kjqMSHGTHMZaNgTKNKWULxnJQNsvhq4WMUphMVlBjsc,6768
166
175
  ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
@@ -175,7 +184,7 @@ ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuU
175
184
  ultralytics/utils/__init__.py,sha256=AjzSdFGfEPMPyFFX9JaONkmI5xgWLHFMO77aBA0ghpM,39518
176
185
  ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
177
186
  ultralytics/utils/benchmarks.py,sha256=PlnUqhl2Om7jp7bKICDj9a2ABpJSl31VFI3ESnGdme8,23552
178
- ultralytics/utils/checks.py,sha256=lca-tqMVbMgsHXb_g-LaVqXv6zoDKFXHqc2SXvO0njM,28124
187
+ ultralytics/utils/checks.py,sha256=VRZH50Spdx1OVaPaUxgEArpF2iI1Re6bVBdMhvFUPoE,28280
179
188
  ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
180
189
  ultralytics/utils/downloads.py,sha256=cmO2Ev1DV1m_lYgQ2yGDG5xVRIBVS_z9nS_Frec_NeU,21496
181
190
  ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
@@ -201,9 +210,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
201
210
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
202
211
  ultralytics/utils/callbacks/tensorboard.py,sha256=Z1veCVcn9THPhdplWuIzwlsW2yF7y-On9IZIk3khM0Y,4135
203
212
  ultralytics/utils/callbacks/wb.py,sha256=DViD0KeXH_i3eVT_CLR4bZFs1TMMUZBVBBYIS3aUfp0,6745
204
- ultralytics-8.2.20.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
205
- ultralytics-8.2.20.dist-info/METADATA,sha256=SlVg8-K-54CKurcIlK0ghcnTfiLWYLJCO4cYjxcm8NE,40694
206
- ultralytics-8.2.20.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
207
- ultralytics-8.2.20.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
208
- ultralytics-8.2.20.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
209
- ultralytics-8.2.20.dist-info/RECORD,,
213
+ ultralytics-8.2.22.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
214
+ ultralytics-8.2.22.dist-info/METADATA,sha256=yGRHf0twNJq8pZiVky6jN2QLl01kpiRsc9p9o-YCuqI,40694
215
+ ultralytics-8.2.22.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
216
+ ultralytics-8.2.22.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
217
+ ultralytics-8.2.22.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
218
+ ultralytics-8.2.22.dist-info/RECORD,,