單目相機減速帶檢測以及測距

單目相機減速帶檢測以及測距項目是一個計算機視覺領域的應用,旨在使用一個攝像頭(單目相機)來識別道路上的減速帶,并進一步估計車輛與減速帶之間的距離。這樣的系統對于智能駕駛輔助系統(ADAS)特別有用,因為它可以幫助駕駛員提前減速,避免碰撞或劇烈顛簸。

下面是一個典型的單目相機減速帶檢測和測距項目的組成部分:

1.?數據集準備

  • 收集包含減速帶的大量圖像或視頻片段,這些數據用于訓練機器學習模型。
  • 數據集應該多樣化,包括不同天氣條件、光照水平、減速帶類型和視角的圖像。

2.?目標檢測模型訓練

  • 使用深度學習框架,如YOLOv5、SSD或Faster R-CNN,訓練一個目標檢測模型以識別減速帶。
  • 訓練模型需要標注的數據,即在每張圖像中標注減速帶的位置。

3.?相機標定

  • 為了準確地測量距離,必須先標定相機,以獲取其內參數(如焦距、主點位置)和任何畸變參數。
  • 標定通常使用帶有已知幾何圖案(如棋盤格)的標定板完成。

4.?測距算法開發

  • 開發算法來根據減速帶在圖像中的大小和相機的參數計算其距離。
  • 可以采用三角法或透視投影法,其中已知減速帶的實際尺寸是一個關鍵參數。

5.?系統集成與測試

  • 將檢測和測距模塊整合到一個系統中,確保它們協同工作。
  • 在各種條件下測試系統,包括不同的光線、角度和減速帶類型,以評估其魯棒性和準確性。

6.?實時處理

  • 優化系統以實現實時處理,這對于車載應用至關重要。
  • 可能需要硬件加速,如GPU或專用的計算機視覺處理器,以達到所需的幀率。

7.?用戶界面與警報系統

  • 設計用戶界面,顯示減速帶的位置和距離信息。
  • 如果減速帶距離過近,可能需要觸發警報系統,提醒駕駛員采取行動。

在實際應用中,單目相機減速帶檢測和測距項目可能還會涉及到一些挑戰,例如減速帶的多樣性(形狀、顏色、材質)、環境因素的影響(如陰影、雨雪等)以及相機運動的補償等。因此,持續的改進和適應性是此類項目成功的關鍵。

?

一、相機標定(拍照+標定+去畸變)

? 相機標定在calibration.py里實現。目前不足:魚眼相機去畸變有點問題,其他均正常。

? 使用方法:運行calibration.py,按照提示運行即可。請注意,本程序capture時會自動清空標定板圖片文件夾(已修改為可選擇是否清空)。先capture拍照,拍照數目可以在程序里預設;然后calibrate標定,不同類型相機的結果會自動寫入不同config里。然后可以undistort去畸變。

? 標定板相關請參考我的博客:本程序使用的標定板是x方向奇數11個、y方向偶數8個、角點間距1cm的標定板,在程序里為calibration.py的:

board = Board(11,8,10) #col row width(mm)

把部分函數放入到了utils/calibrate下,供其他程序使用。新增了鳥瞰圖,運行birdeye.py即可。

? PS:鳥瞰圖轉換中,標定板平面坐標系的原點以左上角為基礎,向左上平移了200mm。

二、單應矩陣標定

? 本著有啥用啥的原則,我直接用宿舍的瓷磚標定了哈哈哈(其實之前用外面的瓷磚標定過,但是相機太爛了拍不清,在宿舍放了幾個標志物再標定的)。

? 單應矩陣至少需要四個點,用findHomography函數,這里有個坑了我一下午的坑:這個函數找到的H滿足 $$ c[x,y,1]^T = H[u,v,1]^T $$? 其中,u,v是成像坐標系的點,x,y是地面坐標系的點。一定注意還有個c,因為H是八自由度的,最后得到轉換后的坐標不是標準齊次坐標,還要手動轉化為標準齊次坐標。

? 程序運行方法:運行getHomography.py以拍照、鼠標點擊獲得像素以及標定(大體是這樣,我最后把像素坐標寫死了),然后求解H;運行getDistance以實現運用獲得的H點擊像素之后測距(可能以后會刪除,因為這個.py是用來測試測距的)。

三、目標檢測

? 初步試了下用自己的數據集訓練。建立了datasets文件夾,標注工具為labelimg。數據處理過程為:

