基于YOLOv11與單目測距的實戰教程:從目標檢測到距離估算

引言

在計算機視覺領域,目標檢測與距離估算的結合是自動駕駛、機器人導航等場景的關鍵技術。本文將以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; 代碼完全開源 支持私有化部署…