跳至内容

使用Ultralytics YOLOv8 🚀 计算距离

什么是距离计算?

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

视觉效果

使用Ultralytics YOLOv8
Ultralytics YOLOv8 距离计算

距离计算的优势?

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

使用YOLOv8 计算距离示例

from ultralytics import YOLO
from ultralytics.solutions import distance_calculation
import cv2

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 = distance_calculation.DistanceCalculation()
dist_obj.set_args(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()
备注
  • 鼠标右键点击将删除所有绘制点
  • 鼠标左键可用于绘制点

可选参数 set_args

名称 类型 默认值 说明
names dict None 班级名称
view_img bool False 显示带有计数的帧
line_thickness int 2 增加边界框厚度
line_color RGB (255, 255, 0) 映射到两个边界框上的中心点的线条颜色
centroid_color RGB (255, 0, 255) 每个边界框的中心点颜色

论据 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 显示物体跟踪结果


创建于 2024-01-05,更新于 2024-02-10
作者:chr043416@gmail.com(4),glenn-jocher(2),AyushExel(1)

评论