使用 Ultralytics YOLO11 进行距离计算
什么是距离计算?
测量两个物体之间的间隙被称为指定空间内的距离计算。在 Ultralytics YOLO11 的情况下,边界框 质心用于计算用户突出显示的边界框的距离。
观看: 使用 Ultralytics YOLO11 进行距离计算
视觉效果
使用 Ultralytics YOLO11 进行距离计算 |
---|
![]() |
距离计算的优势?
- 定位精度: 增强计算机视觉任务中的准确空间定位。
- 尺寸估计: 允许估计物体尺寸,以更好地理解上下文。
- 场景理解: 改进 3D 场景理解,从而在自动驾驶汽车和监控系统等应用中做出更好的决策。
- 避撞: 使系统能够通过监控移动物体之间的距离来检测潜在的碰撞。
- 空间分析: 促进对监控环境中目标关系和交互的分析。
距离计算
- 用鼠标左键单击任意两个边界框以计算距离
- 鼠标右键将删除所有绘制的点
- 鼠标左键可用于绘制点
距离为估计值
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.
使用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 |
Ultralytics YOLO 模型文件的路径。 |
您还可以使用各种 track
中的参数 DistanceCalculation
解决方案。
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
指定要使用的跟踪算法,例如: bytetrack.yaml 或 botsort.yaml . |
conf |
float |
0.3 |
设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。 |
iou |
float |
0.5 |
设置用于过滤重叠检测的 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 |
None or int |
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 捕获视频帧 OpenCV,运行 YOLO11 对象检测,并使用 DistanceCalculation
类,用于计算连续帧中对象之间的距离。有关详细的实现,请参见 视频流示例.
如何删除使用 Ultralytics YOLO11 在距离计算期间绘制的点?
要删除在使用 Ultralytics YOLO11 进行距离计算期间绘制的点,您可以使用鼠标右键单击。此操作将清除您绘制的所有点。有关更多详细信息,请参阅 距离计算示例下的注释部分。
在 Ultralytics YOLO11 中,初始化 DistanceCalculation 类的主要参数是什么?
用于初始化以下对象的关键参数 DistanceCalculation
Ultralytics YOLO11 中的类包括:
model
: YOLO11 模型文件的路径。tracker
: 要使用的跟踪算法(默认为 'botsort.yaml')。conf
: 检测的置信度阈值。show
: 用于显示输出的标志。
有关详尽的列表和默认值,请参阅DistanceCalculation 的参数。