1.將要標注的圖片放到data/images里。

2.用labelimg標注,標注結果放到data/labels里。

3.進入yolo文件夾(否則路徑不對),運行yolo文件夾下的data_process.py來劃分數據,生成訓練集等路徑。

踩了以下坑,作個匯總以作為注意事項。

1.train.py的config我更改過。之前當使用預訓練時,會報keyerror:"assets"的錯誤。(據我觀察,這基本就是.pt文件路徑不對的問題,請檢查自己參數里的路徑是否寫對了)。

2.train.txt等等里面的路徑最好還是寫絕對路徑,用os.getcwd和join拼接即可。

3.如果要用cpu訓練,把utils/loss.py里面的780多行那幾個device gpu:0務必改成cpu:0.

4.如果要使用預訓練,請修改cfg/training/yolov7.yaml里的nc為對應數量。

5.訓練前記得刪除dataset文件夾里的cache!

6.yaml不要寫漢語!!!會gbk錯誤

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40264.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40264.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40264.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于tensorflow2的目標檢測完整實現過程

序言 雖然tf1仍然在維護,但tf2畢竟是主流,如果不是項目有明確要求,建議直接選擇tf2。本文以tf2為例展開,總結從環境準備到使用自己的數據和tensorflow預訓練模型進行快速訓練和調用。對tensorflow和目標檢測算法有深入了解的&…

C++ 的常見算法 之二

C 的常見算法 之二 劃分序列partitionstable_partition 排序sortnth_element 二分查找binary_search 劃分序列 partition 重新排列 [first,last) 范圍內的元素,使得 pred 返回 true 的所有元素先于所有返回 false 的元素。迭代器返回指向第二組的第一個元素的點。…

Python開發——Python 線程入門

An Intro to Threading in Python – Real Python 1. 什么是線程? 線程是一個獨立的執行流程。這意味著您的程序將有兩件事情同時發生。但對于大多數 Python 3 實現來說,不同的線程實際上并不是同時執行的:它們只是看起來是這樣。 人…

Vue3中的jsx的babel配置

如果我們希望在項目中使用jsx,那么我們需要添加對jsx的支持: jsx我們通常會通過Babel來進行轉換(React編寫的jsx就是通過babel轉換的);對于Vue來說,我們只需要在Babel中配置對應的插件即可; *…

Vue+Xterm.js+WebSocket+JSch實現Web Shell終端

一、需求 在系統中使用Web Shell連接集群的登錄節點 二、實現 前端使用Vue&#xff0c;WebSocket實現前后端通信&#xff0c;后端使用JSch ssh通訊包。 1. 前端核心代碼 <template><div class"shell-container"><div id"shell"/>&l…

C++ 實現字符串逆序

C 實現字符串逆序 思路&#xff1a; 輸入一個字符串。使用雙指針法&#xff0c;交換字符串的首尾字符&#xff0c;逐步向中間移動。輸出逆序后的字符串。 #include <iostream> #include <string>using namespace std;void reverseString(string &str) {int …

【FPGA】STA靜態時序分析

文章目錄 一.定義二.分類1. 靜態時序分析2. 靜態時序分析 三. 概念四. 時間余量1.場景2.建立時間余量3.保持時間余量 一.定義 時序分析:檢查電路是否滿足時序要求&#xff1b; 二.分類 1. 靜態時序分析 STA,遍歷所有的時序路徑&#xff0c;根據時序庫&#xff08;.lib文件&…

【Mojolicious RESTful接口全解】構建現代化Web服務的秘訣

標題&#xff1a;【Mojolicious RESTful接口全解】構建現代化Web服務的秘訣 Mojolicious是一個基于Perl的高性能、實時的Web框架&#xff0c;它以其簡潔的語法和強大的功能而聞名。Mojolicious不僅支持傳統的Web應用開發&#xff0c;還特別適合構建RESTful API。本文將詳細介紹…

新手教學系列——使用uWSGI對Flask應用提速

在構建和部署Flask應用時,性能和穩定性是兩個關鍵的因素。為了提升Flask應用的性能,我們可以借助uWSGI這個強大的工具。本文將詳細介紹為什么要使用uWSGI、uWSGI的底層原理,并提供一個實例配置,幫助你更好地理解和應用這個工具。 為什么要使用uWSGI uWSGI 是一個應用服務…

