馬 寧
(蘇州大學(xué),江蘇 蘇州 215100)
自改革開放以來(lái),我國(guó)國(guó)民經(jīng)濟(jì)不斷提高,公民可支配收入也不斷提高,對(duì)普通家庭來(lái)說(shuō),汽車不再是遙不可及的奢侈品。越來(lái)越多的家庭購(gòu)買了一輛汽車,條件好的家庭甚至更多。據(jù)調(diào)查,2003年,我國(guó)私家車擁有量不足600萬(wàn)輛;2014年超過(guò)1億輛;2019年底,突破2億輛,達(dá)到2.07億輛。汽車的普及固然給民眾生活帶來(lái)了方便,也帶來(lái)了堵車、停車難、環(huán)境污染等問(wèn)題。
當(dāng)下許多小區(qū)、商場(chǎng)、景區(qū)都修建了停車場(chǎng),大部分停車場(chǎng)都使用了自動(dòng)化停車系統(tǒng),但費(fèi)用較高,受環(huán)境限制多,難以滿足露天停車場(chǎng)的需求,且仍需要人工輔助管理;而一些資金不充裕、車位不充?;蛘咭颦h(huán)境限制不能安裝自動(dòng)化停車系統(tǒng)的停車場(chǎng)也需要及時(shí)統(tǒng)計(jì)車位信息,方便游客停車。
另一方面,過(guò)去十年,我國(guó)私家車數(shù)量翻了一倍,停車場(chǎng)建設(shè)節(jié)奏卻相對(duì)落后。據(jù)國(guó)家發(fā)改委估計(jì):當(dāng)前缺口已升至8000萬(wàn)個(gè)左右。加強(qiáng)停車場(chǎng)建設(shè)迫在眉睫,而另一方面,停車場(chǎng)建設(shè)費(fèi)用過(guò)高,導(dǎo)致很多中小企業(yè)無(wú)力承擔(dān),其余社會(huì)資本也持觀望態(tài)度,不愿加強(qiáng)投資?!安凰憷?,靜態(tài)收回建設(shè)成本需30多年?!盵1]其中自動(dòng)化停車系統(tǒng)雖然不是最貴的部分,但若能減少開支,也將減少大量成本,加速停車場(chǎng)建設(shè)。
因此針對(duì)以上需求,開發(fā)一種價(jià)格低廉、智能、受環(huán)境限制小、方便管理的車位實(shí)時(shí)監(jiān)測(cè)系統(tǒng)迫在眉睫。
Python3是一種廣泛使用的解釋性語(yǔ)言,它提供了高效的高級(jí)函數(shù)功能以及簡(jiǎn)單強(qiáng)大的面向?qū)ο蠊δ?。python語(yǔ)言邏輯清晰,代碼簡(jiǎn)潔,對(duì)中文有較好的支持,且內(nèi)置了多種常用數(shù)據(jù)類型,擁有大量功能強(qiáng)大的第三方庫(kù),如Numpy、Pandas、OpenCV、Django等等。經(jīng)過(guò)幾代的更新與迭代,Python功能越來(lái)越完善。在2021年10月,語(yǔ)言流行指數(shù)排行榜Tiobe將Python加冕為最受歡迎的編程語(yǔ)言,是20年來(lái)首次將其置于Java、C等老牌編程語(yǔ)言之上,可見其火熱程度。本文使用解釋器版本為Python3.7,IDE為Pycharm2021。
OpenCV是一個(gè)基于Apache2.0發(fā)行的機(jī)器視覺和機(jī)器學(xué)習(xí)開源庫(kù),它具有良好的兼容性,可以運(yùn)行在Linux、Windows、Android和Mac OS等多個(gè)操作系統(tǒng)上。它整體由C語(yǔ)言和C++語(yǔ)言構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等編程語(yǔ)言的拓展接口,能夠使用多種語(yǔ)言完成開發(fā)工作,其內(nèi)置了大量圖像處理和計(jì)算機(jī)視覺領(lǐng)域的通用算法,可以實(shí)現(xiàn)物體識(shí)別、人臉識(shí)別、動(dòng)作識(shí)別、運(yùn)動(dòng)跟蹤等多種功能,是圖像處理、機(jī)器視覺領(lǐng)域重要的軟件庫(kù)[2-3]。
本文使用OpenCV版本為4.5.3.56。
人類的視覺系統(tǒng)在大腦可視皮層是分級(jí)處理的,大腦的處理視覺信息的工作過(guò)程是一個(gè)不斷迭代、不斷抽象的過(guò)程。首先從瞳孔攝入的原始圖像開始,再由大腦皮層某些細(xì)胞發(fā)現(xiàn)物體的邊緣和方向;然后由大腦判定眼前物體的大致形狀,進(jìn)行抽象化;接著大腦進(jìn)一步進(jìn)行判定物體的屬類;最后通過(guò)分析出的信息,得出結(jié)論。
CNN網(wǎng)絡(luò)全稱卷積神經(jīng)網(wǎng)絡(luò),是受人類視覺神經(jīng)系統(tǒng)啟發(fā)而開發(fā)出的深度學(xué)習(xí)模式。它可分為卷積層、池化層和全連接層,其中卷積層用來(lái)提取圖像中的局部特征;池化層用來(lái)大幅降低參數(shù)量級(jí);全連接層用來(lái)輸出結(jié)果。卷積神經(jīng)網(wǎng)絡(luò)能夠較好地處理像素和音視頻等有穩(wěn)定的效果且對(duì)數(shù)據(jù)沒有額外的特征工程要求的數(shù)據(jù)信息,是深度學(xué)習(xí)的經(jīng)典算法,被廣泛應(yīng)用于計(jì)算機(jī)視覺、自然語(yǔ)言處理等領(lǐng)域。
系統(tǒng)設(shè)計(jì)流程大致可分為預(yù)處理,車位劃分,CNN模型構(gòu)建與訓(xùn)練,車位識(shí)別等階段。預(yù)處理階段將對(duì)信息進(jìn)行處理,只保留其中的有效信息;車位劃分階段將車位提取出來(lái),分別保存作為樣本;模型訓(xùn)練階段將訓(xùn)練二分類模型識(shí)別停車位上是否有車;最后對(duì)視頻的實(shí)時(shí)監(jiān)測(cè),并標(biāo)記空位、統(tǒng)計(jì)數(shù)量,實(shí)時(shí)顯示。
首先導(dǎo)入所需的停車場(chǎng)監(jiān)控視頻,該視頻下載自網(wǎng)絡(luò),采用該視頻的理由是光線充足,樣本量大,交通環(huán)境相對(duì)不復(fù)雜,利于設(shè)計(jì)和訓(xùn)練。視頻的本質(zhì)是一組連續(xù)的圖像,當(dāng)圖像變化超過(guò)24幀/s以上時(shí),根據(jù)人眼的視覺暫留原理,會(huì)在大腦中產(chǎn)生的連續(xù)的畫面。因此對(duì)于視頻的處理的本質(zhì)就是對(duì)圖像的處理。又因?yàn)橐曨l拍攝機(jī)位固定不動(dòng),所以對(duì)整個(gè)視頻的車位劃分可以簡(jiǎn)化到對(duì)單幀圖像的車位劃分,大大提升了效率[4-5]。
為了方便后期處理,首先要進(jìn)行背景過(guò)濾,目的是過(guò)濾掉圖像中無(wú)關(guān)的背景信息,方便后續(xù)的識(shí)別,方法是定義掩模,設(shè)置最大閾值和最小閾值,將閾值區(qū)間外的信息轉(zhuǎn)化為零值信息。
第二步要進(jìn)行二值化處理,將圖像轉(zhuǎn)化為灰度圖。這是因?yàn)榛叶葓D只保留了亮度信息,省略了大量無(wú)關(guān)信息,有效降低了后期運(yùn)算量。
第三步進(jìn)行Canny邊緣檢測(cè),該方法分為四個(gè)步驟:高斯濾波、計(jì)算梯度值和梯度方向、過(guò)濾非最大值、雙閾值檢測(cè)法。它可以有效確定真實(shí)的和潛在的邊緣,能夠較好地檢測(cè)出大部分所需邊界[6]。
因?yàn)橥\噲?chǎng)的邊界不規(guī)則,外部的樓頂、道路信息不屬于停車場(chǎng)范圍,需要過(guò)濾掉,所以第四步需要沿停車場(chǎng)路徑設(shè)置8個(gè)節(jié)點(diǎn),用來(lái)框選停車場(chǎng)的圖像,使用零點(diǎn)信息圖像覆蓋掉不需要的部分,僅保留停車場(chǎng)區(qū)域。至此預(yù)處理階段的工作就完成了。見圖1、圖2。
圖1 原始圖像
圖2 預(yù)處理結(jié)果
通過(guò)觀察可以發(fā)現(xiàn),停車場(chǎng)車位由橫豎不同的直線構(gòu)成,可以通過(guò)檢測(cè)這些直線,進(jìn)一步劃分區(qū)域。方法是使用霍夫變換,霍夫變換是一種廣泛應(yīng)用在計(jì)算機(jī)視覺的一種特征檢測(cè)算法,用來(lái)找出圖形中的某些特征,霍夫變換通過(guò)給定的要辨別的形狀的種類,接著在參數(shù)空間中通過(guò)投票機(jī)制來(lái)決定物體的形狀,并過(guò)濾掉間隔過(guò)大或過(guò)小的物體,來(lái)獲取到較為準(zhǔn)確的結(jié)果。圖像中某些裂痕或其他線段可能會(huì)被誤認(rèn)為車位線,而車位線基本呈豎直或水平方向,可以通過(guò)計(jì)算線段斜率來(lái)進(jìn)一步剔除不合規(guī)的線段,提高準(zhǔn)確率。
接著對(duì)停車位進(jìn)行區(qū)域劃分,通過(guò)觀察可以發(fā)現(xiàn),停車場(chǎng)的車位可分為17列,可以將相近橫坐標(biāo)的車位線分類到同一集合,再按縱坐標(biāo)將各個(gè)集合中的車位線從下到上進(jìn)行排序,并通過(guò)哈希算法判斷是否出現(xiàn)重復(fù)的線段,若出現(xiàn)則將其剔除。這樣做的目的是后續(xù)處理時(shí),對(duì)整個(gè)停車場(chǎng)的處理可以看做對(duì)17個(gè)區(qū)域的單獨(dú)處理,更方便模型訓(xùn)練和數(shù)量統(tǒng)計(jì)。
但是此時(shí)算法獲得的車位線集合仍然不夠理想,這是因?yàn)椴糠周囕v遮擋線段,造成霍夫變換識(shí)別不準(zhǔn)確。為了解決這一問(wèn)題,需要將各個(gè)車位線集合的橫線長(zhǎng)度統(tǒng)一取其眾數(shù),并將所有線段的起始橫坐標(biāo)點(diǎn)設(shè)為各個(gè)車位線集合的最左值,接著將單個(gè)車位線集合中所有的豎線合并成同一條豎線。這樣劃分的車位就更加準(zhǔn)確和統(tǒng)一。
可以看到劃分的結(jié)果基本符合預(yù)期,接著將獲得的車位坐標(biāo)信息寫入pickle文件,用以保存。最后按劃分好的車位線集合裁切車位,由于圖像像素值過(guò)小,所以在保存前需要將其進(jìn)行放大操作,最后保存到測(cè)試集文件夾中,用作下一步的模型訓(xùn)練與測(cè)試中。見下頁(yè)圖3。
圖3 車位劃分結(jié)果
獲得車位圖像后將其按照70%、30%的比例劃分為訓(xùn)練集、測(cè)試集,再將其按照有無(wú)車輛占據(jù)車位分別劃分為占據(jù)集和非占據(jù)集,用于后續(xù)模型訓(xùn)練。
本次模型訓(xùn)練使用VGG16網(wǎng)絡(luò),VGGNet是牛津大學(xué)和谷歌DeepMind于2014年合作研發(fā)的神經(jīng)網(wǎng)絡(luò),由13層卷積層+3層全連接層而組成。卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心,卷積過(guò)程本質(zhì)是基于一個(gè)小矩陣,也就是卷積核,在圖像的每層像素矩陣上不斷按步長(zhǎng)掃描過(guò)去,掃到的數(shù)值與卷積核對(duì)應(yīng)位置的數(shù)相乘,然后相加求和,全部掃完就會(huì)生成一個(gè)新的矩陣。卷積核相當(dāng)于一個(gè)過(guò)濾器,用于提取圖像特征,卷積核一般有3*3和5*5大小,通常使用是3*3大小的,訓(xùn)練效果更好。全連接層指的是第n-1層和第n層的各個(gè)節(jié)點(diǎn)之間都有連接,即第n層的節(jié)點(diǎn)的激活函數(shù)輸入是第n-1層所有節(jié)點(diǎn)的加權(quán),用來(lái)把前邊提取到的特征綜合起來(lái)。在整個(gè)卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用。
由于數(shù)據(jù)集規(guī)模較小,為了得到較好的模型,第三步進(jìn)行數(shù)據(jù)增強(qiáng)操作。數(shù)據(jù)增強(qiáng)按照使用方法可分為線上增強(qiáng)和線下增強(qiáng),其中線下增強(qiáng)適用于規(guī)模較小的數(shù)據(jù)集,能夠有效增加其的大小。增強(qiáng)的倍數(shù)取決于轉(zhuǎn)換圖片的個(gè)數(shù),比如對(duì)所有圖片進(jìn)行旋轉(zhuǎn)操作,將使數(shù)據(jù)集增加一倍。常用的數(shù)據(jù)增強(qiáng)有兩種,有監(jiān)督和無(wú)監(jiān)督,常用的是有監(jiān)督數(shù)據(jù)增強(qiáng)型,它是基于現(xiàn)有的數(shù)據(jù)集,通過(guò)分析數(shù)據(jù)的完備性,采用一定的規(guī)則對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行擴(kuò)充。有監(jiān)督數(shù)據(jù)增強(qiáng)又可以細(xì)分為單樣本數(shù)據(jù)增強(qiáng)和多樣本數(shù)據(jù)增強(qiáng),在實(shí)際應(yīng)用中,單樣本數(shù)據(jù)增強(qiáng)使用更多。
最后將訓(xùn)練集的數(shù)據(jù)導(dǎo)入模型,進(jìn)行訓(xùn)練。所有程序運(yùn)行完成后得到的測(cè)試集的準(zhǔn)確率達(dá)91.4%,準(zhǔn)確率基本符合預(yù)期。后續(xù)可以將VCC16改為ResNet50,以進(jìn)一步提高準(zhǔn)確率,但ResNet50的訓(xùn)練速度相較VCC16較慢,從效率角度考慮,最終選擇了VCC16。最后將訓(xùn)練好的模型保存,用于下一步操作。
首先導(dǎo)入視頻,將視頻逐幀提取,并對(duì)逐幀畫面用已經(jīng)訓(xùn)練好的模型進(jìn)行測(cè)試。并對(duì)每幀的車輛數(shù)據(jù)進(jìn)行統(tǒng)計(jì),在視頻左上角顯示車位總數(shù)和剩余空位。此時(shí)視頻較為卡頓,可以在后續(xù)優(yōu)化中使用多線程或多GPU進(jìn)行處理,提高速度。見圖4。
圖4 車位檢測(cè)結(jié)果
程序會(huì)對(duì)視頻進(jìn)行實(shí)時(shí)處理和檢測(cè),視頻中未被占據(jù)的車位都被標(biāo)記為綠色,被占據(jù)的車位沒有任何標(biāo)記,通過(guò)對(duì)綠色矩形的計(jì)數(shù),在左上角實(shí)時(shí)顯示車位總數(shù)和剩余車位。此時(shí)視頻某些時(shí)段對(duì)某些區(qū)域出現(xiàn)了誤標(biāo)記,比如將停車場(chǎng)的引導(dǎo)線區(qū)域被標(biāo)記為空停車位,或者將帳篷標(biāo)記為占用車位。可以通過(guò)修改CNN模型進(jìn)一步改善。其余區(qū)域的檢測(cè)和統(tǒng)計(jì)基本符合預(yù)期,當(dāng)車輛離開車位,視頻中便以綠色進(jìn)行標(biāo)記,同時(shí)空位加一;當(dāng)車輛進(jìn)入車位,視頻的綠色標(biāo)記便消失,同時(shí)空位減一。實(shí)現(xiàn)了對(duì)停車位信息的處理和檢測(cè)。
通過(guò)對(duì)OpenCV和卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)了對(duì)停車場(chǎng)車位的占用情況進(jìn)行了實(shí)時(shí)監(jiān)測(cè)和統(tǒng)計(jì),可以部署到較為開闊的停車場(chǎng),方便管理。此外,該系統(tǒng)還可以進(jìn)一步優(yōu)化,以提高速度,適應(yīng)更復(fù)雜的場(chǎng)景,從而為停車場(chǎng)管理提供更加有效、及時(shí)的數(shù)據(jù)。
現(xiàn)代工業(yè)經(jīng)濟(jì)和信息化2023年1期