使用 Ultralytics YOLO26 进行距离计算
什么是距离计算?
在特定空间内测量两个物体之间的间隙即为距离计算。对于 Ultralytics YOLO26,系统采用 边界框 的质心来计算用户所选边界框之间的距离。
Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀
可视化展示
| 使用 Ultralytics YOLO26 进行距离计算 |
|---|
![]() |
距离计算的优势
- 定位 精度: 增强了 计算机视觉 任务中空间定位的准确性。
- 尺寸估计: 允许估算物体尺寸,以实现更好的上下文理解。
- 场景理解: 改进了 3D 场景理解,有助于在 自动驾驶 和监控系统等应用中做出更好的决策。
- 碰撞规避: 使系统能够通过监测移动物体之间的距离来检测潜在的碰撞。
- 空间分析: 有助于分析受监测环境中物体之间的关系和交互。
距离计算
- 用鼠标左键点击任意两个边界框即可计算距离。
- 使用鼠标右键可删除所有已绘制的点。
- 在画面任意位置左键单击即可添加新点。
距离仅为估算值
距离为估算值,可能不够精确,因为它是使用缺乏深度信息的 2D 数据计算得出的。
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 模型文件的路径。 |
You can also make use of various track arguments in the DistanceCalculation solution.
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 指定使用的跟踪算法,例如 bytetrack.yaml 或 botsort.yaml。 |
conf | float | 0.1 | 设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能会包含误报。 |
iou | float | 0.7 | 设置过滤重叠检测的 Intersection over Union (IoU) 阈值。 |
classes | list | None | 按类别索引过滤结果。例如,classes=[0, 2, 3] 将仅跟踪指定的类别。 |
verbose | bool | True | 控制跟踪结果的显示,提供跟踪对象的视觉输出。 |
device | str | None | 指定推理设备(例如 cpu、cuda:0 或 0)。允许用户选择 CPU、特定的 GPU 或其他计算设备来执行模型。 |
此外,还提供了以下可视化参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果设为 True,则在一个窗口中显示标注后的图像或视频。这对于开发或测试期间的即时视觉反馈非常有用。 |
line_width | int or None | None | 指定边界框的线宽。如果为 None,线宽将根据图像大小自动调整。提供视觉自定义以提高清晰度。 |
show_conf | bool | True | 在标签旁边显示每个检测结果的置信度分数。让你可以洞察模型对每个检测的确定性。 |
show_labels | bool | True | 在可视化输出中显示每个检测结果的标签。提供对检测对象的即时了解。 |
实现细节
DistanceCalculation 类的工作原理是跟踪视频帧中的物体,并计算所选边界框质心之间的欧几里得距离。当你点击两个物体时,该解决方案会:
- 提取所选边界框的质心(中心点)
- 以像素为单位计算这些质心之间的欧几里得距离
- 在画面上显示距离,并在物体之间画出连接线
该实现使用 mouse_event_for_distance 方法来处理鼠标交互,允许用户根据需要选择物体并清除选择。process 方法负责逐帧处理、跟踪物体并计算距离。
应用场景
YOLO26 的距离计算具有广泛的实际应用:
- 零售分析: 测量顾客与产品的距离并分析商店布局的有效性
- 工业安全: 监测工人和机器之间的安全距离
- 交通管理: 分析车辆间距并检测跟车过近行为
- 体育分析: 计算球员、球和场地关键位置之间的距离
- 医疗保健: 确保等候区保持适当距离并监测患者移动
- 机器人技术: 使机器人能够与障碍物和人保持适当的距离
常见问题 (FAQ)
如何使用 Ultralytics YOLO26 计算物体之间的距离?
To calculate distances between objects using Ultralytics YOLO26, 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.
使用 Ultralytics YOLO26 进行距离计算有哪些优势?
使用 Ultralytics YOLO26 进行距离计算具有多项优势:
- 定位精度: 为物体提供精确的空间定位。
- 尺寸估计: 有助于估算物理尺寸,从而实现更好的上下文理解。
- 场景理解: 增强了 3D 场景理解,有助于在自动驾驶和监控等应用中做出更好的决策。
- 实时处理: 即时执行计算,使其适用于实时视频分析。
- 集成能力: 可与其他 YOLO26 解决方案无缝协作,例如 物体跟踪 和 速度估计。
我可以使用 Ultralytics YOLO26 在实时视频流中执行距离计算吗?
可以,你可以使用 Ultralytics YOLO26 在实时视频流中执行距离计算。该过程涉及使用 OpenCV 捕获视频帧,运行 YOLO26 物体检测,并使用 DistanceCalculation 类计算连续帧中物体之间的距离。有关详细实现,请参阅 视频流示例。
如何删除在使用 Ultralytics YOLO26 进行距离计算时绘制的点?
要删除使用 Ultralytics YOLO26 进行距离计算时绘制的点,可以使用鼠标右键点击。此操作将清除你绘制的所有点。有关更多详细信息,请参阅 距离计算示例 下的说明部分。
初始化 Ultralytics YOLO26 中的 DistanceCalculation 类时,关键参数有哪些?
初始化 Ultralytics YOLO26 中的 DistanceCalculation 类时,关键参数包括:
model:YOLO26 模型文件的路径。tracker:要使用的跟踪算法(默认为 'botsort.yaml')。conf:检测的置信度阈值。show:显示输出的标志。
有关完整列表和默认值,请参阅 DistanceCalculation 的参数。
