Distance Calculation using Ultralytics YOLO11
What is Distance Calculation?
Measuring the gap between two objects is known as distance calculation within a specified space. In the case of Ultralytics YOLO11, the bounding box centroid is employed to calculate the distance for bounding boxes highlighted by the user.
Watch: Distance Calculation using Ultralytics YOLO11
Visuals
Distance Calculation using Ultralytics YOLO11 |
---|
![]() |
Advantages of Distance Calculation?
- Localization Precision: Enhances accurate spatial positioning in computer vision tasks.
- Size Estimation: Allows estimation of object size for better contextual understanding.
- Scene Understanding: Improves 3D scene comprehension for better decision-making in applications like autonomous vehicles and surveillance systems.
- Collision Avoidance: Enables systems to detect potential collisions by monitoring distances between moving objects.
- Spatial Analysis: Facilitates analysis of object relationships and interactions within the monitored environment.
Distance Calculation
- Click on any two bounding boxes with Left Mouse click for distance calculation
- Mouse Right Click will delete all drawn points
- Mouse Left Click can be used to draw points
Distance is Estimate
Distance will be an estimate and may not be fully accurate, as it is calculated using 2-dimensional data,
which lacks information about the object's depth.
Distance Calculation using Ultralytics YOLO
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(
model="yolo11n.pt", # path to the YOLO11 model file.
show=True, # display the output
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = distancecalculator(im0)
print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windows
DistanceCalculation()
Arguments
Here's a table with the DistanceCalculation
arguments:
Argument | Type | Default | Description |
---|---|---|---|
model |
str |
None |
Path to Ultralytics YOLO Model File. |
You can also make use of various track
arguments in the DistanceCalculation
solution.
Argument | Type | Default | Description |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml or botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
device |
str |
None |
Specifies the device for inference (e.g., cpu , cuda:0 or 0 ). Allows users to select between CPU, a specific GPU, or other compute devices for model execution. |
Moreover, the following visualization arguments are available:
Argument | Type | Default | Description |
---|---|---|---|
show |
bool |
False |
If True , displays the annotated images or videos in a window. Useful for immediate visual feedback during development or testing. |
line_width |
None or int |
None |
Specifies the line width of bounding boxes. If None , the line width is automatically adjusted based on the image size. Provides visual customization for clarity. |
Implementation Details
The DistanceCalculation
class works by tracking objects across video frames and calculating the Euclidean distance between the centroids of selected bounding boxes. When you click on two objects, the solution:
- Extracts the centroids (center points) of the selected bounding boxes
- Calculates the Euclidean distance between these centroids in pixels
- Displays the distance on the frame with a connecting line between the objects
The implementation uses the mouse_event_for_distance
method to handle mouse interactions, allowing users to select objects and clear selections as needed. The process
method handles the frame-by-frame processing, tracking objects, and calculating distances.
Applications
Distance calculation with YOLO11 has numerous practical applications:
- Retail Analytics: Measure customer proximity to products and analyze store layout effectiveness
- Industrial Safety: Monitor safe distances between workers and machinery
- Traffic Management: Analyze vehicle spacing and detect tailgating
- Sports Analysis: Calculate distances between players, the ball, and key field positions
- Healthcare: Ensure proper distancing in waiting areas and monitor patient movement
- Robotics: Enable robots to maintain appropriate distances from obstacles and people
FAQ
How do I calculate distances between objects using Ultralytics YOLO11?
To calculate distances between objects using Ultralytics YOLO11, you need to identify the bounding box centroids of the detected objects. This process involves initializing the DistanceCalculation
class from Ultralytics' solutions
module and using the model's tracking outputs to calculate the distances.
What are the advantages of using distance calculation with Ultralytics YOLO11?
Using distance calculation with Ultralytics YOLO11 offers several advantages:
- Localization Precision: Provides accurate spatial positioning for objects.
- Size Estimation: Helps estimate physical sizes, contributing to better contextual understanding.
- Scene Understanding: Enhances 3D scene comprehension, aiding improved decision-making in applications like autonomous driving and surveillance.
- Real-time Processing: Performs calculations on-the-fly, making it suitable for live video analysis.
- Integration Capabilities: Works seamlessly with other YOLO11 solutions like object tracking and speed estimation.
Can I perform distance calculation in real-time video streams with Ultralytics YOLO11?
Yes, you can perform distance calculation in real-time video streams with Ultralytics YOLO11. The process involves capturing video frames using OpenCV, running YOLO11 object detection, and using the DistanceCalculation
class to calculate distances between objects in successive frames. For a detailed implementation, see the video stream example.
How do I delete points drawn during distance calculation using Ultralytics YOLO11?
To delete points drawn during distance calculation with Ultralytics YOLO11, you can use a right mouse click. This action will clear all the points you have drawn. For more details, refer to the note section under the distance calculation example.
What are the key arguments for initializing the DistanceCalculation class in Ultralytics YOLO11?
The key arguments for initializing the DistanceCalculation
class in Ultralytics YOLO11 include:
model
: Path to the YOLO11 model file.tracker
: Tracking algorithm to use (default is 'botsort.yaml').conf
: Confidence threshold for detections.show
: Flag to display the output.
For an exhaustive list and default values, see the arguments of DistanceCalculation.