




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于 ARM 的車牌識(shí)別技術(shù)研究與實(shí)現(xiàn)1前言1.1 課題背景和目的意義隨著經(jīng)濟(jì)的不斷發(fā)展,交通需求的不斷增加,全球各國(guó)都在受到交通擁堵的困擾。在這種情況下,智能交通系統(tǒng) ITS(elligent Transporion Systems)孕育而生。它是解決各種交通問(wèn)題的主要之一,在交通中起著重要的作用12。智能交通系統(tǒng)是指包括、通訊技術(shù)、控制技術(shù)、計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)等,綜合起來(lái)應(yīng)用在整個(gè)交通管理中,從而發(fā)揮實(shí)時(shí)、準(zhǔn)確的控制和管理交通的綜合管理系統(tǒng)23。車輛牌照是車輛的,在交通系統(tǒng)中有著不可替代的作用。系統(tǒng)、優(yōu)化交通管理系統(tǒng)的實(shí)現(xiàn)都離不開(kāi)對(duì)車輛牌照的識(shí)別。車輛牌照識(shí)別系統(tǒng)是智能交通系統(tǒng)的一個(gè)重要
2、組成部分,它能從一副圖像中自動(dòng)提取車牌圖像,分割車牌圖像中的字符,進(jìn)而對(duì)字符進(jìn)行識(shí)別,從而可以在無(wú)需對(duì)車輛外加其他裝置的情況下實(shí)現(xiàn)對(duì)車輛牌照的自動(dòng)識(shí)別4。1.2 解決問(wèn)題和技術(shù)要求本課題解決問(wèn)題主要包括:通過(guò)支持向量機(jī)學(xué)習(xí)識(shí)別車牌圖像;通過(guò)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)識(shí)別車牌字符;通過(guò)開(kāi)發(fā)模式引導(dǎo)程序?qū)崿F(xiàn) TFTPLinux 內(nèi)核和掛載 NFS 根文件系統(tǒng);通過(guò)文件系統(tǒng);通過(guò)模式引導(dǎo)程序?qū)崿F(xiàn) Nand Flash 加載Linux 內(nèi)核和掛載 YAFFS2 根頭捕獲車輛圖像;通過(guò)網(wǎng)頁(yè)進(jìn)行交互。本課題技術(shù)要求主要包括:熟悉 OpneCV(Open Source Computer ViLibrary)編程;了解支持
3、向量機(jī)和神經(jīng)網(wǎng)絡(luò)的原理;熟悉 ARM 處理器引導(dǎo)啟制,Linux 系統(tǒng)內(nèi)核啟制和文件系統(tǒng)掛載機(jī)制;熟悉 TCP/IP 協(xié)議;熟悉 Linux 驅(qū)動(dòng)編程;熟悉 CGI(Common Gatewayerface)編程。1.3 研究現(xiàn)狀和發(fā)展趨勢(shì)從 20 世紀(jì) 80 年代起,、澳大利亞、法國(guó)、意大利、英國(guó)、韓國(guó)以及我國(guó)都車輛牌照自動(dòng)識(shí)別技術(shù)的研究。目前國(guó)外已開(kāi)發(fā)出不少成熟產(chǎn)品,如德克薩斯儀器公司的 TIRIS AVI 系統(tǒng),以色列 Hi_Tech 公司的 See/Car System 系統(tǒng),新加坡 Optasia 公司的 LPRS 系統(tǒng)等5。我國(guó)在 90 年始了車輛牌照自動(dòng)識(shí)別技術(shù)的研究。目前比較成
4、產(chǎn)品有漢王公司的漢王眼,杭州海康威視、信路威等車輛牌照識(shí)別產(chǎn)品。這些產(chǎn)品基本能滿內(nèi)實(shí)際應(yīng)用。但是這些產(chǎn)品對(duì)環(huán)境的要求高,在不同的光照環(huán)境下會(huì)影響識(shí)別率。所以如何準(zhǔn)確的定位車牌,識(shí)別字符,提高識(shí)別率仍是一項(xiàng)重要的任務(wù)5。車輛牌照識(shí)別系統(tǒng)是推進(jìn)交通管理自動(dòng)化的之一,其主要功能是通過(guò)攝像設(shè)備車輛圖像,并通過(guò)圖像處理、機(jī)器視覺(jué)、人工智能等技術(shù),在車輛圖像中定位車牌和識(shí)別字符。它能夠?qū)^(guò)往的車輛進(jìn)行實(shí)時(shí)、控制交通。并能被廣泛地應(yīng)用于紅綠燈車輛檢測(cè),交通車流量統(tǒng)計(jì),發(fā)展必將大大加速智能交通系統(tǒng)的進(jìn)程6。車輛追蹤,物業(yè)車輛管理等領(lǐng)域。其2方案論證2.1 車牌定位算法選擇車牌定位算法在車牌識(shí)別技術(shù)中占有很重要
5、的地位,一個(gè)車牌識(shí)別系統(tǒng)的識(shí)別率往往取決于車牌定位的準(zhǔn)確度。主流的車牌定位算法有兩種6。第一種是基于邊緣檢測(cè)的車牌定位算法。從車牌紋理特征入手,找出車牌不同于背景圖像的特征是這種車牌定位算法的關(guān)鍵。觀察多幅車輛圖像會(huì)發(fā)現(xiàn)車身和背景的紋理多為橫向紋理,而車牌字符則為縱向紋理?;谶@些紋理特征可以從背景圖像中定位出車牌。這類方法的優(yōu)點(diǎn)是計(jì)算速度快。缺點(diǎn)是定位出來(lái)的區(qū)域較多,無(wú)法直接定位出車牌。第二種是基于顏色信息的車牌定位算法。從車牌顏色特征入手,找出車牌不同于背景圖像的特征是這種車牌定位算法的關(guān)鍵。根據(jù)車牌顏色的先驗(yàn)知識(shí)知道車牌顏色主要包含藍(lán)底白字、黃底黑字等顏色特征?;谶@些顏色特征可以從背景
6、圖像中定位出車牌。這類方法的優(yōu)點(diǎn)是定位出來(lái)的區(qū)域較少。缺點(diǎn)是計(jì)算速度慢,當(dāng)車牌底色和背景顏色相近時(shí)無(wú)法定位出車牌。本文采用的是基于邊緣檢測(cè)和支持向量機(jī)相結(jié)合的車牌定位算法。首先通過(guò)濾波器濾波、形態(tài)學(xué)變換、角點(diǎn)檢測(cè)算法來(lái)分割圖像中的可能存在車牌的區(qū)域。然后通過(guò)訓(xùn)練支持向量機(jī)來(lái)對(duì)可能存在車牌的區(qū)域進(jìn)行分類,識(shí)別出車牌區(qū)域。從而達(dá)到車牌定位的目的。2.2 字符識(shí)別算法選擇字符識(shí)別算法直接影響車牌識(shí)別系統(tǒng)的最終結(jié)果,一個(gè)車牌識(shí)別系統(tǒng)的識(shí)別率往往決定于字符識(shí)別的準(zhǔn)確度。主流的字符識(shí)別算法有兩種6。第一種是基于模板匹配的字符識(shí)別算法。字符識(shí)別的最簡(jiǎn)單方法是對(duì)提取的字符輪廓與標(biāo)準(zhǔn)的字符輪廓進(jìn)行相似度比較。矩
7、是通過(guò)對(duì)輪廓上所有點(diǎn)進(jìn)行積分運(yùn)算而得到的輪廓特征。矩依賴于所選的坐標(biāo)系,這意味著字符旋轉(zhuǎn)后就無(wú)法正確的匹配。Hu矩是歸一化中心距的線性組合。Hu 矩對(duì)縮放、旋轉(zhuǎn)和對(duì)稱變換具有不變性。模板匹配算法是通過(guò)提取字符 Hu 矩來(lái)進(jìn)行字符識(shí)別。這類方法的優(yōu)點(diǎn)是算法實(shí)現(xiàn)簡(jiǎn)單,識(shí)別速度快。缺點(diǎn)是識(shí)別率低,無(wú)法識(shí)別不同角度拍攝的車牌字符圖像。第二種是基于神經(jīng)網(wǎng)絡(luò)的字符識(shí)別算法。字符識(shí)別的一般方法是對(duì)提取的字符特征與標(biāo)準(zhǔn)的字符特征進(jìn)行相似度比較。字符特征包括字符圖像的直方圖特征和低分辨率特征等。神經(jīng)網(wǎng)絡(luò)是一種受生物學(xué)啟發(fā)而產(chǎn)生的一種模擬人腦的數(shù)學(xué)算法模型,它使用梯度下降調(diào)整神經(jīng)網(wǎng)絡(luò)層節(jié)點(diǎn)之間連接權(quán)值來(lái)最小化誤差
8、。神經(jīng)網(wǎng)絡(luò)算法通過(guò)提取字符圖像特征來(lái)識(shí)別字符。這類方法的優(yōu)點(diǎn)是識(shí)別速度快,具有魯棒性。缺點(diǎn)是需要大量的訓(xùn)練樣本。本文采用的是基于神經(jīng)網(wǎng)絡(luò)的字符識(shí)別算法。首先,通過(guò)閾值變換和角點(diǎn)檢測(cè)來(lái)分割車牌圖像中的字符。然后,通過(guò)訓(xùn)練神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)字符圖像進(jìn)行識(shí)別,識(shí)別出車牌號(hào)碼。從而達(dá)到字符識(shí)別的目的。3設(shè)計(jì)論述應(yīng)用程序設(shè)計(jì)車牌規(guī)格介紹中民機(jī)動(dòng)車號(hào)牌的規(guī)格共有 19 種。本文以小型汽車號(hào)牌為例來(lái)說(shuō)明車牌識(shí)別系統(tǒng)的設(shè)計(jì)方法。該方法同樣適用于其他規(guī)格的汽車號(hào)牌。小型汽車號(hào)牌如圖 1 所示,外輪廓尺寸為 440mm140mm,每個(gè)字符的輪廓尺寸為 90mm45mm7。小型汽車號(hào)牌共有七個(gè)字符,字符被點(diǎn)號(hào)分為兩組。點(diǎn)
9、號(hào)前兩個(gè)字符表示省、示序號(hào),由、直轄市的簡(jiǎn)稱,由漢字和英文字符組成。點(diǎn)號(hào)后五個(gè)字符表數(shù)字和英文字符組成。序號(hào)每一位可以單獨(dú)使用數(shù)字和英文字符,英文字符中不包含 O 和 I。圖 1小型汽車號(hào)牌3.1.2車牌識(shí)別架構(gòu)車牌識(shí)別架構(gòu)如圖 2 所示,分為車牌定位和字符識(shí)別兩個(gè)部分。車牌定位的目的是從原始圖像中找出車牌位置。字符識(shí)別的目的是從車牌圖像中識(shí)別出車牌號(hào)碼。車牌定位又分為車牌分割和車牌識(shí)別,因?yàn)檐嚺谱R(shí)別中使用了支持向量機(jī),所以在這之前先要進(jìn)行車牌學(xué)習(xí)。字符識(shí)別又分為字符分割和字符識(shí)別,因?yàn)樽址R(shí)別中使用了神經(jīng)網(wǎng)絡(luò),所以在這之前先要進(jìn)行字符學(xué)習(xí)。接下來(lái)對(duì)這幾個(gè)部分做詳細(xì)論述。圖 2車牌識(shí)別架構(gòu)3.
10、1.3車牌分割設(shè)計(jì)車牌分割流程如圖 3 所示,其中最重要的是均值濾波、垂直檢測(cè)、形態(tài)變換、漫水填充和裁剪圖像五個(gè)部分。接下來(lái)對(duì)這些部分做詳細(xì)說(shuō)明。圖 3車牌分割流程均值濾波的作用是為了減少圖像上的噪聲,使用的方法是均值濾波8。均值濾波輸出圖像的每一個(gè)像素是卷積核中輸入圖像對(duì)應(yīng)像素的簡(jiǎn)單平均值。本擇的卷積核大小為 55,均值濾波核如公式 1 所示。原始圖像如圖 4 所示,均值濾波結(jié)果如圖 5 所示。1 11 11(1)K =KwidthKheight圖 4原始圖 5均值濾波結(jié)果垂直檢測(cè)的作用是為了檢測(cè)均值濾波結(jié)果中的縱向紋理,使用的方法是 Sobel 求導(dǎo)9。如果需要表示圖像的紋理變化,那么需要
11、找到紋理變化的特征。從圖像的紋理邊緣部分可以看到這些像素值明顯變化了,通過(guò)導(dǎo)數(shù)可以表示這些像素值的改變。 Sobel 算子是一個(gè)離散微分算子,可以用它來(lái)計(jì)算圖像灰度函數(shù)的近似梯度。本擇的 Sobel 算子內(nèi)核的大小為 33,Sobel 算子內(nèi)核如公式 2 所示。垂直檢測(cè)結(jié)果如圖 6 所示。1Gy = 0+120+210 I+1(2)圖 6垂直檢測(cè)結(jié)果形態(tài)變換的作用是為了連通垂直檢測(cè)結(jié)果中的縱向紋理,使用的方法是形態(tài)學(xué)閉運(yùn)算。形態(tài)學(xué)閉運(yùn)算能夠連通形態(tài)核內(nèi)的區(qū)域。本態(tài)變換結(jié)果如圖 7 所示。擇的形態(tài)核大小為 213。形漫水填充的作用是為了連通形態(tài)變換結(jié)果中顏色相近的區(qū)域,使用的方法是漫水填充算法1
12、0。車牌具有相同背景底色,可以利用這個(gè)特征來(lái)填充顏色相同的區(qū)域,便于接下來(lái)對(duì)圖像的裁剪。本取距離形態(tài)變換結(jié)果中白域中心的 10 個(gè)隨機(jī)點(diǎn)對(duì)圖像進(jìn)行填充,來(lái)獲得更大的連通區(qū)。漫水填充結(jié)果如圖 8 所示。裁剪圖像的作用是為了從漫水填充結(jié)果中篩選出車牌圖像,并旋轉(zhuǎn)圖像位置和調(diào)整大小。在裁剪圖像時(shí),利用車牌的寬高比 440/140 對(duì)漫水填充結(jié)果的多個(gè)區(qū)域進(jìn)行裁剪,最后篩選出符合要求的車牌圖像。裁剪圖像的結(jié)果如圖 9 所示。圖 7形態(tài)變換結(jié)果圖 8漫水填充結(jié)果圖 9裁剪圖像結(jié)果3.1.4車牌學(xué)習(xí)設(shè)計(jì)從車牌分割中可以得到包含車牌在內(nèi)的多幅圖像。為了從這些圖像中識(shí)別出車牌圖像,需要對(duì)這些圖像進(jìn)行分類,即將
13、圖像分為車牌圖像和非車牌圖像兩類。本文使用支持向量機(jī)來(lái)實(shí)現(xiàn)分類。在使用支持向量機(jī)進(jìn)行分類前,首先需要對(duì)支持向量機(jī)進(jìn)行訓(xùn)練。接下來(lái)介紹支持向量機(jī)的原理,然后詳細(xì)說(shuō)明支持向量機(jī)的訓(xùn)練過(guò)程。支持向量機(jī) SVM(Support Vector Machine)是一個(gè)監(jiān)督式分類器。它是一個(gè)能夠?qū)⒉煌惖臉颖驹跇颖究臻g內(nèi)分隔的超平面。換句話說(shuō),如果給定一些標(biāo)記好的訓(xùn)練樣本,SVM 算法能輸出一個(gè)最優(yōu)分隔超平面11。假設(shè)一些分類屬于兩類二維點(diǎn),這些點(diǎn)可以通過(guò)直線分割,需要找到一條最優(yōu)的分割線。分隔直線如圖 10 所示12。圖 10分隔直線在圖 10 中可以看到有多條可能的直線將樣本分開(kāi)。那么是不是存在某條直線
14、比其他的更加合適呢?距離樣本太近的直線不是最優(yōu)的,因?yàn)檫@樣的直線對(duì)噪聲敏感度高,泛化性較差。所以目標(biāo)就是找到一條直線,離所有點(diǎn)的距離最遠(yuǎn)。SVM 算法的實(shí)質(zhì)是找出一個(gè)能夠?qū)⒛硞€(gè)值最大化的超平面,這個(gè)值就是超平面離所有訓(xùn)練樣本的最小距離。這個(gè)最小距離在 SVM 術(shù)語(yǔ)中稱為間隔。換句話說(shuō),最優(yōu)分隔超平面的目標(biāo)是最大化訓(xùn)練數(shù)據(jù)的間隔。上例中的最優(yōu)化分隔超平面如圖 11 所示12。圖 11最優(yōu)分隔超平面在分割車牌結(jié)果中可以得到兩類圖像樣本。一類是車牌樣本,另一類是非車牌樣本。對(duì)支持向量機(jī)訓(xùn)練實(shí)質(zhì)上就是根據(jù)這兩類圖像樣本,找出最優(yōu)分隔超平面。車牌學(xué)習(xí)流程如圖 12 所示,其中最重要的是設(shè)置數(shù)據(jù)、學(xué)習(xí)模型
15、和測(cè)試模型三個(gè)部分。接下來(lái)對(duì)這些部分做詳細(xì)說(shuō)明。圖 12車牌學(xué)習(xí)流程設(shè)置數(shù)據(jù)的作用是為了提取圖像特征。支持向量機(jī)不僅可以對(duì)二維特征分類,還可以對(duì)特征分類。本文把圖像的像素直接作為特征,用于支持向量機(jī)的訓(xùn)練和分類。當(dāng)然這不是最好的特征提取方法,更好的特征提取方法有主成分分析、換、紋理分析等。變學(xué)習(xí)模型的作用是為了構(gòu)建對(duì)圖像進(jìn)行分類的支持向量機(jī)模型。支持向量機(jī)的核函數(shù)可以把線性不可分的特征到空間,使之變?yōu)榫€性可分。本文在訓(xùn)練支持向量機(jī)時(shí)選擇的核函數(shù)是線性核函數(shù),不對(duì)特征進(jìn)行,訓(xùn)練迭代次數(shù)為 1000次。經(jīng)過(guò)測(cè)試可以看到該訓(xùn)練參數(shù)能夠很好的對(duì)車牌圖像和非車牌圖像進(jìn)行分類。測(cè)試模型的作用是為了對(duì)學(xué)習(xí)模
16、型時(shí)的參數(shù)進(jìn)行調(diào)整。本文訓(xùn)練的車牌樣本和非車牌樣本各 40 個(gè),測(cè)試的車牌樣本和非車牌樣本各 10 個(gè)。由于樣本數(shù)量有限,測(cè)試結(jié)果的識(shí)別率都是 100%。相信隨著樣本數(shù)量增加,使用該方法對(duì)車牌圖像進(jìn)行識(shí)別也能取得同樣優(yōu)秀的識(shí)別率。3.1.5字符分割設(shè)計(jì)字符分割流程如圖 13 所示,其中最重要的是二值變化、獲取輪廓和裁剪輪廓三個(gè)部分。接下來(lái)對(duì)這些部分做詳細(xì)說(shuō)明。圖 13字符分割流程二值變化的作用是為了對(duì)圖像進(jìn)行預(yù)處理,使用的方法是二進(jìn)制閾值化。在運(yùn)用這種閾值變化時(shí),首先要選定一個(gè)特定閾值。根據(jù)所選閾值,將灰度值大于該閾值的像素點(diǎn)的灰度值變?yōu)?255,灰度值小于該閾值的像素點(diǎn)的灰度值變?yōu)?0。本特
17、定閾值為 200。閾值變化結(jié)果如圖 14 所示。擇的圖 14閾值變化結(jié)果獲取輪廓的作用是為了從閾值變化結(jié)果中分割出字符圖像,使用的方法是查找輪廓。首先將二值圖像標(biāo)記為輪廓和孔。輪廓表示白域的外部邊界,孔表示白域分割出來(lái)。本文只檢查圖像域的。通過(guò)查找輪廓可以把閾值變化結(jié)果中白最外層的輪廓,使用 Teh-Chin 鏈 近算法。輪廓裁剪的作用是為了分割獲取輪廓結(jié)果中查找到的字符,同時(shí)旋轉(zhuǎn)位置和調(diào)整大小。在輪廓裁剪時(shí),利用字符的寬高比 90/45 對(duì)獲取輪廓的多個(gè)區(qū)域進(jìn)行裁剪,最后篩選出符合要求的字符圖像。輪廓裁剪結(jié)果如圖 15 所示。圖 15輪廓裁剪結(jié)果3.1.6字符學(xué)習(xí)設(shè)計(jì)為了從字符分割結(jié)果中識(shí)別
18、出車牌字符,需要用到神經(jīng)網(wǎng)絡(luò)模型。在使用神經(jīng)網(wǎng)絡(luò)對(duì)字符圖像進(jìn)行識(shí)別前,首先需要對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。接下來(lái)介紹神經(jīng)網(wǎng)絡(luò)的原理,然后詳細(xì)說(shuō)明神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程。人工神經(jīng)網(wǎng)絡(luò) ANN(Artifil Neural Networks)是一種模仿動(dòng)物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的數(shù)學(xué)算法模型。這種網(wǎng)絡(luò)根據(jù)系統(tǒng)的復(fù)雜程度,通過(guò)調(diào)整大量節(jié)點(diǎn)之間相互連接的關(guān)系,從而達(dá)到處理信息的目的13。假設(shè)一些分類屬于兩類三維點(diǎn),對(duì)這些點(diǎn)進(jìn)行分類使用一個(gè)三層神經(jīng)網(wǎng)絡(luò)。假設(shè)輸入層 3 個(gè)節(jié)點(diǎn),隱藏層 5 個(gè)節(jié)點(diǎn),輸出層 2 個(gè)節(jié)點(diǎn),則所構(gòu)建成的神經(jīng)網(wǎng)絡(luò)模型如圖 16 所示14。圖 16神經(jīng)網(wǎng)絡(luò)模型每一個(gè)節(jié)點(diǎn)可以看
19、做是一個(gè)神經(jīng)細(xì)胞,神經(jīng)細(xì)胞模型如圖 17 所示14。x1 到 xN 表示輸入,1 表示先驗(yàn)偏差;wi0 到 wiN 表示權(quán)重,ui 表示所有輸入的和;f(u)表示激勵(lì)函數(shù),yi 表示輸出。進(jìn)入神經(jīng)細(xì)胞的每一個(gè)輸入都與一個(gè)權(quán)重相關(guān)聯(lián),正是這些權(quán)重決定了神經(jīng)網(wǎng)絡(luò)的整體活躍性。因?yàn)闄?quán)重可正可負(fù),所以能對(duì)與之相關(guān)聯(lián)的輸入施加不同的影響。如果權(quán)重為正,那么會(huì)有激發(fā)作用;如果權(quán)重為負(fù),那么會(huì)有抑制作用。當(dāng)輸入信號(hào)進(jìn)入神經(jīng)細(xì)胞時(shí),它們的值將與對(duì)應(yīng)的權(quán)重求和,作為激勵(lì)函數(shù)的輸入。通過(guò)激勵(lì)函數(shù)輸出一個(gè)激勵(lì)值,然后根據(jù)激勵(lì)值產(chǎn)生神經(jīng)細(xì)胞的輸出。當(dāng)激勵(lì)值超過(guò)某個(gè)閥值,就會(huì)產(chǎn)生一個(gè)值為 1 的輸出信號(hào);當(dāng)激勵(lì)值小于某
20、個(gè)閥值,就會(huì)產(chǎn)生一個(gè)值為1 的輸出信號(hào)。圖 17神經(jīng)細(xì)胞模型激勵(lì)函數(shù)的作用是將和值回歸到 1 至1 之間。常用的神經(jīng)網(wǎng)絡(luò)激勵(lì)函數(shù)有恒等函數(shù)、S 型函數(shù)和函數(shù)。本文使用的激勵(lì)函數(shù)是 S 型函數(shù)。S 型函數(shù)如公式3 所示,曲線如圖 18 所示14。() = 1(3)1+圖 18S 型函數(shù)分割字符的結(jié)果共有 35 類。對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練實(shí)質(zhì)上是對(duì)每一個(gè)神經(jīng)細(xì)胞相關(guān)聯(lián)的權(quán)重進(jìn)行調(diào)整,使之能對(duì)這 35 類字符圖像進(jìn)行識(shí)別。字符學(xué)習(xí)流程如圖 19 所示,其中最重要的是設(shè)置數(shù)據(jù)、學(xué)習(xí)模型和測(cè)試模型三個(gè)部分。接下來(lái)對(duì)這些部分做詳細(xì)說(shuō)明。圖 19字符學(xué)習(xí)流程設(shè)置數(shù)據(jù)的作用是為了提取字符特征。本文把字符圖像的水平
21、投影直方圖和垂直投影直方圖,以及 2020 像素的低分辨率圖像作為特征,用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和識(shí)別。神經(jīng)網(wǎng)絡(luò)的輸入必須是一維的,需要將這些字符特征轉(zhuǎn)換為一維向量。學(xué)習(xí)模型的作用是為了獲取對(duì)字符進(jìn)行識(shí)別的神經(jīng)網(wǎng)絡(luò)模型。本文使用的神經(jīng)網(wǎng)絡(luò)包含三層。輸入層節(jié)點(diǎn)數(shù)為字符特征一維向量的長(zhǎng)度。隱藏層節(jié)點(diǎn)數(shù)為 20 個(gè)。輸出層節(jié)點(diǎn)數(shù)為 35 個(gè),分別為 10 個(gè)數(shù)字、24 個(gè)英文字符和 1 個(gè)其他字符。由于系統(tǒng)沒(méi)有移植漢字庫(kù),所以把車牌號(hào)碼中出現(xiàn)的漢字全部識(shí)別為其他字符。激勵(lì)函數(shù)為 S 型函數(shù),和值分別為 1。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)算法為彈性反向測(cè)試可以看到該訓(xùn)練參數(shù)能夠很好的對(duì)字符圖像進(jìn)行識(shí)別。測(cè)試模型的作用是為了
22、對(duì)學(xué)習(xí)模型時(shí)的參數(shù)進(jìn)行調(diào)整。本文訓(xùn)練的字符樣本各為算法。經(jīng)過(guò)80 個(gè),測(cè)試的字符樣本各為 20 個(gè)。由于樣本數(shù)量有限,的識(shí)別率都在 95%以上。相信隨著樣本數(shù)量的增加,使用該方法對(duì)字符圖像進(jìn)行識(shí)別也能取得同樣優(yōu)秀的識(shí)別率。3.1.7車牌識(shí)別設(shè)計(jì)車牌識(shí)別流程如圖 20 所示,其中最重要的是車牌檢測(cè)、字符識(shí)別和顯示結(jié)果三個(gè)部分。接下來(lái)對(duì)這些部分做詳細(xì)說(shuō)明。車牌檢測(cè)的作用是為了對(duì)輸入圖像進(jìn)行車牌定位。車牌檢測(cè)算法與車牌分割算法大致相同。不同在于最后調(diào)用了車牌學(xué)習(xí)產(chǎn)生的支持向量機(jī)模型,對(duì)分割出來(lái)的車牌圖像進(jìn)行識(shí)別。字符識(shí)別的作用是為了對(duì)車牌圖像進(jìn)行字符識(shí)別。字符識(shí)別算法與字符分割算法大致相同。不同在于
23、最后調(diào)用了字符學(xué)習(xí)產(chǎn)生的神經(jīng)網(wǎng)絡(luò)模型,對(duì)分割出來(lái)的字符圖像進(jìn)行識(shí)別。顯示結(jié)果的作用是用來(lái)在輸出圖像中定位車牌位置和顯示車牌號(hào)碼。車牌識(shí)別結(jié)果如圖 21 所示。圖 20車牌識(shí)別流程圖 21車牌識(shí)別結(jié)果引導(dǎo)程序設(shè)計(jì)啟動(dòng)流程介紹引導(dǎo)程序是一段在系統(tǒng)啟動(dòng)時(shí)自動(dòng)執(zhí)行的代碼。它的作用是初始化處理器和啟動(dòng)操作系統(tǒng)。本文使用的開(kāi)發(fā)板為 MINI2440,引導(dǎo)的操作系統(tǒng)為 Linux。接下來(lái)簡(jiǎn)單地介紹該處理器的啟動(dòng)流程。ARM 處理器 S3C2440 的地址空間如圖 22 所示15。處理器的啟動(dòng)模式分為 NorFlash 模式和 Nand Flash 模式兩種。本文使用的是 Nand Flash 模式。處理器的
24、啟動(dòng)流程分為兩個(gè)階段,第一個(gè)階段是Nand Flash 中的前 4KB 引導(dǎo)程序代碼到片內(nèi)RAM 中運(yùn)行,稱之為 BL1;第二個(gè)階段是Nand Flash 中剩余的引導(dǎo)程序代碼到片外RAM 中運(yùn)行,稱之為BL2。片內(nèi)RAM 的地址空間為0 x00000000 到0 x00008000,片外 RAM 的地址空間為 0 x30000000 到 0 x40000000。圖 22S3C2440 的地址空間引導(dǎo)程序分為兩種模式,第一種是通過(guò) TFTPLinux 內(nèi)核和掛載 NFS 根文件系統(tǒng)的開(kāi)發(fā)模式;第二種是通過(guò) Nand Flash 加載 Linux 內(nèi)核和掛載 YAFFS2 根文件系統(tǒng)的模式。開(kāi)發(fā)
25、模式引導(dǎo)程序的作用是用來(lái)在開(kāi)發(fā)中調(diào)試操作系統(tǒng),模式引導(dǎo)程序的作用是用來(lái)在實(shí)際應(yīng)用中引導(dǎo)操作系統(tǒng)。在接下來(lái)的幾個(gè)小節(jié)中將分別對(duì)這兩種引導(dǎo)程序的設(shè)計(jì)進(jìn)行詳細(xì)說(shuō)明。3.2.2開(kāi)發(fā)模式設(shè)計(jì)開(kāi)發(fā)模式架構(gòu)如圖 23 所示,分為引導(dǎo)第一階段和引導(dǎo)第二階段兩個(gè)部分。引導(dǎo)第一階段又分為初始化、低級(jí)初始化、環(huán)境初始化和跳轉(zhuǎn)到內(nèi)存四個(gè)部分;引導(dǎo)第二階段又分為串口初始化、網(wǎng)卡初始化、中斷初始化和顯示命令行四個(gè)部分。圖 23開(kāi)發(fā)模式架構(gòu)初始化的作用是對(duì)處理器環(huán)境進(jìn)行預(yù)處理,以便于接下來(lái)對(duì)處理器和外部設(shè)備進(jìn)行初始化。低級(jí)初始化的作用是設(shè)置系統(tǒng)時(shí)鐘和初始化內(nèi)存。環(huán)境初始化的作用是提供 C 程序運(yùn)行的環(huán)境。跳轉(zhuǎn)到內(nèi)存的作用是
26、從 Nand Flash 中剩余的引導(dǎo)程序代碼到內(nèi)存中,并跳轉(zhuǎn)到內(nèi)存運(yùn)行。串口初始化的作用是將引導(dǎo)程序輸出的信息打印到串口終端。網(wǎng)卡初始化的作用是獲取 TFTP 服務(wù)器的物理地址和Linux 內(nèi)核鏡像。中斷初始化的作用是處理系統(tǒng)產(chǎn)生的中斷。顯示命令行的作用是提供用戶交互。接下來(lái)對(duì)這些初始化步驟做詳細(xì)說(shuō)明。第一步需要設(shè)置異常向量表。ARM 處理器 S3C2440 共有七種異常模式,分別為復(fù)位異常、未定義指令異常、中斷異常、指令預(yù)取異常、數(shù)據(jù)預(yù)取異常、中斷異常和快速中斷異常。當(dāng)系統(tǒng)發(fā)生某種異常時(shí),處理器會(huì)跳轉(zhuǎn)到異常對(duì)應(yīng)的固定地址處去執(zhí)行異常處理程序,這個(gè)固定的地址稱為異常向量表。第二步需要設(shè)置處理
27、器模式。ARM 處理器 S3C2440 共有七種工作模式,分別為用戶模式、未定義指令模式、系統(tǒng)保護(hù)模式、系統(tǒng)模式、異常模式、中斷模式和快速中斷模式。初始化系統(tǒng)時(shí)需要很高的權(quán)限,需要設(shè)置處理器到系統(tǒng)保護(hù)模式。第三步需要關(guān)閉看門(mén)狗控制器??撮T(mén)狗是一個(gè)硬件模塊,當(dāng)系統(tǒng)死機(jī)時(shí),它可以幫助系統(tǒng)實(shí)現(xiàn)自動(dòng)重啟。如果超過(guò)了設(shè)定時(shí)間,還沒(méi)有重新設(shè)置看門(mén)狗,那么它會(huì)認(rèn)為系統(tǒng)已經(jīng)死機(jī),然后自動(dòng)重啟系統(tǒng)。為了簡(jiǎn)化引導(dǎo)程序的設(shè)計(jì),所以需要關(guān)閉看門(mén)狗控制器。第四步需要關(guān)閉中斷控制器。為了在初始化處理器和外部設(shè)備時(shí),不被系統(tǒng)中斷打斷,所以需要關(guān)閉中斷控制器。第五步需要關(guān)閉內(nèi)存管理器。管理包速緩存和虛擬地址轉(zhuǎn)換。為了簡(jiǎn)化引導(dǎo)
28、程序的設(shè)計(jì),所以需要關(guān)閉高速緩存和虛擬地址轉(zhuǎn)換功能。第六步需要初始化系統(tǒng)時(shí)鐘。系統(tǒng)時(shí)鐘是處理器的心跳,所有的指令全部都在統(tǒng)一的節(jié)拍下工作。本文提供的外部晶振頻率為 12MHz,需要通過(guò)設(shè)置系統(tǒng)時(shí)鐘來(lái)提高系統(tǒng)的工作頻率。系統(tǒng)時(shí)鐘分為 FCLK、HCLK、PCLK 和 UCLK 四種。FLCK 為處理器提供工作時(shí)鐘,HCLK 為外部高速設(shè)備提供工作時(shí)鐘,PCLK 為外部低速設(shè)備提供工作時(shí)鐘,UCLK 為外部USB 設(shè)備提供工作時(shí)鐘。本文設(shè)置的FCLK 為405MHz,HCLK 為 101MHz,PCLK 為 50MHz,UCLK 為 96MHz。第七步需要初始化內(nèi)存控制器。內(nèi)存是一種隨機(jī)器,用來(lái)運(yùn)
29、行操作系統(tǒng)和應(yīng)用程序。對(duì)內(nèi)存控制器的初始化主要包括設(shè)置內(nèi)存的地址空間和工作頻率。本文設(shè)置內(nèi)存的地址空間為 0 x30000000 到 0 x34000000,工作頻率為 101MHz。第八步需要設(shè)置??臻g地址。棧是一種具有先進(jìn)后出性質(zhì)的數(shù)據(jù)組織方式。棧底是第一個(gè)入棧數(shù)據(jù)所處的位置;棧頂是最后一個(gè)入棧數(shù)據(jù)所處的位置。當(dāng)棧頂指針總是指向最后一個(gè)入棧數(shù)據(jù)所處的位置時(shí),稱之為滿棧;當(dāng)棧頂指針總是指向下一個(gè)將要入棧數(shù)據(jù)所處的位置時(shí),稱之為空棧。隨著數(shù)據(jù)的入棧,棧頂指針從低地址向高地址移動(dòng),稱之為升棧;隨著數(shù)據(jù)的入棧,棧頂指針從高地址向低地址移動(dòng),稱之為降棧。ARM 處理器 S3C2440 的棧結(jié)構(gòu)為滿降
30、棧。因?yàn)?C 程序中的函數(shù)參數(shù)、局部變量和返回時(shí)寄存器環(huán)境全部都保存在棧中,為了使用 C 語(yǔ)言進(jìn)行編程,所以需要初始化棧空間地址。值得注意的是,當(dāng)處理器工作在不同模式下時(shí),會(huì)有不同的??臻g地址。本文設(shè)置系統(tǒng)保護(hù)模式下棧起始地址為 0 x34000000,中斷模式下棧起始地址為 0 x33000000。第九步需要初始化文本段地址。文本段又稱成為 BSS 段,C 程序中未初始化的全局變量保存在文本段中。為了避免使用時(shí)忘記賦值而導(dǎo)致出現(xiàn)意想不到的情況,所以需要對(duì)文本段進(jìn)行清零。第十步需要初始化輔存控制器。本文使用的輔存是 Nand Flash,相當(dāng)于設(shè)備的硬盤(pán)。Nand Flash 采用獨(dú)立編址,只
31、能通過(guò) Nand Flash 控制器來(lái),所以需要對(duì) Nand Flash 控制器進(jìn)行初始化。初始化輔存控制器分為初始化控制器和復(fù)位閃存兩個(gè)步驟。初始化控制器又分為設(shè)置配置寄存器和設(shè)置控制寄存器兩個(gè)步驟;復(fù)位閃存又分為選中閃存,清除繁忙信號(hào),發(fā)送重啟命令,判斷繁忙狀態(tài)和釋放閃存五個(gè)步驟。第十一步需要拷貝引導(dǎo)到內(nèi)存。ARM 處理器 S3C2440 啟動(dòng)時(shí),片內(nèi) ROM 中引導(dǎo)程序BL0 會(huì)自動(dòng)地把 Nand Flash 中的前 4KB 引導(dǎo)程序BL1 拷貝到片內(nèi)RAM 中運(yùn)行。當(dāng)引導(dǎo)程序大于 4KB 時(shí),需要通過(guò)引導(dǎo)程序 BL1 把剩余的引導(dǎo)程序 BL2 拷貝到外部 RAM 中繼續(xù)運(yùn)行。通過(guò)調(diào)用輔
32、存讀數(shù)據(jù)函數(shù)把引導(dǎo)程序 BL2 拷貝到內(nèi)存。第十二步需要跳轉(zhuǎn)到內(nèi)存運(yùn)行。跳轉(zhuǎn)指令分為相對(duì)跳轉(zhuǎn)和絕對(duì)跳轉(zhuǎn)兩種。當(dāng)使用相對(duì)跳轉(zhuǎn)指令時(shí),跳轉(zhuǎn)的地址是相對(duì)于當(dāng)前地址的偏移;當(dāng)使用絕對(duì)跳轉(zhuǎn)指令時(shí),跳轉(zhuǎn)的地址是相對(duì)于地址空間的絕對(duì)地址。引導(dǎo)程序 BL1 運(yùn)行在片內(nèi) RAM 的地址空間中,引導(dǎo)程序 BL2 運(yùn)行在片外 RAM 的地址空間中。所以需要使用絕對(duì)跳轉(zhuǎn)指令跳轉(zhuǎn)到片外 RAM(也就是內(nèi)存)的地址空間中去運(yùn)行引導(dǎo)程序 BL2。第十三步需要初始化串口控制器。初始化串口控制器的作用是將引導(dǎo)程序輸出的信息打印到串口終端。串口通信方式分為同步通信和異步通信,通信時(shí)雙方按照約定好的數(shù)據(jù)格式進(jìn)行通信。串口通信的數(shù)據(jù)
33、格式包括起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位和波特率。波特率是指在時(shí)間內(nèi)載波參數(shù)變化的次數(shù),換句話說(shuō),就是每秒內(nèi)發(fā)送的碼元數(shù)。本文串口通信使用異步通信方式,起始位 1 位,數(shù)據(jù)位 8 位,無(wú)奇偶校驗(yàn)位和停止位,波特率為 115200Bd。串口控制器的工作模式分為輪詢模式、中斷模式和直接器模式三種。為了簡(jiǎn)化引導(dǎo)程序的設(shè)計(jì),本文使用的是輪詢模式。初始化串口控制器分為配置功能引腳,設(shè)置數(shù)據(jù)格式,設(shè)置工作模式和設(shè)置工作頻率四個(gè)步驟。第十四步需要移植格式化函數(shù)。移植格式化函數(shù)的作用是使串口能夠輸入或輸出帶有變參列表的字符串。需要使用 C 函數(shù)庫(kù)中開(kāi)始轉(zhuǎn)換 va_start、輸入?yún)?shù) vsscanf、輸出參
34、數(shù) vsprf 和結(jié)束轉(zhuǎn)換 va_end 四個(gè)宏定義。輸入格式化字符串函數(shù)分為輸入格式化字符串和轉(zhuǎn)換字符串參數(shù)兩個(gè)步驟;與之相反,輸出格式字符串函數(shù)分為轉(zhuǎn)換字符串參數(shù)和輸出格式化字符串兩個(gè)步驟。第十五步需要初始化網(wǎng)卡控制器。初始化網(wǎng)卡控制器的作用是獲取 TFTP 服務(wù)器Linux 內(nèi)核鏡像。本文使用的網(wǎng)卡為 DM9000。網(wǎng)卡的物理地址和的地址端口為 0 x20000300,數(shù)據(jù)端口為 0 x20000304。網(wǎng)卡的寄存器不能直接訪問(wèn),只能通過(guò)地址端口加偏移來(lái)。初始化網(wǎng)卡分為初始化總線片選,初始化網(wǎng)卡中斷,復(fù)位網(wǎng)卡,判斷捕獲網(wǎng)卡和啟動(dòng)網(wǎng)卡五個(gè)步驟。初始化總線片選又分為設(shè)置總線位寬和設(shè)置片選時(shí)鐘
35、兩個(gè)步驟。初始化網(wǎng)卡中斷又分為配置功能引腳,設(shè)置觸發(fā)方式,清除中斷掩碼和清除中斷請(qǐng)求四個(gè)步驟。復(fù)位網(wǎng)卡又分為配置引腳、設(shè)置復(fù)位、等待復(fù)位完成、再次設(shè)置復(fù)位和等待復(fù)位完成五個(gè)步驟。判斷捕獲網(wǎng)卡又分為獲取網(wǎng)卡和判斷匹配成功兩個(gè)步驟。啟動(dòng)網(wǎng)卡又分為配置網(wǎng)卡、配置物理地址、顯示網(wǎng)絡(luò)地址和設(shè)置接收中斷四個(gè)步驟。第十六步需要移植地址協(xié)議。在網(wǎng)絡(luò)通訊中,每一臺(tái)計(jì)算機(jī)都有一個(gè)唯一的標(biāo)識(shí) Mac 地址。兩臺(tái)計(jì)算機(jī)之間想要通過(guò)網(wǎng)絡(luò)進(jìn)行通訊,就必須知道對(duì)方的 Mac地址。但是通常情況下只知道對(duì)方的 IP 地址,這時(shí)就需要利用地址協(xié)議 ARP 來(lái)向局域網(wǎng)中的所有計(jì)算機(jī)發(fā)送 ARP 請(qǐng)求。收到請(qǐng)求并且滿足條件的計(jì)算機(jī)會(huì)
36、發(fā)送ARP 應(yīng)答,告知對(duì)方其 Mac 地址。發(fā)送 ARP 請(qǐng)求函數(shù)分為創(chuàng)建 ARP 請(qǐng)求包和發(fā)送ARP 請(qǐng)求包兩個(gè)步驟。創(chuàng)建 ARP 請(qǐng)求包又分為填充 ARP 頭部和填充 Mac 頭部?jī)蓚€(gè)步驟。Mac 頭部包括目的 Mac 地址、源 Mac 地址和 Mac 協(xié)議類型。ARP 頭部包括硬件類型、協(xié)議類型、Mac 地址長(zhǎng)度、IP 地址長(zhǎng)度、ARP 協(xié)議類型、源 Mac 地址、源IP 地址、目的 Mac 地址和目的 IP 地址。Mac 頭部和 ARP 頭部如下所示。第十七步需要移植文件傳輸協(xié)議。移植文件傳輸協(xié)議的作用是為了從 TFTP 服務(wù)Linux 內(nèi)核鏡像。簡(jiǎn)單文件傳輸協(xié)議 TFTP(Trivi
37、al File Transfrotocol)是器中TCP/IP 協(xié)議族中用來(lái)在客戶機(jī)與服務(wù)器之間進(jìn)行文件傳輸?shù)膮f(xié)議。它是基于 UDP 實(shí)現(xiàn)的協(xié)議,讀寫(xiě)端 為 69。TFTP 交換過(guò)程分為三個(gè)步驟。首先,客戶端發(fā)送請(qǐng)求報(bào)文到服務(wù)器;然后,服務(wù)器發(fā)送數(shù)據(jù)報(bào)文到客戶端;最后,客戶端發(fā)送響應(yīng)報(bào)文到服務(wù)器。TFTP 報(bào)文類型分為請(qǐng)求讀報(bào)文、請(qǐng)求寫(xiě)報(bào)文、數(shù)據(jù)報(bào)文、應(yīng)答報(bào)文和出錯(cuò)報(bào)文五種。發(fā)送 TFTP 讀數(shù)據(jù)請(qǐng)求函數(shù)分為設(shè)置請(qǐng)求塊號(hào),創(chuàng)建讀請(qǐng)求包和發(fā)送讀請(qǐng)求包三個(gè)步驟。創(chuàng)建讀請(qǐng)求包又分為填充 TFTP 數(shù)據(jù),填充 TFTP 頭部,填充 UDP 頭部,填充 IP 頭部和填充 Mac 頭部五個(gè)步驟。接收 TF
38、TP 響應(yīng)數(shù)據(jù)函數(shù)分為判斷響應(yīng)塊號(hào),創(chuàng)建接收應(yīng)答包和發(fā)送接收應(yīng)答包三個(gè)步驟。創(chuàng)建接收應(yīng)答包又分為填充 TFTP塊號(hào),填充 TFTP 頭部,填充 UDP 頭部,填充 IP 頭部和填充 Mac 頭部五個(gè)步驟。IPtypedef struct ehhdrunsigned char eh_dst6; unsigned char eh_src6; unsigned short eh_type;EHHDR;typedef struct arphdrunsigned short arp_hrd; unsigned short arp_pro;unsigned char arp_hln; unsigned c
39、har arp_pln; unsigned short arp_op;unsigned char arp_sha6; unsigned char arp_spa4; unsigned char arp_ 6; unsigned char arp_tpa4;ARPHDR;頭部包括協(xié)議版本、服務(wù)類型、IP 頭部長(zhǎng)度、報(bào)文、報(bào)文偏移、生存時(shí)間、UDP協(xié)議類型、IP 校驗(yàn)和、源 IP 地址和目的 IP 地址。UDP 頭部包括源端、目的端、UDP 報(bào)文長(zhǎng)度和 UDP 檢驗(yàn)和。TFTP 頭部包括 TFTP 協(xié)議類型。IP 頭部、UDP頭部和 TFTP 頭部如下所示。第十八步需要打開(kāi)中斷標(biāo)志。為了處理網(wǎng)卡產(chǎn)
40、生的數(shù)據(jù)接收中斷,所以需要打開(kāi)系統(tǒng)中斷標(biāo)志。第十九步需要顯示命令行。顯示命令行的作用是提供用戶交互。本文菜單命令選typedef struct iphdrunsigned char ip_vhl; unsigned char ip_tos; unsigned short ip_len;unsigned short ip_id; unsigned short ip_off;unsigned charip_ttl; unsigned charip_pro; unsigned short ip_sum;unsigned char ip_srcIP_ADR_LEN; unsigned char ip_
41、dstIP_ADR_LEN;IPHDR;typedef struct udphdrunsigned short udp_sport; unsigned short udp_dport;unsigned short udp_len; unsigned short udp_sum;UDPHDR;typedef struct tftphdrunsigned short tftp_op;TFTPHDR;項(xiàng)分為獲取物理地址,設(shè)置網(wǎng)絡(luò)地址,內(nèi)核鏡像,保存內(nèi)核鏡像,加載內(nèi)核鏡像和啟動(dòng)操作系統(tǒng)六項(xiàng)。第二十步需要移植啟動(dòng)系統(tǒng)命令。為了設(shè)置操作系統(tǒng)的啟動(dòng)參數(shù),需要移植啟動(dòng)系統(tǒng)命令。Linux 內(nèi)核鏡像分為不加信息
42、頭部的內(nèi)核鏡像 zImage 和加信息頭部的內(nèi)核鏡像 uImage。本文啟動(dòng)系統(tǒng)命令用來(lái)啟動(dòng)不加信息頭部的內(nèi)核鏡像。啟動(dòng)系統(tǒng)命令函數(shù)分為設(shè)置啟動(dòng)地址,設(shè)置啟動(dòng)參數(shù)和啟動(dòng)操作系統(tǒng)三個(gè)步驟。設(shè)置啟動(dòng)參數(shù)又分為設(shè)置參數(shù),設(shè)置內(nèi)存參數(shù),設(shè)置命令參數(shù)和設(shè)置結(jié)束標(biāo)志四個(gè)步驟。設(shè)置的命令參數(shù)為掛載 NFS 根文件系統(tǒng)。3.2.3模式設(shè)計(jì)模式架構(gòu)如圖 24 所示,分為初始化,低級(jí)初始化,環(huán)境初始化和跳轉(zhuǎn)到內(nèi)存四個(gè)部分。初始化又分為設(shè)置異常向量表,設(shè)置處理器模式,關(guān)閉看門(mén)狗控制器,關(guān)閉中斷標(biāo)志位和關(guān)閉內(nèi)存管理器四個(gè)步驟;低級(jí)初始化又分為初始化系統(tǒng)時(shí)鐘和初始化內(nèi)存控制器兩個(gè)步驟;環(huán)境初始化又分為初始化??臻g地址和
43、初始化文本段地址兩個(gè)步驟;跳轉(zhuǎn)到內(nèi)存又分為初始化串口控制器,初始化輔存控制器,拷貝引導(dǎo)和內(nèi)核,以及跳轉(zhuǎn)到內(nèi)存啟動(dòng)四個(gè)步驟。模式引導(dǎo)程序的前十一個(gè)步驟與開(kāi)發(fā)模式引導(dǎo)程序大致相同。不同在于,第十二步需要拷貝引導(dǎo)和內(nèi)核,通過(guò)輔存讀數(shù)據(jù)函數(shù)把引導(dǎo)程序和內(nèi)核鏡像從 Flash 中拷貝到內(nèi)存;第十三步需要跳轉(zhuǎn)到內(nèi)存啟動(dòng),設(shè)置 令參數(shù)為掛載 YAFFS2 根文件系統(tǒng)。圖 24模式架構(gòu)3.3 內(nèi)核驅(qū)動(dòng)設(shè)計(jì)3.3.1驅(qū)動(dòng)設(shè)計(jì)設(shè)備驅(qū)動(dòng)程序是一種可以使計(jì)算機(jī)和外部設(shè)備進(jìn)行通信的特殊程序。設(shè)備驅(qū)動(dòng)程序常見(jiàn)分類方法有常規(guī)分類法和總線分類法。常規(guī)分類法又分為字符設(shè)備驅(qū)動(dòng)、塊設(shè)備驅(qū)動(dòng)和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)??偩€分類法又分為總線驅(qū)動(dòng)
44、、USB 總線驅(qū)動(dòng)和 PCI 總線驅(qū)動(dòng)。為了使用 USB板中,所以需要設(shè)計(jì)線從宿主機(jī)驅(qū)動(dòng)程序。引導(dǎo)程序、內(nèi)核鏡像和文件系統(tǒng)到開(kāi)發(fā)驅(qū)動(dòng)屬于總線驅(qū)動(dòng)模型,當(dāng)有設(shè)備插到總線上時(shí),總線會(huì)把設(shè)備和驅(qū)動(dòng)進(jìn)行匹配,當(dāng)設(shè)備匹配到驅(qū)動(dòng)時(shí),總線會(huì)把控制權(quán)交給相應(yīng)的驅(qū)動(dòng)程序來(lái)處理;當(dāng)設(shè)備從總線上拔掉時(shí),總線會(huì)找到相應(yīng)的驅(qū)動(dòng)程序來(lái)處理事件。接下來(lái)對(duì)驅(qū)動(dòng)的設(shè)計(jì)進(jìn)行詳細(xì)說(shuō)明。驅(qū)動(dòng)架構(gòu)如圖 25 所示,分為設(shè)備方法,驅(qū)動(dòng)方法和驅(qū)動(dòng)安裝三個(gè)部分。設(shè)備方法又分為寫(xiě)入方法和打開(kāi)方法。驅(qū)動(dòng)方法又分為捕獲設(shè)備和移除設(shè)備。驅(qū)動(dòng)安裝又分為安裝驅(qū)動(dòng)和卸載驅(qū)動(dòng)。當(dāng)宿主機(jī)安裝驅(qū)動(dòng)程序時(shí),會(huì)調(diào)用安裝驅(qū)動(dòng)函數(shù)來(lái)驅(qū)動(dòng);當(dāng)宿主機(jī)卸載驅(qū)動(dòng)程序時(shí),會(huì)調(diào)用
45、卸載驅(qū)動(dòng)函數(shù)來(lái)注銷驅(qū)動(dòng)。當(dāng)把線插到宿主機(jī)時(shí),會(huì)調(diào)用捕獲設(shè)備函數(shù)來(lái)設(shè)備函數(shù)來(lái)注銷設(shè)備。當(dāng)宿主機(jī)打開(kāi)設(shè)備;當(dāng)線從宿主機(jī)拔掉時(shí),會(huì)調(diào)用移除程序時(shí),會(huì)調(diào)用打開(kāi)設(shè)備函數(shù)來(lái)分配數(shù)據(jù)緩存空間;當(dāng)宿主機(jī)寫(xiě)入數(shù)據(jù)時(shí),會(huì)調(diào)用寫(xiě)入方法函數(shù)來(lái)寫(xiě)入數(shù)據(jù)。圖 25驅(qū)動(dòng)架構(gòu)3.3.2內(nèi)核鏡像裁剪Linux 是一套免費(fèi)使用和IX 和 UNIX 的的操作系統(tǒng),是一個(gè)基于多用戶、多任務(wù)、支持多線程和多處理器的操作系統(tǒng)。它繼承了 UNIX 以網(wǎng)絡(luò)為的設(shè)計(jì) ,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)16。Linux 系統(tǒng)架構(gòu)分為用戶空間和內(nèi)核空間兩個(gè)部分。用戶空間由應(yīng)用程序和 C 函數(shù)庫(kù)兩個(gè)部分組成;內(nèi)核空間由系統(tǒng)調(diào)用接口、系統(tǒng)內(nèi)核代碼和
46、體系結(jié)構(gòu)代碼三個(gè)部分組成。Linux 內(nèi)核架構(gòu)分為系統(tǒng)調(diào)用接口、進(jìn)程管理模塊、內(nèi)存管理模塊、虛擬文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議模塊、設(shè)備驅(qū)動(dòng)模塊和體系結(jié)構(gòu)相關(guān)七個(gè)部分。內(nèi)核裁剪是指基于硬件和的需求選出需要的功能,去掉不要的功能。本文內(nèi)核需要的功能包括支持掛載 NFS 根文件系統(tǒng)和 YAFFS2 根文件系統(tǒng),以及支持ZC3XX USB頭驅(qū)動(dòng)。內(nèi)核裁剪主要包括配置文件系統(tǒng),設(shè)置啟動(dòng)文件和配置攝像頭驅(qū)動(dòng)三個(gè)步驟。接下來(lái)對(duì)這些步驟做詳細(xì)說(shuō)明。第一步需要配置文件系統(tǒng),使內(nèi)核支持掛載 YAFFS2 根文件系統(tǒng)和 NFS 根文件系統(tǒng)。在內(nèi)核根目錄下運(yùn)行配置菜單命令 makeconfig ARCH=arm。然后進(jìn)入Dev
47、ice Drivers 選項(xiàng)中,選中 Memory Technology Device (MTD) support 選項(xiàng),接著進(jìn)入 Memory Technology Device (MTD) support 選項(xiàng)中,選中 MTD partitioning support選項(xiàng),配置內(nèi)核支持掛載 YAFFS2 根文件系統(tǒng)。然后進(jìn)入 File systems 選項(xiàng)中,選中Network File Systems 選項(xiàng),接著進(jìn)入 Network File Systems 選項(xiàng)中,選中 NFS cntsupport 選項(xiàng)和 Root file system on NFS 選項(xiàng),接著進(jìn)入 NFS cnt
48、 support 選項(xiàng)中,選中 FS cnt support for NFS ver3 選項(xiàng),配置內(nèi)核支持掛載 NFS 根文件系統(tǒng)。第二步需要設(shè)置啟動(dòng)文件,使內(nèi)核對(duì) Nand FLash 進(jìn)行分區(qū)。在內(nèi)核根目錄下的arch/arm/mach-s3c2440 目錄中修改啟動(dòng)文件的 mtd_partition 結(jié)構(gòu)體,把 Nand Flash 分為引導(dǎo)程序、內(nèi)核鏡像和文件系統(tǒng)三個(gè)分區(qū)。修改啟動(dòng)文件如下所示。第三步需要配置頭驅(qū)動(dòng),使內(nèi)核支持 ZC3XX USB頭驅(qū)動(dòng)。在內(nèi)核根目錄下運(yùn)行配置菜單命令 makeconfig ARCH=arm。然后進(jìn)入 Device Drivers 選項(xiàng)中,選中 Mult
49、imedia support 選項(xiàng),接著進(jìn)入 Multimedia support 選項(xiàng)中,選中capture adapters 選項(xiàng),接著進(jìn)入選項(xiàng),接著進(jìn)入 V4L USB devicapture adapters 選項(xiàng)中,選中 V4L USB devi選項(xiàng)中,選中 GSPCA baseds 選項(xiàng),接著進(jìn)入 GSPCA based支持 ZC3XX USBs 選項(xiàng)中,選中 ZC3XX USB Camera Driver 選項(xiàng),配置內(nèi)核頭驅(qū)動(dòng)。3.4 文件系統(tǒng)設(shè)計(jì)3.4.1應(yīng)用程序移植OpenCV 是一個(gè)基于開(kāi)源的跨計(jì)算機(jī)視覺(jué)庫(kù),其中實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法1718。CGI
50、是外部應(yīng)用程序與 Web 服務(wù)器之間的sic struct mtd_partition arm_default_nand_part = 0 = .name= i-boot,.offset= 0 x00000000,.size= 0 x00040000,1 = .name= kernel,.offset= 0 x00060000,.size= 0 x00500000,2 = .name= rootfs,.offset= 0 x00560000,.size= MTDPART_SIZ_FULL,;接口標(biāo)準(zhǔn),是在 CGI 程序和 Web 服務(wù)器之間傳遞信息的規(guī)程。CGI 允許 Web 服務(wù)器執(zhí)行 CG
51、I 程序,并將它們的輸出發(fā)送給 Web 瀏覽器1920。本文使用 ARM 開(kāi)發(fā)板搭建 Web 服務(wù)器,并通過(guò) CGI 調(diào)用基于 OpenCV 的車牌識(shí)別程序,進(jìn)而對(duì)頭的圖像進(jìn)行車牌識(shí)別。為了使開(kāi)發(fā)板能支持 OpenCV 和 CGI,需要對(duì)相關(guān)的動(dòng)態(tài)庫(kù)進(jìn)行交叉編譯和移植。本文交叉編譯的宿主機(jī)為 Red Hat Ent開(kāi)發(fā)板為 MINI2440,接下來(lái)對(duì)這些步驟進(jìn)行詳細(xì)說(shuō)明。rise Linux Server 6.3,第一步需要安裝 CMake 工具。CMake 是一個(gè)跨的安裝和編譯工具,可以用簡(jiǎn)單的語(yǔ)句來(lái)描述所有的安裝和編譯過(guò)程。需要用它來(lái)產(chǎn)生 OpenCV 的 Makefile文件。首先和解壓
52、 CMake 源代碼。接著,運(yùn)行配置命令./configure -prefix=/usr,指明安裝路徑。運(yùn)行編譯命令 make,編譯 CMake 源代碼。最后,運(yùn)行安裝命令 makeinstall,安裝編譯產(chǎn)生的文件到安裝路徑。第二步需要移植 OpenCV。首先,和解壓 OpenCV 源代碼。接著,編寫(xiě)交叉編譯配置文件,指明交叉編譯工具鏈。運(yùn)行創(chuàng)建目錄命令 mkdir _install,創(chuàng)建安裝目錄_install。運(yùn)行配置命令 cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake - DCMAKE_INSTALL_PREFIX=$PWD/_install/
53、,指明交叉編譯配置文件和安裝路徑。運(yùn)行圖形配置命令ccmake .,去掉交叉編譯配置文件中 WITH_GTK,WITH_FFMPEG,WITH_GSTREAMER,WITH_TIFF 四個(gè)選項(xiàng)。運(yùn)行編譯命令 make,編譯 OpenCV 源代碼。運(yùn)行安裝命令make install,安裝編譯產(chǎn)生的文件到安裝路徑。最后動(dòng)態(tài)庫(kù)到開(kāi)發(fā)板的/lib 目錄。OpenCV第三步需要移植 CGI。首先,和解壓 CGI 源代碼。接著,運(yùn)行配置命令./configure -host=arm-linux- -prefix=$PWD/_install/,指明交叉編譯工具鏈和安裝路徑。運(yùn)行編譯命令 make,編譯 C
54、GI 源代碼。運(yùn)行安裝命令 make install,安裝編譯CGI 動(dòng)態(tài)庫(kù)到開(kāi)發(fā)板的/lib 目錄。產(chǎn)生的文件到安裝路徑。最后,3.4.2網(wǎng)頁(yè)服務(wù)移植BOA 服務(wù)器是一個(gè)運(yùn)行在 Unix 或 Linux 下源代碼開(kāi)放、小巧高效的單任務(wù) Web服務(wù)器。它不僅支持 CGI,而且適合于系統(tǒng)21。本文需要使用 ARM 開(kāi)發(fā)板來(lái)搭建 Web 服務(wù)器,為了使開(kāi)發(fā)板能支持 Web 服務(wù),需要對(duì) BOA 服務(wù)器進(jìn)行交叉編譯和移植。接下來(lái)對(duì)這些步驟進(jìn)行詳細(xì)說(shuō)明。首先,和解壓 BOA 源代碼。接著,運(yùn)行配置命令./configure,生成編譯配置文件 Makefile。修改 Makefile 文件中的編譯工具鏈
55、為交叉編譯工具鏈。運(yùn)行編譯命令make,編譯 BOA 源代碼。拷貝編譯生成的 BOA 服務(wù)器到開(kāi)發(fā)板/sbin 目錄。在開(kāi)發(fā)板/etc 目錄下創(chuàng)建 boa 文件夾,并拷貝 BOA 配置文件到該文件夾。最后,修改 BOARoot 指向網(wǎng)頁(yè)所在文件夾的路徑,ScriptAlias 指配置文件,使配置文件中的向網(wǎng)頁(yè)運(yùn)行 CGI 程序所在文件夾的路徑。啟動(dòng) BOA 服務(wù)器,在瀏覽器中輸入開(kāi)發(fā)板的 IP 地址,可以看到基于 ARM 的車牌識(shí)別系統(tǒng)運(yùn)行效果,如圖 26 所示。圖 26基于 ARM 的車牌識(shí)別系統(tǒng)3.4.3文件系統(tǒng)制作文件系統(tǒng)是操作系統(tǒng)用于明確磁盤(pán)或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu),即在設(shè)備上組
56、織文件的方法22。根據(jù)設(shè)備的硬件特性和系統(tǒng)需求,不同的文件系統(tǒng)有Linux 應(yīng)用中,主要的設(shè)備有 RAM 和 Flash 兩種,不同的應(yīng)用場(chǎng)合。在常用的基于設(shè)備的文件系統(tǒng)類型包括 NFS、YAFFS2、JFFS2、UBIDS、RAMDISK等。NFS 文件系統(tǒng)的特點(diǎn)在于可以通過(guò)網(wǎng)絡(luò)直接修改文件系統(tǒng)里面的內(nèi)容,缺點(diǎn)是需要連接網(wǎng)絡(luò),一般在開(kāi)發(fā)階段中使用。YAFFS2 文件系統(tǒng)的特點(diǎn)在于可以直接燒寫(xiě)到輔存中,便于文件的和保存,一般在實(shí)際應(yīng)用中使用。本文根據(jù)開(kāi)發(fā)階段和實(shí)際應(yīng)用兩種不同的需求,分別制作了 NFS 和 YAFFS2 兩種根文件系統(tǒng)。接下來(lái)對(duì)這兩種文件系統(tǒng)的制作方法進(jìn)行詳細(xì)說(shuō)明。第一步需要?jiǎng)?chuàng)
57、建系統(tǒng)目錄。Linux 根文件系統(tǒng)包括 bin、dev、etc、lib、mnt、proc、sbin、sys、tmp、usr、var 十一個(gè)文件夾,以及 usr 文件夾下的 bin、lib、sbin 三個(gè)文件夾。需要?jiǎng)?chuàng)建這些文件夾來(lái)對(duì) Linux 系統(tǒng)中的應(yīng)用程序、設(shè)備文件、配置文件、庫(kù)文件等提供分類。第二步需要?jiǎng)?chuàng)建設(shè)備文件。Linux 系統(tǒng)啟動(dòng)時(shí)必須包含空設(shè)備文件 null 和控制臺(tái)終端設(shè)備文件 console。運(yùn)行命令 mknod -m 666 null c 1 3 來(lái)創(chuàng)建空設(shè)備文件,-m 666表示所用用戶擁有可讀可寫(xiě)權(quán)限,c 表示字符設(shè)備,1 表示主設(shè)備號(hào),3 表示次設(shè)備號(hào)。運(yùn)行命令 m
58、knod -m 666 console c 5 1 來(lái)創(chuàng)建控制臺(tái)終端設(shè)備文件,-m 666 表示所用用戶擁有可讀可寫(xiě)權(quán)限,c 表示字符設(shè)備,5 表示主設(shè)備號(hào),1 表示次設(shè)備號(hào)。第三步需要?jiǎng)?chuàng)建配置文件。Linux 系統(tǒng)啟動(dòng)時(shí)必須包含 rcS、stab、inittab、profile四個(gè)配置文件。rcS 文件中包含 Linux 系統(tǒng)初始化時(shí)運(yùn)行令。為了使系統(tǒng)能夠自動(dòng)啟動(dòng) Web 服務(wù),需要在該文件中添加/sbin/ifconfig eth0 30 和/sbin/boa 兩條命令,用來(lái)設(shè)置開(kāi)發(fā)板 IP 地址和啟動(dòng) BOA 服務(wù)器。第四步需要移植系統(tǒng)工具。Linux 系統(tǒng)中包含許多常用的系統(tǒng)命令,例如
59、顯示文件列表 ls,切換當(dāng)前路徑 cd 等,可以通過(guò)移植 BusyBox 來(lái)實(shí)現(xiàn)。首先,和解壓BusyBox 源代碼。接著,配置 BusyBox 的交叉編譯工具鏈和安裝路徑。運(yùn)行編譯命令 make,編譯 BusyBox 源代碼。最后,運(yùn)行安裝命令 make install,安裝編譯產(chǎn)生的文件到安裝路徑。第五步需要制作文件系統(tǒng)。NFS 文件系統(tǒng)是網(wǎng)絡(luò)文件系統(tǒng),需要設(shè)置引導(dǎo)程序啟動(dòng)參數(shù),來(lái)指明根文件系統(tǒng)的路徑。YAFFS2 文件系統(tǒng)是輔存文件系統(tǒng),首先通過(guò)mkyaffs2image 工具壓縮文件系統(tǒng),然后燒寫(xiě)到輔存,同時(shí)需要設(shè)置引導(dǎo)程序啟動(dòng)參數(shù),來(lái)指明根文件系統(tǒng)的位置。4結(jié)果分析4.1 車牌學(xué)習(xí)結(jié)
60、果分析車牌學(xué)習(xí)中訓(xùn)練的車牌樣本和非車牌樣本各 40 個(gè),測(cè)試的車牌樣本和非車牌樣本各 10 個(gè)。車牌識(shí)別率如表 1 所示。從表 1 中可以得出當(dāng)支持向量機(jī)的核函數(shù)為線性核函數(shù),并且訓(xùn)練迭代次數(shù)為 1000 次時(shí),支持向量機(jī)能夠很好的對(duì)車牌圖像進(jìn)行識(shí)別。表 1車牌識(shí)別率4.2 字符學(xué)習(xí)結(jié)果分析字符學(xué)習(xí)中訓(xùn)練的字符樣本各為 80 個(gè),測(cè)試的字符樣本各為 20 個(gè)。字符識(shí)別率如表 2 所示。從表 2 中可以得出當(dāng)神經(jīng)網(wǎng)絡(luò)包含三層,隱藏層節(jié)點(diǎn)為 20 個(gè),學(xué)習(xí)算法為彈性反向 算法,并且訓(xùn)練迭代次數(shù)為 1000 次時(shí),神經(jīng)網(wǎng)絡(luò)能夠很好的對(duì)字符圖像進(jìn)行識(shí)別。除了字符 E 的識(shí)別率沒(méi)有達(dá)到 100%之外,其
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度商鋪轉(zhuǎn)租合同涉及租賃商鋪?zhàn)赓U權(quán)終止后租賃權(quán)恢復(fù)
- 2025年湖北輕工職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)1套
- 旅游業(yè)務(wù)居間代理批文
- 2025年度互聯(lián)網(wǎng)科技冠名贊助協(xié)議
- 2025年度貨車司機(jī)勞動(dòng)合同與貨運(yùn)市場(chǎng)動(dòng)態(tài)監(jiān)測(cè)協(xié)議
- 2025年度雙方承諾協(xié)議書(shū):文化產(chǎn)業(yè)投資基金合作協(xié)議范文
- 2025年度商業(yè)地產(chǎn)租賃違約金規(guī)范及違約責(zé)任合同
- 體育場(chǎng)館建設(shè)貸款居間合同
- 2024-2025學(xué)年福建省福州市高一上學(xué)期期中十校聯(lián)考生物試卷
- 2024-2025學(xué)年安徽省卓越縣中聯(lián)盟皖豫名校聯(lián)盟高二上學(xué)期11月期中聯(lián)考生物試卷
- GB/T 22560-2008鋼鐵件的氣體氮碳共滲
- GB/T 1265-2003化學(xué)試劑溴化鈉
- 統(tǒng)編版四年級(jí)道德與法治下冊(cè)全冊(cè)課件
- 11-化學(xué)動(dòng)力學(xué)基礎(chǔ)-2-考研試題資料系列
- 醫(yī)院評(píng)審工作臨床科室資料盒目錄(15個(gè)盒子)
- 社區(qū)獲得性肺炎臨床路徑
- 壓力性損傷指南解讀
- 湯姆走丟了 詳細(xì)版課件
- 大學(xué)學(xué)院學(xué)生心理危機(jī)預(yù)防與干預(yù)工作預(yù)案
- 國(guó)有土地上房屋征收與補(bǔ)償條例 課件
- 鐵路建設(shè)項(xiàng)目施工企業(yè)信用評(píng)價(jià)辦法(鐵總建設(shè)〔2018〕124號(hào))
評(píng)論
0/150
提交評(píng)論