楊肖,劉淼
(201620 上海市 上海工程技術(shù)大學 機械與汽車工程學院)
隨著我國經(jīng)濟的發(fā)展,人們的生活水平不斷改善,農(nóng)村地區(qū)的汽車數(shù)量進一步提升。然而,鄉(xiāng)鎮(zhèn)尚有一些道路路況較差,路面坑洼,無法滿足街道的維護需求。道路問題帶來一系列問題,如汽車爆胎、輪胎損壞等,甚至影響駕駛安全,增加了交通事故發(fā)生的風險,路面狀況直接影響到人們的安全。本文提出一個深度學習框架,該框架可識別路面坑洼,感知坑洼并提醒駕駛員。
系統(tǒng)設(shè)計時需要了解架構(gòu)、模塊、組件和需要添加的數(shù)據(jù),形成合適的體系結(jié)構(gòu);系統(tǒng)理論被應(yīng)用于產(chǎn)品開發(fā)過程。在計算機系統(tǒng)設(shè)計中,最廣泛使用的方法是面向?qū)ο蟮姆治黾捌浞椒?。在面向?qū)ο蟮姆治龊驮O(shè)計系統(tǒng)體系結(jié)構(gòu)中[1],UML 是一種標準語言,它是一個概念模型,定義系統(tǒng)的行為和結(jié)構(gòu),結(jié)合各種關(guān)系和系統(tǒng)組件描述其如何工作以實現(xiàn)整個系統(tǒng)。
本檢測系統(tǒng)由輸入單元、處理單元和控制單元3 個單元組成,工作原理:輸入單元中,傳感器采集路面數(shù)據(jù),攝像頭采集路面圖片,并將這些信息上傳到樹莓派;處理單元中,樹莓派對這些信息進行計算,得到模型車控制參數(shù),如車速、轉(zhuǎn)向角度等,再將這些控制參數(shù)傳送給模型車執(zhí)行器;控制單元中,模型車根據(jù)樹莓派傳送的控制參數(shù)控制電機,轉(zhuǎn)向電機執(zhí)行狀態(tài)。通過上述過程實現(xiàn)對模型車的控制,系統(tǒng)結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)圖Fig.1 System structure diagram
通過信息處理系統(tǒng)對流程進行建模的數(shù)據(jù)流的圖形表示形式是數(shù)據(jù)流程圖,數(shù)據(jù)流程圖可用作創(chuàng)建系統(tǒng)概述的第1 步,而無需深入細節(jié),也可以將其深入到過程中,數(shù)據(jù)處理的可視化是數(shù)據(jù)流程圖的一大優(yōu)勢。數(shù)據(jù)流程圖的主要目的是表明應(yīng)該從系統(tǒng)中選擇什么類型的信息作為輸入和輸出,以及如何在數(shù)據(jù)流圖中評估和存儲數(shù)據(jù)。
按照時間順序排列的對象交互將顯示順序圖。在某種情況下,它涉及并描述了對象和類以及消息在對象之間進行交換的消息,這些消息將在適當?shù)那闆r下實現(xiàn)所有功能,它們通常隨著系統(tǒng)的發(fā)展而在某些情況下被聯(lián)系起來。
(1)樹莓派4B 開發(fā)板
樹莓派可以看作一個很小的嵌入式計算機,如圖2 所示。樹莓派除了硬件配置略低,功能幾乎和電腦相同,可完成瀏覽網(wǎng)頁、編輯文本等基礎(chǔ)功能,亦可編寫和運行代碼,是嵌入式深度學習的理想平臺。本系統(tǒng)在樹莓派4B 上編寫和執(zhí)行代碼。
圖2 樹莓派4BFig.2 Raspberry Pi 4B
(2)TF 卡
樹莓派不自帶硬盤,所以自配一個TF 卡作為樹莓派的硬盤,推薦使用16 G 以上容量的TF 卡。
(3)樹莓派轉(zhuǎn)接T 型板
樹莓派轉(zhuǎn)接T 型板是一個電路轉(zhuǎn)接板,如圖3所示。樹莓派開發(fā)板上有40 個IO 口,為了使樹莓派GPIO 外接方便,可以使用一個T 型轉(zhuǎn)接板,把樹莓派的IO 信號轉(zhuǎn)接出來。
圖3 T 型轉(zhuǎn)接板Fig.3 T-adapter plate
(4)攝像頭
本系統(tǒng)需要一個采集路面信息的設(shè)備——攝像頭,如圖4 所示。攝像頭分辨率為1 000 萬像素,具有不錯的視頻清晰度,通過USB 連接到樹莓派。
圖4 攝像頭Fig.4 Camera
本系統(tǒng)軟件配置包括樹莓派操作系統(tǒng)和編程環(huán)境兩部分:
(1)使用Raspberry Pi OS 作為操作系統(tǒng),這是樹莓派官方支持的操作系統(tǒng)。將系統(tǒng)鏡像文件燒入TF 卡即可完成系統(tǒng)安裝。
(2)編程環(huán)境搭建
選擇Python 作為編程語言,還要安裝一些第三方庫,如NumPy,Pandas,OpenCV 等等。其中NumPy 是一個應(yīng)用廣泛的第三方Python 科學計算模塊,其數(shù)組處理功能強大。Pandas 是一個Python數(shù)據(jù)分析模塊,它提供了一些處理數(shù)據(jù)的基本接口。OpenCV 能處理從基本任務(wù)到發(fā)出諸如自動面部識別等的復雜任務(wù)的圖像/視頻。它支持C ++,C,Python 和Java 編程語言[2]。
本系統(tǒng)使用的Python 集成開發(fā)環(huán)境為Anaconda 和PyCharm,它們包含代碼編輯器、編譯器、調(diào)試器以及用戶圖形界面等,便于后續(xù)的代碼編寫與調(diào)試。Anaconda 是開源軟件,功能強大,可用來創(chuàng)建虛擬環(huán)境,安裝第三方庫,它包含很多依賴項,所以在安裝第三方庫時,會自動安裝依賴項,十分好用。PyCharm 有社區(qū)版和專業(yè)版,社區(qū)版可免費使用,其主要用來編寫代碼,調(diào)試代碼。
在圖像分析中,圖像的質(zhì)量直接影響到識別算法的設(shè)計和結(jié)果的準確性,因此在圖像分析前需要進行預處理。圖像預處理的主要目的是消除圖像中的不相關(guān)信息,提高相關(guān)信息的可檢測性,最大限度地簡化數(shù)據(jù),從而提高特征提取、圖像分割、匹配和識別的可靠性[3]。
一般的預處理流程如圖5 所示。
圖5 圖像預處理流程圖Fig.5 Image pre-processing flow chart
圖像噪聲是指圖像中存在的一些干擾信息,影響圖像的質(zhì)量,人們在觀看圖像時,會感覺圖片不清晰,直觀感受較差。圖像噪聲還將影響算法的準確性,可以將圖像噪聲視為一個多維的隨機過程,圖像中的噪聲有很多來源,來自不同渠道,如圖像采集、傳輸和壓縮過程中都有可能產(chǎn)生圖像噪聲。圖像噪聲有多種類型,如鹽和胡椒噪聲、高斯噪聲等。不同的噪聲類型需要使用不同的方法降低消除。
3.2.1 均值濾波
均值濾波也叫線性濾波,主要采用鄰域平均法。均值濾波的核心思想是,把整個圖像看作是由許多灰度不變的小塊組成,相鄰像素之間有很強的相關(guān)性,但噪聲在統(tǒng)計上是獨立的,因此鄰域的平均值可以用來替換原始圖像中的單個像素值。均值濾波用像素鄰域的均值灰度替換像素值,該方法非常適用于去除掃描得到的圖像中的顆粒噪聲[4]。對這種算法進行了改進,如加權(quán)平均濾波、灰度最小方差平均濾波、K-最近鄰平均濾波和對稱最近鄰平均濾波。需要注意的是,均值濾波算法降低了噪聲幅度,但范圍變大了,所以圖像邊緣變得模糊了。
式中:A'(i,j)——圖像像素矩陣;L——濾波半徑。
均值濾波結(jié)果A'(i,j)隨著L取值的增大而變得越來越模糊,這是因為經(jīng)過均值濾波后,圖像噪聲被分散到了周圍的圖像像素上,所以圖像噪聲的幅度減小,但圖像噪聲分散到了周圍的圖像像素上導致噪聲面積增大,圖像變得不清晰。這種現(xiàn)象可以采用一些方法解決,如設(shè)置一個閾值T,再將需要判定是否為噪聲的像素點和其相鄰像素的灰度進行差值運算,如果差值大于閾值T,則判定為噪聲點,如果差值小于閾值T,則判定不是噪聲點。
3.2.2 中值濾波
中值濾波不僅能較好地消除脈沖干擾噪聲,而且在有效抑制脈沖干擾的同時,還能在一定程度上降低圖像邊緣的模糊度,是一種基于排序統(tǒng)計理論的非線性信號處理技術(shù)[5],可有效抑制噪聲。它將數(shù)字圖像或數(shù)字序列中某一點的值用該點附近各點值的中位數(shù)代替,使灰度值差異較大的周圍像素取與周圍像素值接近的值代替,可消除孤立的噪聲點,對椒鹽噪聲有效[6]。中值濾波在濾除疊加白噪聲和長尾疊加噪聲方面有優(yōu)勢[7],但當圖像中有許多細節(jié),如許多點、線和尖峰時,中值濾波就不適合了。
中值濾波首先確定一個濾波窗口及其位置,然后按灰度大小對窗口內(nèi)的像素值排序,再取排序后的中位數(shù)作為窗口中心的像素值[8],原理如圖6 所示。
圖6 中值濾波原理圖Fig.6 Median filtering schematic
但是,當噪聲像素數(shù)量大于窗口像素總數(shù)的一半時,由于濾波效果不好,灰度排序的中間值仍然是噪聲像素的灰度值,此時如果增加窗口大小,會使原來的邊緣像素被其他區(qū)域的像素取代的機會增加,圖像更容易變得模糊[9],操作量也大大增加。
中值濾波和加權(quán)濾波都受窗口大小的影響很大。中值濾波的一個改進是自適應(yīng)中值濾波,它首先判斷窗口內(nèi)的中心像素是否是脈沖[10],如果不是,則輸出標準中值濾波的結(jié)果;如果是,則通過繼續(xù)增加窗口濾波大小來尋找非脈沖中值,所以這種方法與原來的統(tǒng)計中值濾波相比,更能保持清晰度和細節(jié)[11]。
直方圖均衡化是增強圖像對比度的方法,使圖像中包含的信息更加清晰,從而使有用的信息在后續(xù)處理中不容易丟失。
直方圖均衡主要有4 個步驟:(1)生成直方圖;(2)得到累加分布直方圖;(3)規(guī)則化;(4)反向映射回源圖像。
是將圖像上的像素點的灰度值設(shè)置為0 或255的過程,這意味著整個圖像被呈現(xiàn)出明顯的黑白效果。圖像二值化的關(guān)鍵問題是閾值的選擇[12]。
閾值選取可采用2 種常用方法:(1)狀態(tài)法,如果在給定圖像的直方圖上有2 個峰值的灰度分布,可以選擇2 個峰值之間的谷底點的灰度值作為二進制圖像的閾值T[13]。(2)微分直方圖法,當圖像中物體圖形與背景的邊界處于灰度急劇變化的部分時,不能直接使用圖像的灰度值,而是用差值來確定灰度值。
邊緣檢測是圖像處理和計算機視覺中分析圖像的一個極其重要的方法。邊緣檢測的目的是在圖像中找到由亮度急劇變化組成的像素集合,通常表示為輪廓線。如果可以準確獲得圖像中物體邊緣信息,就可以定未和測量實際物體的信息,比如可以獲得物體的面積、直徑、形狀信息等。
3.5.1 邊緣檢測的基本方法
Canny 邊緣檢測是使用1 階微分算子的一種圖像邊緣檢測算法,本系統(tǒng)在進行圖像邊緣檢測時使用此算法,經(jīng)測試此算法在本課題中相較于Sobel算子等效果更好。邊緣檢測算子的優(yōu)劣可以通過以下指標評定:(1)高的檢測率;(2)精確定位,檢測邊緣與實際邊緣之間的誤差要??;(3)明確的響應(yīng),一條邊緣只能響應(yīng)一次。
Canny 邊緣檢測步驟:(1)去噪聲;(2)計算梯度與方向角;(3)非最大值抑制;(4)滯后閾值化。
將預處理好的圖像送入訓練好的模型中,如果檢測出路面上有坑洼,則發(fā)出警報提醒駕駛員前方有坑洼。算法框圖如圖7 所示。
圖7 算法框架圖Fig.7 Algorithm framework diagram
對算法進行實際測試,其測試結(jié)果如圖8 所示。從檢測圖可以看出,算法成功檢測出路面上的坑洼,可信度為87%。說明此算法可以完成坑洼檢測任務(wù)。經(jīng)過大量測試,此系統(tǒng)可以很好地檢測出路面坑洼。
圖8 路面坑洼檢測結(jié)果圖Fig.8 Pavement potholes test results chart
在樹莓派4B 開發(fā)板上建立了一個基于深度學習的路面坑洼檢測系統(tǒng),主要進行了系統(tǒng)框架圖設(shè)計、軟硬件配置、算法設(shè)計以及算法檢測。測試表明此系統(tǒng)可以很好地檢測路面坑洼并及時提醒駕駛員,避免發(fā)生安全事故。此系統(tǒng)可以進一步升級,運用物聯(lián)網(wǎng)思想,將車輛檢測到的路面坑洼信息上傳到云端服務(wù)器,可由不同客戶獲取,幫助他們在途中確定坑洼位置。