交互式实时距离测量-单目测距-社交距离检测

发布于:2024-08-14 ⋅ 阅读:(198) ⋅ 点赞:(0)

使用说明

  • 使用鼠标点击两个目标框
  • 要删除在距离计算过程中绘制的点,你可以使用鼠标右键点击。这会清除所有已绘制的点

使用 Ultralytics YOLOv8 进行距离计算

在这里插入图片描述

距离计算是在指定空间内测量两个物体之间间隙的基本概念。在 Ultralytics YOLOv8 的情况下,通过使用被检测物体的边界框中心点来计算距离。这种技术使我们能够精确确定图像或视频帧中物体的相对位置,这对于计算机视觉和机器人学来说至关重要。

视觉展示:使用 Ultralytics YOLOv8 进行距离计算

为了更好地理解这一过程,我们可以想象一个视频场景,其中包含多个移动的物体。YOLOv8 模型首先对这些物体进行识别并绘制边界框。接下来,我们可以通过点击这些边界框的中心点来测量它们之间的距离。这将帮助我们了解不同物体之间的空间关系。

距离计算的优势?
  • 定位精度:提高计算机视觉任务中的空间定位准确性。
  • 尺寸估计:允许估算物理尺寸,从而增强对场景上下文的理解。
  • 场景理解:有助于三维环境的理解,从而改善决策制定,比如在自动驾驶和监控应用中。
    在这里插入图片描述
距离计算步骤

要使用 YOLOv8 计算距离,请按照以下步骤操作:

  1. 初始化模型:加载预训练的 YOLOv8 模型。
  2. 读取视频流:从文件或摄像头获取视频流。
  3. 跟踪物体:利用 YOLOv8 对视频帧中的物体进行跟踪。
  4. 计算距离:通过点击物体的边界框中心点来计算距离。
示例代码
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(), "无法读取视频文件"

# 获取视频宽度、高度和帧率
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_calculation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# 初始化距离计算对象

# 循环读取视频帧
while cap.isOpened():
    success, im0 = cap.read()
    
    if not success:
        print("视频帧为空或视频处理已完成。")
        break
    

    
    # 写入视频帧
    video_writer.write(im0)

# 关闭资源
cap.release()
video_writer.release()
cv2.destroyAllWindows()
注意事项
  • 右键点击可以删除所有已绘制的点。
  • 左键点击用于绘制点。
DistanceCalculations 类构造函数参数
名称 类型 默认值 描述
names 字典 None 类别名称字典。
pixels_per_meter 整数 10 像素到米的转换因子。
view_img 布尔值 False 是否显示视频流。
line_thickness 整数 2 绘制线条的厚度。
line_color 元组 (255, 255, 0) 绘制线条的颜色(BGR 格式)。
centroid_color 元组 (255, 0, 255) 绘制中心点的颜色(BGR 格式)。
model.track 方法参数
名称 类型 默认值 描述
im0 图像 None 输入图像或视频帧。
persist 布尔值 False 在连续帧间保持跟踪。
tracker 字符串 botsort.yaml 跟踪方法,如 ‘bytetrack’ 或 ‘botsort’。
conf 浮点数 0.3 置信度阈值。
iou 浮点数 0.5 IOU 阈值。
classes 列表 None 过滤结果中的类别,例如 classes=0classes=[0,2,3]
verbose 布尔值 True 是否显示物体跟踪结果。
常见问题解答

如何使用 Ultralytics YOLOv8 计算物体间的距离?

要使用 Ultralytics YOLOv8 计算物体间的距离,你需要先识别出物体的边界框中心点。这个过程包括初始化 DistanceCalculation 类,并利用模型的跟踪输出来计算距离。具体实现可参考上面给出的距离计算示例代码。

使用 Ultralytics YOLOv8 进行距离计算的优点有哪些?

使用 Ultralytics YOLOv8 进行距离计算具有以下优势:

  • 定位精度:提高了物体的空间定位准确度。
  • 尺寸估计:有助于估计实际尺寸,从而增强场景上下文的理解。
  • 场景理解:增强了三维场景的理解,有助于在诸如自动驾驶和监控等应用中做出更好的决策。

是否可以在实时视频流中使用 Ultralytics YOLOv8 进行距离计算?

是的,你可以在实时视频流中使用 Ultralytics YOLOv8 进行距离计算。该过程涉及使用 OpenCV 抓取视频帧,运行 YOLOv8 物体检测,并使用 DistanceCalculation 类在连续的视频帧中计算物体间的距离。详细的实现方式请参考上述视频流示例代码。

如何删除在距离计算过程中绘制的点?

要删除在距离计算过程中绘制的点,你可以使用鼠标右键点击。这会清除所有已绘制的点。更多详情请参考示例代码中的注意事项部分。

最后

计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!


网站公告

今日签到

点亮在社区的每一天
去签到