引言

在计算机视觉领域,目标检测与距离估算的结合是自动驾驶、机器人导航等场景的关键技术。本文将以YOLOv8模型为核心,结合单目相机的几何模型,实现对视频中目标的实时检测与距离估算。代码参考自单目测距原理博客,并通过实践验证其可行性。


环境准备

依赖库安装

pip install ultralytics opencv-python numpy

模型准备

  • YOLOv11模型:下载预训练模型(如yolo11l.pt),可通过YOLO官方文档获取。
  • 视频文件:准备测试视频1.mp4,或使用摄像头实时采集。

核心代码解析

参数配置

f = 700            # 相机焦距(像素单位)
angle_a = 0        # 相机光轴与水平线的夹角(弧度)
camera_h = 1.7     # 相机离地高度(米)

参数说明

  • 焦距(f):决定图像缩放比例,需通过相机标定获取。
  • 相机高度(camera_h):直接影响测距精度,需精确测量。
  • 夹角(angle_a):若相机安装存在俯仰角,需校准此值。

YOLOv11目标检测

model = YOLO("F:/mot/models/YOLO11/yolo11l.pt")  # 加载模型
results = model.track(frame, persist=True)       # 实时检测与追踪
  • model.track()启用追踪功能,支持多目标持续跟踪。
  • results包含检测框坐标、置信度、类别ID等信息。

距离估算核心逻辑

w, h = np.abs(x1-x2), np.abs(y1-y2)  # 计算目标框高度
angle_b = np.arctan(h / f)           # 计算像素高度对应的角度
angle_c = angle_b + angle_a          # 总夹角# 两种距离公式对比
dis1 = camera_h / np.tan(angle_c)    # 简化公式
dis2 = (camera_h / np.sin(angle_c)) * np.cos(angle_b)  # 参考公式

公式对比

  1. 简化公式(dis1):基于相似三角形原理推导,计算更高效。
  2. 参考公式(dis2):考虑相机姿态的几何修正,理论上更精确。

输出示例

id:5  class: car 0.92 dis1: 12.345m  dis2: 12.340m
  • ID:目标追踪ID(若未启用追踪则为-1)
  • 类别:如car、person等
  • 距离:两种公式计算结果对比

实验分析与优化建议

误差来源探讨

  1. 相机标定误差:焦距(f)和安装高度(camera_h)的微小偏差会显著影响结果。
  2. 目标姿态假设:公式假设目标位于地平面,若目标悬浮(如无人机)会导致错误。
  3. 像素高度测量:目标框高度(h)受检测框精度影响,建议使用目标底部特征点替代。

改进建议

  1. 相机标定:使用棋盘格标定工具(如OpenCV的calibrateCamera)获取精准内参。
  2. 动态角度补偿:通过IMU传感器获取实时相机姿态(angle_a),提升动态场景精度。
  3. 深度学习优化:结合目标尺寸先验知识(如车辆平均高度)校正测距结果。

完整代码

import cv2
from ultralytics import YOLO
import numpy as np# 相机参数配置
f = 700
angle_a = 0
camera_h = 1.7# 加载YOLO模型
model = YOLO("F:/mot/models/YOLO11/yolo11l.pt")# 视频捕获
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)while cap.isOpened():ret, frame = cap.read()if not ret:breakresults = model.track(frame, persist=True)for result in results:boxes = result.boxes.xyxy.cpu().numpy()confidences = result.boxes.conf.cpu().numpy()class_ids = result.boxes.cls.cpu().numpy()for box, conf, cls_id, d in zip(boxes, confidences, class_ids, result.boxes):idx = int(d.id.item()) if d.is_track else -1x1, y1, x2, y2 = map(int, box)# 距离计算h = np.abs(y1 - y2)angle_b = np.arctan(h / f)angle_c = angle_b + angle_adis1 = camera_h / np.tan(angle_c)dis2 = (camera_h / np.sin(angle_c)) * np.cos(angle_b)# 绘制标注label = f"id:{idx} {model.names[int(cls_id)]} {conf:.2f} dis1:{dis1:.2f}m dis2:{dis2:.2f}m"cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)cv2.imshow('YOLO Tracking', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

结语

本文通过YOLOv11实现了目标检测与单目测距的融合应用,验证了基于几何模型的低成本测距方案可行性。实际部署中需注意:

  1. 使用专业标定工具提升参数精度;
  2. 针对特定场景(如车辆测距)优化目标高度先验;
  3. 结合滤波算法(如卡尔曼滤波)平滑距离输出。

后续可探索多传感器融合(如激光雷达+视觉)进一步提升精度,或尝试单目深度估计网络(如MiDaS)替代传统几何方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85086.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85086.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85086.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码生成器使用原理以及使用方法

代码生成器使用原理以及使用方法 版本号:1.0 二Ο二五年二月 目录 文档介绍 1.1编写目的 1.2文档范围 1.3读者对象 系统设计 2.1设计目标 2.2设计思路 2.3代码实现原理 使用方法 3.1如何使用 3.2如何修改? 对原程序的bug修改及简…

STM32标准库-I2C通信

文章目录 一、I2C通信1.1 I2C1.2硬件电路1.3I2C时序基本单元1.4I2C时序 二、MPU60502.1简介2.2MPU6050参数2.3硬件电路2.4MPU6050框图 三、I2C外设(硬件)3.1简介3.2I2C框图3.3I2C基本结构3.4主机发送3.5主机接收3.6软件/硬件波形对比1. 时序精度2. 信号稳定性3. 速率与效率4. 波…

使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验

作者:来自 Elastic Jonathan Simon 及 James Williams 试用这个示例房地产搜索应用,它结合了 Azure Gen AI LLM Functions 与 Elasticsearch,提供灵活的混合搜索结果。在 GitHub Codespaces 中查看逐步配置和运行该示例应用的方法。 更多阅读…

