首页 > 其他分享 >yolov5单目测距+速度测量+目标跟踪

yolov5单目测距+速度测量+目标跟踪

时间:2024-09-05 21:51:33浏览次数:10  
标签:yolov5 cv2 物体 flow 单目 np 测距

在这里插入图片描述

要在YOLOv5中添加测距和测速功能,您需要了解以下两个部分的原理:

单目测距算法

  • 单目测距是使用单个摄像头来估计场景中物体的距离。常见的单目测距算法包括基于视差的方法(如立体匹配)和基于深度学习的方法(如神经网络)。
  • 基于深度学习的方法通常使用卷积神经网络(CNN)来学习从图像到深度图的映射关系。

单目测距代码

单目测距涉及到坐标转换,代码如下:

def convert_2D_to_3D(point2D, R, t, IntrinsicMatrix, K, P, f, principal_point, height):
    """

    例如:像素坐标转世界坐标
    Args:
        point2D: 像素坐标点
        R: 旋转矩阵
        t: 平移矩阵
        IntrinsicMatrix:内参矩阵
        K:径向畸变
        P:切向畸变
        f:焦距
        principal_point:主点
        height:Z_w

    Returns:返回世界坐标系点,point3D_no_correct, point3D_yes_correct

    """
    point3D_no_correct = []
    point3D_yes_correct = []


    ##[(u1,v1),
   #   (u2,v2)]

    point2D = (np.array(point2D, dtype='float32'))

在YOLOv5中添加单目测距功能的一种方法是,在训练集上收集带有物体标注和深度信息的数据。然后,可以使用深度学习模型(如卷积神经网络)将输入图像映射到深度图。训练完成后,您可以使用该模型来估计图像中物体的距离。
在这里插入图片描述

差帧算法(Frame Difference Algorithm)

  • 差帧算法是一种基于视频序列的帧间差异来计算物体速度的方法。它基于一个简单的假设:相邻帧之间物体的位置变化越大,物体的速度越快。
  • 差帧算法是一种基于视频序列的帧间差异来计算物体速度的方法。其原理是计算物体在相邻两帧之间的位置差异,然后通过时间间隔来计算物体的速度。

假设物体在第t帧和第(t-1)帧中的位置分别为pt和pt-1,则可以使用欧氏距离或其他相似度度量方法来计算它们之间的距离:

d = ||pt - pt-1||

其中||.||表示欧氏距离。然后,通过时间间隔Δt来计算物体的平均速度v:

v = d / Δt

其中,Δt表示第t帧和第(t-1)帧之间的时间间隔。在实际应用中,可以根据需要对速度进行平滑处理,例如使用移动平均或卡尔曼滤波等方法。

测速代码

以下是一个简单的差帧算法代码示例,用于计算物体在视频序列中的速度:

```python
import cv2
import numpy as np

# 读取视频文件
cap = cv2.VideoCapture('video.mp4')

# 初始化参数
prev_frame = None
prev_position = None
fps = cap.get(cv2.CAP_PROP_FPS)  # 视频帧率
speeds = []  # 存储速度值

while cap.isOpened():
    ret, frame = cap.read()

    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    if prev_frame is not None:
        # 计算当前帧和前一帧之间的位置差异
        flow = cv2.calcOpticalFlowFarneback(prev_frame, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)

        # 提取运动向量的x和y分量
        vx = flow[..., 0]
        vy = flow[..., 1]

        # 计算位置差异的欧氏距离
        distance = np.sqrt(np.square(vx) + np.square(vy))

        # 计算速度
        speed = np.mean(distance) * fps

        speeds.append(speed)

        # 可选:可视化结果
        flow_vis = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        flow_vis[..., 0] = np.arctan2(vy, vx) * (180 / np.pi / 2)
        flow_vis[..., 2] = cv2.normalize(distance, None, 0, 255, cv2.NORM_MINMAX)
        flow_vis = cv2.cvtColor(flow_vis, cv2.COLOR_HSV2BGR)

        cv2.imshow('Flow Visualization', flow_vis)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    prev_frame = gray

cap.release()
cv2.destroyAllWindows()

# 打印速度结果
print("速度列表:", speeds)

该代码使用OpenCV库中的`函数来计算相邻帧之间的光流向量,并通过欧氏距离计算位置差异。然后,通过视频的帧率计算速度,并将速度存储在一个列表中。你可以根据自己的需求对速度进行进一步处理或可视化。请注意,这只是一个简单的示例,实际应用中可能需要根据具体情况进行调整和改进。

总结

具体实现上述功能的步骤如下:
在这里插入图片描述