探索企業知識邊界,鴻翼ECM AI助手開啟智慧問答新時代

在信息化迅速發展的當下&#xff0c;企業積累的數字文檔數量巨大&#xff0c;這些文檔中蘊含的深層信息對業務發展至關重要。然而&#xff0c;傳統的搜索技術常常因只能進行關鍵字查詢而無法滿足對文檔深層次理解的需求。 據Gartner調查&#xff0c;高達47%的員工在尋找有效工…

Webpack: 三種Chunk產物的打包邏輯

概述 在前文 Webpack: Dependency Graph 管理模塊間依賴 中&#xff0c;我們已經詳細講解了「構建」階段如何從 Entry 開始逐步遞歸讀入、解析模塊內容&#xff0c;并最終構建出模塊依賴關系圖 —— ModuleGraph 對象。本文我們繼續往下&#xff0c;講解在接下來的「封裝」階段…

【大數據】—美國交通事故分析(2016 年 2 月至 2020 年 12 月)

引言 在當今快速發展的數字時代&#xff0c;大數據已成為我們理解世界、做出決策的重要工具。特別是在交通安全領域&#xff0c;大數據分析能夠揭示事故模式、識別風險因素&#xff0c;并幫助制定預防措施&#xff0c;從而挽救生命。本文將深入探討2016年2月至2020年12月期間&…

【redis】 LRU 和 LFU 算法

1、簡介 Redis 中的 LRU&#xff08;Least Recently Used&#xff09;和 LFU&#xff08;Least Frequently Used&#xff09;算法是用于決定在內存空間不足時&#xff0c;哪些鍵&#xff08;key&#xff09;應該被刪除以釋放空間的策略。這兩種算法都試圖通過跟蹤鍵的使用情況…

解決Memcached內存碎片:優化緩存性能的策略

解決Memcached內存碎片&#xff1a;優化緩存性能的策略 Memcached是一個廣泛使用的高性能分布式內存緩存系統&#xff0c;它通過在內存中緩存數據來加速數據檢索操作。然而&#xff0c;隨著時間的推移和緩存操作的進行&#xff0c;Memcached可能會遇到內存碎片問題&#xff0c…

24年河南特崗教師招聘流程+報名流程

河南特崗教師報名流程如下 1.登錄河南省特崗招聘網 登錄河南省特崗招聘網注冊賬號和密碼&#xff0c;賬號可以是手機號或者身份證號&#xff0c;密碼自己設置 2.注冊登錄賬號 注冊完賬號重新登錄賬號&#xff0c;輸入身份證號、手機號、密碼、驗證碼 3.瀏覽考試須知 填寫個人信…

Python 編程快速上手——讓繁瑣工作自動化(第2版)讀書筆記01 Python基礎快速過關

Python 編程快速上手——讓繁瑣工作自動化&#xff08;第2版&#xff09;讀書筆記01 Python基礎快速過關 1 python基礎概念 Python提供了高效的高級數據結構&#xff0c;還能簡單有效地面向對象編程。 python運算符順序 **——%——//——/——*——-——python中常見的數據…

Real-Time 3D Graphics with WebGL2

WebGL渲染管線 下圖是WebGL渲染管線的示意圖: Vertex Buffer Objects (VBOs) VBOS中包含了用于描述幾何體的信息。如&#xff0c;幾何體的頂點坐標&#xff0c;法線坐標&#xff0c;顏色&#xff0c;紋理坐標等。 Index Buffer Objects (IBOs) IBOs中包含了描述頂點關系的信…

C#的多線程UI窗體控件顯示方案 - 開源研究系列文章

上次編寫了《LUAgent服務器端工具》這個應用&#xff0c;然后里面需要新啟動一個線程去對文件進行上傳到FTP服務器&#xff0c;但是新線程里無法對應用主線程UI的內容進行更改&#xff0c;所以就需要在線程里設置主UI線程里控件信息的方法&#xff0c;于是就有了此博文。此文記…

Rocky Linux 9 快速安裝docker 教程

前述 CentOS 7系統將于2024年06月30日停止維護服務。CentOS官方不再提供CentOS 及后續版本&#xff0c;不再支持新的軟件和補丁更新。CentOS用戶現有業務隨時面臨宕機和安全風險&#xff0c;并無法確保及時恢復。由于 CentOS Stream 相對不穩定&#xff0c;剛好在尋找平替系統…