跳至内容

使用Ultralytics YOLOv8 🚀 计算距离

什么是距离计算?

测量两个物体之间的间距被称为特定空间内的距离计算。在 Ultralytics YOLOv8中,边界框中心点被用来计算用户突出显示的边界框的距离。



观看: 使用Ultralytics YOLOv8

视觉效果

使用Ultralytics YOLOv8
Ultralytics YOLOv8 距离计算

距离计算的优势?

  • 定位精度:提高计算机视觉任务中的空间定位精度。
  • 尺寸估算:允许估算物理尺寸,以便更好地理解上下文。
  • 场景理解:有助于对环境的三维理解,从而改进决策。
距离计算
  • 用鼠标左键单击任意两个边界框,计算距离

使用YOLOv8 计算距离示例

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
names = model.model.names

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
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
video_writer = cv2.VideoWriter("distance_calculation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init distance-calculation obj
dist_obj = solutions.DistanceCalculation(names=names, view_img=True)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = dist_obj.start_process(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
备注
  • 鼠标右键点击将删除所有绘制点
  • 鼠标左键可用于绘制点

论据 DistanceCalculation()

Name Type Default 说明
names dict None 将类索引映射到类名称的字典。
pixels_per_meter int 10 从像素到米的转换系数。
view_img bool False 指示是否显示视频流的标志。
line_thickness int 2 在图像上绘制线条的厚度。
line_color tuple (255, 255, 0) 图像上绘制线条的颜色(BGR 格式)。
centroid_color tuple (255, 0, 255) 绘制中心点的颜色(BGR 格式)。

论据 model.track

名称 类型 默认值 说明
source im0 None 图像或视频的源目录
persist bool False 帧与帧之间的持久轨迹
tracker str botsort.yaml 跟踪方法 "bytetrack "或 "botsort
conf float 0.3 置信度阈值
iou float 0.5 借据阈值
classes list None 按类别筛选结果,即 classes=0,或 classes=[0,2,3]
verbose bool True 显示物体跟踪结果


Created 2024-01-05, Updated 2024-06-10
Authors: glenn-jocher (6), IvorZhu331 (1), RizwanMunawar (5), AyushExel (1)

评论