单目测距:

  • 收集训练数据集,包含物体标注和对应的深度信息。
    构建深度学习模型,例如使用卷积神经网络(如ResNet、UNet等)进行图像到深度图的映射。
  • 使用收集的数据集进行模型训练,优化深度学习模型。
  • 在YOLOv5中添加单目测距功能时,加载训练好的深度学习模型,并在检测到对象时,使用该模型估计距离。

差帧算法:

  • 对视频序列进行物体检测和跟踪,获取物体在连续帧中的位置信息。
  • 计算相邻帧之间物体位置的差异,可以使用欧氏距离或其他相似度度量方法。
  • qq 1309399183 欢迎交流!!!
  • 将差异除以时间间隔,得到物体的平均速度。

标签:yolov5,cv2,物体,flow,单目,np,测距
From: https://blog.csdn.net/m0_74173911/article/details/141941666

相关文章

  • 非煤矿山电子封条视频监控系统 YOLOv5
    非煤矿山电子封条视频监控系统采用现场摄像头和图像分析终端等设备,通过对煤矿关键地点进行实时监测和数据分析。当有异常情况发生时,非煤矿山电子封条视频监控系统可以通过人工智能算法将自动识别异常情况并记录信息,及时通知现场管理人员进行处理。非煤矿山电子封条视频监控系统24小......
  • YOLOv5 结合切片辅助超推理算法 | 这才叫让小目标无处遁形!
    引言YOLOv5作为一种高效的目标检测算法,在许多领域得到了广泛应用。然而,在处理小目标检测任务时,YOLOv5仍然面临一些挑战。切片辅助超推理算法则为解决这一问题提供了一种有效的思路。本文将深入探讨YOLOv5与切片辅助超推理算法结合的原理、实现细节、以及在小目标检测方面的优......
  • YOLOv5改进 | NMS | 将NMS修改为soft-NMS【完整代码】
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • Yolov5入门介绍(官网文档学习笔记)
    一、yolov5是什么yolov5是yolo的第五次迭代,旨在提供高速、高精度的目标检测模型官方文档:ComprehensiveGuidetoUltralyticsYOLOv5-UltralyticsYOLODocs二、yolov5的优点1、高速、高精度 (例如R-CNN目标检测有两部:先生成候选框再分类)2、基于pytorch搭建,使用于各......
  • YOLOv5改进 | 模块融合 | C3融合 ghost + DynamicConv 【两次融合 + 独家改进】
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • YOLOv5—6.1训练好的模型之后进行模型部署
    将YOLOv5训练好的模型进行部署,通常包括以下步骤:模型导出、推理部署、并在实际应用中使用。下面详细介绍如何进行这些步骤。1.模型导出首先,你需要将YOLOv5的PyTorch模型导出为适合部署的格式。YOLOv5支持导出为多种格式,包括'torchscript','onnx','openvino','engin......
  • 训练yolov5时出现报错:AttributeError: ‘FreeTypeFont‘ object has no attribute ‘g
    报错:Traceback(mostrecentcalllast):File"D:\anaconda3_xz\envs\luopytorch\lib\threading.py",line932,in_bootstrap_innerself.run()File"D:\anaconda3_xz\envs\luopytorch\lib\threading.py",line870,inrunself._target(*s......
  • 学校食堂明厨亮灶 YOLOv5
    学校食堂明厨亮灶可以通过对厨师的穿戴情况行为举止等进行监测,学校食堂明厨亮灶识别出是否存在卫生问题,并及时发出警报。在学校食堂中,明厨亮灶可以通过对厨师的服装、口罩、帽子等进行监测,学校食堂明厨亮灶识别出是否存在不符合卫生要求的穿戴情况,及时发出警报,提醒工作人员采取......
  • 算数、赋值、单目操作符介绍
    操作符的介绍目录算数操作符1.1:+和-1.2:*1.3:/1.4:%赋值操作符2.1:连续赋值2.2:复合赋值符单目操作符3.1++和--3.1.1:前置++和前置--3.1.2:后置++和后置--3.2:+和-算数操作符算数操作符包含以下几个符号:1:+(加号)2:-(减号)3:*(乘号)4:/(除号)5:%(求余号)这五种符号在C语言运算中起......
  • Yolov5模型训练+转ncnn模型
    配置YOLOv5依赖打开yolov5开源地址:https://github.com/ultralytics/yolov5可根据自身要求下载对应版本(无要求可跳过): 下载:下载完成安装依赖包:如需使用显卡进行训练需按照显卡版本安装部分依赖包:这两个包注掉,然后根据显卡版本安装依赖在cmd获取显卡版本:nvidia-smi......