使用Ultralytics YOLO11进行距离计算
什么是距离计算?
在指定空间内测量两个物体之间的距离称为距离计算。在Ultralytics YOLO11的情况下,边界框的质心被用来计算用户突出显示的边界框之间的距离。
观看: 如何使用Ultralytics YOLO在像素中估算检测到的物体之间的距离 🚀
视觉效果
| 使用Ultralytics YOLO11进行距离计算 |
|---|
距离计算的优势
- 定位精度: 提高计算机视觉任务中的准确空间定位。
- 尺寸估算: 允许估算物体尺寸,以更好地理解上下文。
- 场景理解: 改善3D场景理解,以便在自动驾驶车辆和监控系统等应用中做出更好的决策。
- 避碰: 使系统能够通过监测移动物体之间的距离来检测潜在的碰撞。
- 空间分析: 促进对监控环境中对象关系和相互作用的分析。
距离计算
- 用鼠标左键点击任意两个边界框以计算距离。
- 使用右键鼠标删除所有绘制的点。
- 在框架的任何位置单击以添加新点。
距离是估算的
距离是一个估算,可能并不完全准确,因为它是基于二维数据计算的,这缺乏深度信息。
使用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()论据
这里有一个包含 DistanceCalculation 论据的表格:
| 争论 | 类型 | 默认 | 描述 |
|---|---|---|---|
model |
str |
None |
通往超预测 YOLO 模型文件的路径。 |
你也可以利用各种track在DistanceCalculation解决方案中。
| 争论 | 类型 | 默认 | 描述 |
|---|---|---|---|
tracker |
str |
'botsort.yaml' |
指定使用的跟踪算法,例如,bytetrack.yaml或botsort.yaml。 |
conf |
float |
0.3 |
设置检测的置信阈值;较小的值允许跟踪更多的物体,但也可能包括假阳性。 |
iou |
float |
0.5 |
设置交并比 (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方法处理逐帧处理、跟踪对象和计算距离。
应用程序
使用YOLO11进行距离计算具有众多实际应用:
- 零售分析: 测量客户与产品的接近度并分析商店布局的有效性
- 工业安全: 监控工人与机械之间的安全距离
- 交通管理: 分析车辆间距并检测跟车行为
- 运动分析: 计算球员、球和关键场地位置之间的距离
- 医疗保健: 确保候诊区的适当距离并监控患者移动
- 机器人技术: 使机器人能够与障碍物和人保持适当的距离
常见问题
如何使用Ultralytics YOLO11来计算物体之间的距离?
使用 Ultralytics YOLO11 计算物体之间的距离时,你需要识别检测到的物体的边界框中心。这个过程涉及初始化 DistanceCalculation Ultralytics 的 solutions 模块中的类,并使用模型的跟踪输出来计算距离。
使用Ultralytics YOLO11进行距离计算有哪些优势?
使用Ultralytics YOLO11进行距离计算具有以下优势:
- 定位精度: 为物体提供精确的空间定位。
- 尺寸估算: 帮助估算物理尺寸,有助于更好地理解上下文。
- 场景理解: 增强对3D场景的理解,有助于在自动驾驶和监控等应用中改进决策。
- 实时处理: 可实时进行计算,适用于实时视频分析。
- 集成能力: 与其他YOLO11解决方案无缝集成,例如物体跟踪和速度估计。
我能使用Ultralytics YOLO11在实时视频流中进行距离计算吗?
是的,你可以使用Ultralytics YOLO11在实时视频流中进行距离计算。这个过程包括使用OpenCV捕获视频帧,运行YOLO11物体检测,并使用DistanceCalculation类来计算连续帧中物体之间的距离。有关详细的实现,请参阅视频流示例。
如何删除在使用Ultralytics YOLO11进行距离计算时绘制的点?
要删除在 Ultralytics YOLO11 距离计算过程中绘制的点,可以使用右键单击。此操作将清除您所绘制的所有点。有关更多详细信息,请参阅 距离计算示例 下的注释部分。
在Ultralytics YOLO11中,初始化DistanceCalculation类的关键参数是什么?
在Ultralytics YOLO11中初始化DistanceCalculation类的关键参数包括:
model: YOLO11 模型文件的路径。tracker: 跟踪算法的使用(默认是‘botsort.yaml’)。conf检测的置信阈值。show: 显示输出的标志。
欲了解完整的列表和默认值,请参阅DistanceCalculation的参数。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)