diff --git a/docs/en/guides/parking-management.md b/docs/en/guides/parking-management.md index c661c2b9..dfc61359 100644 --- a/docs/en/guides/parking-management.md +++ b/docs/en/guides/parking-management.md @@ -38,13 +38,14 @@ Parking management with [Ultralytics YOLOv8](https://github.com/ultralytics/ultr Max Image Size of 1920 * 1080 supported -```python -from ultralytics.solutions.parking_management import ParkingPtsSelection, tk +!!! Example "Parking slots Annotator Ultralytics YOLOv8" -root = tk.Tk() -ParkingPtsSelection(root) -root.mainloop() -``` + === "Parking Annotator" + + ```python + from ultralytics import solutions + solutions.ParkingPtsSelection() + ``` - After defining the parking areas with polygons, click `save` to store a JSON file with the data in your working directory. diff --git a/docs/en/guides/speed-estimation.md b/docs/en/guides/speed-estimation.md index e846cdac..e72692f7 100644 --- a/docs/en/guides/speed-estimation.md +++ b/docs/en/guides/speed-estimation.md @@ -8,7 +8,7 @@ keywords: Ultralytics, YOLOv8, Object Detection, Speed Estimation, Object Tracki ## What is Speed Estimation? -Speed estimation is the process of calculating the rate of movement of an object within a given context, often employed in computer vision applications. Using [Ultralytics YOLOv8](https://github.com/ultralytics/ultralytics/) you can now calculate the speed of object using [object tracking](../modes/track.md) alongside distance and time data, crucial for tasks like traffic and surveillance. The accuracy of speed estimation directly influences the efficiency and reliability of various applications, making it a key component in the advancement of intelligent systems and real-time decision-making processes. +[Speed estimation](https://www.ultralytics.com/blog/ultralytics-yolov8-for-speed-estimation-in-computer-vision-projects) is the process of calculating the rate of movement of an object within a given context, often employed in computer vision applications. Using [Ultralytics YOLOv8](https://github.com/ultralytics/ultralytics/) you can now calculate the speed of object using [object tracking](../modes/track.md) alongside distance and time data, crucial for tasks like traffic and surveillance. The accuracy of speed estimation directly influences the efficiency and reliability of various applications, making it a key component in the advancement of intelligent systems and real-time decision-making processes.


@@ -21,6 +21,10 @@ Speed estimation is the process of calculating the rate of movement of an object Watch: Speed Estimation using Ultralytics YOLOv8

+!!! tip "Check Out Our Blog" + + For deeper insights into speed estimation, check out our blog post: [Ultralytics YOLOv8 for Speed Estimation in Computer Vision Projects](https://www.ultralytics.com/blog/ultralytics-yolov8-for-speed-estimation-in-computer-vision-projects) + ## Advantages of Speed Estimation? - **Efficient Traffic Control:** Accurate speed estimation aids in managing traffic flow, enhancing safety, and reducing congestion on roadways. diff --git a/docs/en/models/yolov10.md b/docs/en/models/yolov10.md index cef82d71..63ffb355 100644 --- a/docs/en/models/yolov10.md +++ b/docs/en/models/yolov10.md @@ -1,7 +1,7 @@ --- comments: true -description: Explore the YOLOv10, a real-time object detector. Understand its superior speed, impressive accuracy, and unique approach to end-to-end object detection optimization. -keywords: YOLOv10, real-time object detector, state-of-the-art, Tsinghua University, COCO dataset, NMS-free training, holistic model design, efficient architecture +description: Discover YOLOv10, a cutting-edge real-time object detector known for its exceptional speed and accuracy. Learn about NMS-free training, holistic model design, and performance across various scales. +keywords: YOLOv10, real-time object detection, Tsinghua University, COCO dataset, NMS-free training, efficient architecture, object detection optimization, state-of-the-art AI --- # YOLOv10: Real-Time End-to-End Object Detection diff --git a/ultralytics/__init__.py b/ultralytics/__init__.py index c55705a9..edc0762b 100644 --- a/ultralytics/__init__.py +++ b/ultralytics/__init__.py @@ -1,6 +1,6 @@ # Ultralytics YOLO 🚀, AGPL-3.0 license -__version__ = "8.2.21" +__version__ = "8.2.22" from ultralytics.data.explorer.explorer import Explorer from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld diff --git a/ultralytics/solutions/__init__.py b/ultralytics/solutions/__init__.py index 39e91edd..e1932887 100644 --- a/ultralytics/solutions/__init__.py +++ b/ultralytics/solutions/__init__.py @@ -5,7 +5,7 @@ from .analytics import Analytics from .distance_calculation import DistanceCalculation from .heatmap import Heatmap from .object_counter import ObjectCounter -from .parking_management import ParkingManagement +from .parking_management import ParkingManagement, ParkingPtsSelection from .queue_management import QueueManager from .speed_estimation import SpeedEstimator diff --git a/ultralytics/solutions/analytics.py b/ultralytics/solutions/analytics.py index 2b4c7c50..356386cd 100644 --- a/ultralytics/solutions/analytics.py +++ b/ultralytics/solutions/analytics.py @@ -1,3 +1,5 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + from itertools import cycle import cv2 diff --git a/ultralytics/solutions/parking_management.py b/ultralytics/solutions/parking_management.py index 6bdbf92a..19564cf9 100644 --- a/ultralytics/solutions/parking_management.py +++ b/ultralytics/solutions/parking_management.py @@ -1,3 +1,5 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + import json from tkinter import filedialog, messagebox @@ -10,32 +12,31 @@ from ultralytics.utils.plotting import Annotator class ParkingPtsSelection: - def __init__(self, master): - """ - Initializes the UI for selecting parking zone points in a tkinter window. - - Args: - master (tk.Tk): The main tkinter window object. - """ + def __init__(self): + """Initializes the UI for selecting parking zone points in a tkinter window.""" check_requirements("tkinter") + import tkinter as tk - self.master = master - master.title("Ultralytics Parking Zones Points Selector") + self.tk = tk + self.master = tk.Tk() + self.master.title("Ultralytics Parking Zones Points Selector") # Disable window resizing - master.resizable(False, False) + self.master.resizable(False, False) # Setup canvas for image display - self.canvas = tk.Canvas(master, bg="white") + self.canvas = self.tk.Canvas(self.master, bg="white") # Setup buttons - button_frame = tk.Frame(master) - button_frame.pack(side=tk.TOP) + button_frame = self.tk.Frame(self.master) + button_frame.pack(side=self.tk.TOP) - tk.Button(button_frame, text="Upload Image", command=self.upload_image).grid(row=0, column=0) - tk.Button(button_frame, text="Remove Last BBox", command=self.remove_last_bounding_box).grid(row=0, column=1) - tk.Button(button_frame, text="Save", command=self.save_to_json).grid(row=0, column=2) + self.tk.Button(button_frame, text="Upload Image", command=self.upload_image).grid(row=0, column=0) + self.tk.Button(button_frame, text="Remove Last BBox", command=self.remove_last_bounding_box).grid( + row=0, column=1 + ) + self.tk.Button(button_frame, text="Save", command=self.save_to_json).grid(row=0, column=2) # Initialize properties self.image_path = None @@ -50,6 +51,8 @@ class ParkingPtsSelection: self.canvas_max_width = 1280 self.canvas_max_height = 720 + self.master.mainloop() + def upload_image(self): """Upload an image and resize it to fit canvas.""" self.image_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")]) @@ -74,12 +77,12 @@ class ParkingPtsSelection: if self.canvas: self.canvas.destroy() # Destroy previous canvas - self.canvas = tk.Canvas(self.master, bg="white", width=canvas_width, height=canvas_height) + self.canvas = self.tk.Canvas(self.master, bg="white", width=canvas_width, height=canvas_height) resized_image = self.image.resize((canvas_width, canvas_height), Image.LANCZOS) self.canvas_image = ImageTk.PhotoImage(resized_image) - self.canvas.create_image(0, 0, anchor=tk.NW, image=self.canvas_image) + self.canvas.create_image(0, 0, anchor=self.tk.NW, image=self.canvas_image) - self.canvas.pack(side=tk.BOTTOM) + self.canvas.pack(side=self.tk.BOTTOM) self.canvas.bind("", self.on_canvas_click) # Reset bounding boxes and current box @@ -115,7 +118,7 @@ class ParkingPtsSelection: if self.bounding_boxes: self.bounding_boxes.pop() # Remove the last bounding box self.canvas.delete("all") # Clear the canvas - self.canvas.create_image(0, 0, anchor=tk.NW, image=self.canvas_image) # Redraw the image + self.canvas.create_image(0, 0, anchor=self.tk.NW, image=self.canvas_image) # Redraw the image # Redraw all bounding boxes for box in self.bounding_boxes: @@ -210,6 +213,7 @@ class ParkingManagement: im0 (ndarray): inference image boxes (list): bounding boxes data clss (list): bounding boxes classes list + Returns: filled_slots (int): total slots that are filled in parking lot empty_slots (int): total slots that are available in parking lot