模糊查询 的深度技术解析

以下是 模糊查询 的深度技术解析,涵盖核心语法、通配符策略、性能优化及实战陷阱: 🔍 一、核心运算符:LIKE SELECT * FROM 表名 WHERE 列名 LIKE 模式字符串;🎯 二、通配符详解 通配符作用示例匹配案例%任意长度字符…

[论文阅读] (39)EuroSP25 CTINEXUS:基于大模型的威胁情报知识图谱自动构建

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

强化学习三大分类

核心目标: 教会一个智能体(比如机器人、游戏AI、推荐系统)通过试错和奖励,学会在某个环境中完成特定任务的最佳策略。 核心角色: 智能体 (Agent): 学习者,比如玩游戏的小人、控制温度的空调系…

城市排水生命线安全运行监测项目

近年来,城市内涝、污水溢流等问题频发,让排水管网这一"城市生命线"的安全运行备受关注。如何让地下的"毛细血管"更智能、更可靠?本文将带您深入解析城市排水生命线安全运行监测项目的建设逻辑与技术内核,看科…

LeetCode - 34. 在排序数组中查找元素的第一个和最后一个位置

题目 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 思路 查找左边界 初始化 left 0, right nums.size() - 1 当 left < right 时循环&#xff1a; 计算中点 mid left (right - left) / 2 如果 nums[mid] < target…

Tesollo四指灵巧手DG-4F:18自由度与多种抓取模式结合实现高精度操作

Tesollo四指灵巧手 DG-4F 是一款具备 18 自由度的多模态末端执行器&#xff0c;采用模块化结构设计&#xff0c;融合人手灵活性与夹爪高效性特点。该产品兼容 Universal Robots、Techman、Doosan Robotics、Rainbow Robotics 等主流机器人平台&#xff0c;适用于工业自动化、科…

深入浅出JavaScript 原型链:对象继承的“隐形链条”

深入浅出JavaScript 原型链&#xff1a;对象继承的“隐形链条” 在 JavaScript 的世界里&#xff0c;原型链&#xff08;Prototype Chain&#xff09;是一个核心概念。它如同一条隐形的链条&#xff0c;连接着所有对象&#xff0c;使得代码能够高效地共享属性和方法。理解原型…

LINUX中MYSQL的使用

LINUX中MYSQL的使用 MYSQL的数据类型 bool&#xff1a; 布尔类型 0 或者 1 CHAR&#xff1a; 单字符的字符 CHAR&#xff08;n&#xff09;:多字节字符 VARCHAR&#xff08;n&#xff09;&#xff1a;可变长度的字符型 TINYINT &#xff1a; 单字节整型 SMALLINT&#x…

打卡第48天:随机函数与广播机制

知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机制&#xff0c;基本一致 …

学习昇腾开发的第四天--基本指令

1、查看npu当前状态信息 npu-smi info 2、查看NPU的ID npu-smi info -l3、调用python python3 4、修改用户名 su - HwHiAiUser 5、查看cann版本 cat /usr/local/Ascend/ascend-toolkit/latest/compiler/version.info 6、删除文件夹 sudo rm -rf HelloWorld7、在本地环…

vue3 - 自定义hook

自定义hook 简单点来说就是将人物或者订单的所有数据和方法放在一个ts文件里面 这样便于维护 假如一个人只需要管 人物的模块 那他只需要操作usePerson.ts文件就可以了 //useDog.ts import { ref,reactive} from vue; import axios from axios;export default function(){…

【python】bash: !‘: event not found

报错 # 2. 测试smplx是否工作&#xff08;可能不需要chumpy&#xff09; python -c "import smplx; print(✅ smplx works!)"bash: !: event not found 分析 这是bash的历史扩展问题&#xff0c;感叹号被解释为历史命令。用这些方法解决&#xff1a; &#x1f680…

【Python打卡Day47】注意力热力图可视化@浙大疏锦行

可视化空间注意力热力图的意义&#xff1a; 提升模型可解释性 热力图能直观展示模型决策的依据区域&#xff0c;破除深度学习"黑箱"困境。例如在图像识别中&#xff0c;可以看到模型识别"猫"是因为关注了猫耳和胡须区域&#xff0c;识别"禁止通行&qu…

树状数组 2

L - 树状数组 2 洛谷 - P3368 Description 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 x&#xff1b; 求出某一个数的值。 Input 第一行包含两个整数 N、M&#xff0c;分别表示该数列数字的个数和操作的总个数。…

YOLOv2 技术详解:目标检测的又一次飞跃

&#x1f9e0; YOLOv2 技术详解&#xff1a;目标检测的又一次飞跃 一、前言 在 YOLOv1 提出后&#xff0c;虽然实现了“实时性 单阶段”的突破&#xff0c;但其在精度和小物体检测方面仍有明显不足。为了弥补这些缺陷&#xff0c;Joseph Redmon 等人在 2017 年提出了 YOLOv2…

JAFAR Jack up Any Feature at Any Resolution

GitHub PaPer JAFAR: Jack up Any Feature at Any Resolution 摘要 基础视觉编码器已成为各种密集视觉任务的核心组件。然而&#xff0c;它们的低分辨率空间特征输出需要特征上采样以产生下游任务所需的高分辨率模式。在这项工作中&#xff0c;我们介绍了 JAFAR——一种轻量级…

SamWaf 开源轻量级网站防火墙源码(源码下载)

SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙&#xff0c;完全私有化部署&#xff0c;数据加密且仅保存本地&#xff0c;一键启动&#xff0c;支持Linux&#xff0c;Windows 64位,Arm64。 主要功能&#xff1a; 代码完全开源 支持私有化部署…