使用 Ultralytics YOLO26 进行距离计算#
什么是距离计算?#
距离计算是测量图像或视频帧中两个检测到的对象之间空间距离的过程。在 Ultralytics YOLO26 的情况下,利用边界框的质心来计算用户高亮显示的边界框的距离。
Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀
可视化#
| 使用 Ultralytics YOLO26 进行距离计算 |
|---|
![]() |
距离计算的优势#
- 定位精度: 增强计算机视觉任务中空间定位的准确性。
- 尺寸估算: 允许估算对象尺寸,从而实现更好的上下文理解。
- 场景理解: 改进 3D 场景理解,以便在自动驾驶和监控系统等应用中做出更好的决策。
- 避障: 使系统能够通过监控移动对象之间的距离来检测潜在碰撞。
- 空间分析: 有助于分析监控环境中对象之间的关系和交互。
距离计算
- 使用鼠标左键点击任意两个边界框即可计算距离。
- 使用鼠标右键删除所有已绘制的点。
- 在帧中任意位置点击左键以添加新点。
距离仅为估算值
距离仅为估算值,可能不够精确,因为它是使用缺乏深度信息的 2D 数据计算得出的。
使用 YOLO26 计算距离#
DistanceCalculation 解决方案跨帧跟踪对象,并测量你用鼠标选择的任意两个边界框质心之间的欧氏距离(以像素为单位)。运行以下示例,然后左键单击两个对象以绘制连接线并读取距离;右键单击以清除你的选择。
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="yolo26n.pt", # path to the YOLO26 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 windowsDistanceCalculation() 参数#
以下是包含 DistanceCalculation 参数的表格:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
line_width | int | 2 | 解决方案绘制的框、关键点和计数的线条粗细。 |
verbose | bool | True | 启用解决方案针对每帧的输入形状、类别计数和处理速度的日志记录。跟踪调用本身始终是静默的。 |
你还可以在 DistanceCalculation 方案中使用各种 track 参数。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.25 | 设置检测的置信度阈值;较低的值允许跟踪更多的对象,但也可能包含误报。 |
iou | float | 0.7 | 设置用于过滤重叠检测结果的交并比 (IoU) 阈值。 |
classes | list | None | 按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定的类别。 |
device | str | None | 指定用于推理的设备(例如 cpu、cuda:0 或 0)。允许用户在 CPU、特定的 GPU 或用于模型执行的其他计算设备之间进行选择。 |
此外,还提供了以下可视化参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果为 True,则在窗口中显示带注释的图像或视频。对于开发或测试期间的即时视觉反馈非常有用。 |
show_conf | bool | True | 在标签旁显示每次检测的置信度得分。让你深入了解模型对每次检测的确定性。 |
show_labels | bool | True | 在视觉输出中显示每次检测的标签。提供对检测到对象的即时理解。 |
实现细节#
DistanceCalculation 类的工作原理是跨视频帧跟踪对象,并计算所选边界框质心之间的欧氏距离。当你点击两个对象时,该解决方案会:
- 提取所选边界框的中心点
- 计算这些中心点之间的像素级欧几里得距离
- 在帧上显示距离,并在对象之间绘制连接线
该实现使用 mouse_event_for_distance 方法来处理鼠标交互,允许用户根据需要选择对象和清除选择。process 方法处理逐帧处理、对象跟踪和距离计算。
应用#
使用 YOLO26 进行距离计算有着广泛的实际应用:
- 零售分析: 测量顾客与产品的距离,分析门店布局的有效性
- 工业安全: 监控工人和机械之间的安全距离
- 交通管理: 分析车辆间距并检测跟车过近行为
- 体育分析: 计算球员、球和关键场地位置之间的距离
- 医疗保健: 确保候诊区保持适当距离并监控患者移动
- 机器人技术: 使机器人能够与障碍物和人员保持适当距离
常见问题解答#
要使用 Ultralytics YOLO26 计算物体之间的距离,你需要识别检测到的物体的边界框质心。这个过程包括初始化 Ultralytics 的
solutions模块中的DistanceCalculation类,并使用模型的跟踪输出计算距离。要删除使用 Ultralytics YOLO26 进行距离计算期间绘制的点,你可以使用鼠标右键点击。此操作将清除你绘制的所有点。有关更多详细信息,请参阅距离计算示例下的说明部分。
在 Ultralytics YOLO26 中初始化
DistanceCalculation类的关键参数包括:model:YOLO26 模型文件的路径。tracker:要使用的跟踪算法(解决方案默认使用botsort.yaml)。conf:检测的置信度阈值。show:显示输出的标志。
有关详尽的列表和默认值,请参阅 DistanceCalculation 的参数。
