基于FPGA的數(shù)字識別的實現(xiàn)一
現(xiàn)如今隨著機器識別技術(shù)的日益成熟,在我們的日常生活中機器識別也隨處可見。大家常見的有二維碼識別,指紋識別,車牌識別等,這些技術(shù)已經(jīng)相當(dāng)成熟。還有現(xiàn)如今比較火的無人駕駛系統(tǒng)。無人駕駛系統(tǒng)中存在很多機器識別技術(shù),包括對人或移動物體的識別,路標(biāo)識別,以及距離估算等。而各種識別系統(tǒng)中,對數(shù)字的識別是必不可少的。數(shù)字在我們?nèi)祟愂澜鐭o處不在。
目前實現(xiàn)數(shù)字識別的方法大致分為以下4種:
1)使用軟件編程在傳統(tǒng)個人PC上進行實現(xiàn);
2)使用通用的MCU微型處理器(例如51單片機、ARM等)上進行實現(xiàn);
3)使用通用DSP作為系統(tǒng)處理器進行實現(xiàn);
4)使用專用DSP作為運算核心;
除以上四種方法以外,F(xiàn)PGA以其獨有的硬件可并行運行的優(yōu)勢,打破了傳統(tǒng)處理器順序執(zhí)行的模式,可在一個時鐘周期內(nèi)并行完成多個運算,相比于DSP在處理速度與處理能力上有了大幅的提高, 在具有成本低、集成化程度高、便于后期維護、 升級等優(yōu)勢的同時使系統(tǒng)的運行速度能夠滿足圖像實時處理的需求,所以本設(shè)計決定采用FPGA作為硬件平臺,設(shè)計與實現(xiàn)一種基于FPGA的數(shù)字識別系統(tǒng)。
02
基于FPGA的數(shù)字識別的方法
通常,針對印刷體數(shù)字識別使用的算法有:基于模版匹配的識別方法、基于BP神經(jīng)網(wǎng)絡(luò)的識別方法、基于數(shù)字特征的識別方法等。下文將對這幾種算法進行討論以及比較。
1>模版匹配法
模版匹配法是一種被較早應(yīng)用的數(shù)字識別算法,該算法的關(guān)鍵是對所要識別的所有數(shù)字進行模版構(gòu)建,之后將圖像中的數(shù)字與所有的數(shù)字模版一一進行比較,計算出圖像中數(shù)字與每個模版的相似度,根據(jù)所計算出的相似度結(jié)果進行識別。其中相似度最高的模版即為我們所要識別的結(jié)果。模版匹配法的對數(shù)字的大小、結(jié)構(gòu)形狀的規(guī)范化程度要求很高,數(shù)字的規(guī)范化程度對識別的準(zhǔn)確率有著直接的影響。該算法原理較為簡單,但計算復(fù)雜度過大,同時不利于FPGA的實現(xiàn)。
2>神經(jīng)網(wǎng)絡(luò)識別算法
神經(jīng)網(wǎng)絡(luò)識別的方法是模仿動物神經(jīng)網(wǎng)絡(luò)的特征,對信息進行分布式并行處理的一種算法。神經(jīng)網(wǎng)絡(luò)識別算法具有一定的抗干擾能力,但為了保證識別的準(zhǔn)確率,該算法需要負(fù)責(zé)并且大量的計算,來對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,而過于復(fù)雜的計算不利于FPGA對該算法的實現(xiàn)。
3>數(shù)字特征識別算法
基于數(shù)字特征的識別算法其核心是通過對數(shù)字的形狀以及結(jié)構(gòu)等幾何特征進行分析與統(tǒng)計,通過對數(shù)字特征的識別從而達到對圖像中數(shù)字的識別。
03
基于數(shù)字特征算法實現(xiàn)數(shù)字識別
我們采用基于數(shù)字特征的算法進行數(shù)字的識別,通過圖像采集模塊采集到圖像,進行灰度化,二值化,然后進行數(shù)字特征的提取和統(tǒng)計來完成對數(shù)字的識別,最終顯示到數(shù)碼管上,完成圖像信息到數(shù)字信息的轉(zhuǎn)化。
圖1 0-6數(shù)字特征標(biāo)線
圖2 7-8數(shù)字特征標(biāo)線
圖3 5數(shù)字特征
數(shù)字特征信息的提取基于打印體,如上圖1,圖2,圖3所示,以圖3數(shù)字5舉例,紅框是數(shù)字5的水平和豎直的上下左右邊界。X1在豎直方向的2/5處的水平線,x2在豎直方向的2/3處的水平線,y在水平方的1/2處的水直線。我們以此特征來統(tǒng)計x1,x2,y與數(shù)字5的交叉點。
以交叉統(tǒng)計法來區(qū)分0-9數(shù)字的特征如下表1:
表1 0-9數(shù)字特征統(tǒng)計表
由于2,3,5的數(shù)字特征統(tǒng)計表一樣,無法區(qū)分所以我們繼續(xù)增加數(shù)字特征以區(qū)分2,3,5。如表2:
表2 2,3,5數(shù)字特征統(tǒng)計
這樣通過數(shù)字統(tǒng)計完全區(qū)分開數(shù)字0-9。然后利用FPGA系統(tǒng)搭建實時數(shù)字識別系統(tǒng)。
04
基于FPGA的數(shù)字識別的實現(xiàn)
圖4基于ov5640的FPGA實時數(shù)字識別系統(tǒng)
如圖4所示,我們圖像采集使用ov5640 500W像素攝像頭,采集到的彩色RGB圖像首先存入SDRAM中,然后由TFT顯示控制端讀出圖像數(shù)據(jù),讀出RGB圖像數(shù)據(jù)后,我們首先進行RGB轉(zhuǎn)Ycbcr算法操作,然后對灰度圖像進行閾值分割,形成二值圖像。對二值數(shù)字圖像進行數(shù)字識別,最終顯示在數(shù)碼管上。
FPGA部分源碼
//------------------------------------------------------------------------
// VGA display
//--------------------------------------------------------------------------
always @(posedge TFT_VCLK or negedge rst_n) begin
if(!rst_n)
TFT_RGB <= 16'b0;
else if(hcount == 400 || vcount == 192 || vcount == 320)
TFT_RGB <= 16'hff00;
else
TFT_RGB <={o_y_8b[7:3],o_y_8b[7:2],o_y_8b[7:3]};
end
//-------------------------------------------------------------
//digital tube display
//-------------------------------------------------------------
always @(posedge TFT_VCLK or negedge rst_n) begin
if(!rst_n)
disp_data <= 32'h0;
else if((!TFT_VS_r0) && TFT_VS_r1)
case({x1_l,x1_r,x2_l,x2_r,y,x1,x2})
16'b1111_0010_0010_0010: disp_data <= {28'b0,4'h0}; ?//0
16'b1010_0001_0001_0001: disp_data <= {28'b0,4'h1}; ?//1
16'b0110_0011_0001_0001: disp_data <= {28'b0,4'h2};??//2
16'b0101_0011_0001_0001: disp_data <= {28'b0,4'h3}; ?//3
16'b1110_0010_0010_0001: disp_data <= {28'b0,4'h4};?//4
16'b1001_0011_0001_0001: disp_data <= {28'b0,4'h5};?//5
16'b1011_0011_0001_0010: disp_data <= {28'b0,4'h6};?//6
16'b0110_0010_0001_0001: disp_data <= {28'b0,4'h7};?//7
16'b1111_0011_0010_0010: disp_data <= {28'b0,4'h8}; ?//8
16'b1101_0011_0010_0001: disp_data <= {28'b0,4'h9}; ?//9
default: disp_data <= 32'b0;
endcase
else
disp_data <= disp_data;
End
結(jié)果展示
圖5實驗原圖
圖6數(shù)字5識別
圖7數(shù)字6識別
圖8數(shù)字7識別
結(jié)果分析
本實驗完成了對0-9數(shù)字的單個數(shù)字識別,對于多個數(shù)字的識別,我們要進行模塊分割,然后在每個模塊里邊再識別數(shù)字。我們可以加上語音系統(tǒng)來播報我們識別出來的數(shù)字,已到達更加人性化的更加實用的開發(fā)。
基于FPGA的數(shù)字識別的實現(xiàn)二
01
背景知識
對于FPGA識別數(shù)字的基本算法知識請查看《基于FPGA的數(shù)字識別的實現(xiàn)》一文,對于數(shù)字位置的實時跟蹤的基本算法知識請查看《基于FPGA的實時移動目標(biāo)的追蹤》一文。本節(jié)將基于FPGA的目標(biāo)跟蹤以及統(tǒng)計學(xué)的特征統(tǒng)計來實現(xiàn)對數(shù)字的位置實時定位以及數(shù)字識別,不在局限于數(shù)字在屏幕中的位置,也不局限數(shù)字的大小。
02
基于FPGA的數(shù)字識別的實現(xiàn)
圖1基于ov5640的FPGA實時數(shù)字識別系統(tǒng)
如圖1所示,我們圖像采集使用ov5640 cmos 500W像素攝像頭,將采集到的彩色RGB圖像首先存入SDRAM中,然后由TFT顯示控制端讀出圖像數(shù)據(jù),讀出RGB圖像數(shù)據(jù)后,我們首先進行RGB轉(zhuǎn)Ycbcr算法操作,然后對灰度圖像進行閾值分割,形成二值圖像,對二值數(shù)字圖像進行邊界追蹤的基礎(chǔ)上進行數(shù)字識別,最終將邊界顯示在TFT5寸屏幕上,將識別的數(shù)字信息顯示在數(shù)碼管上。
圖2邊界追蹤數(shù)字識別的三大主要核心模塊
如圖2所示,以TFT屏的顯示時序為基準(zhǔn),首先進行邊界追蹤,識別數(shù)字邊界后,我們在邊界的基礎(chǔ)上進行統(tǒng)計特征的數(shù)字識別。
圖3邊界追蹤模塊
如圖3所示,hcount為列計數(shù)器,vcount為行計數(shù)器,TFT_VS_fall和TFT_VS_rise分別是幀下降沿標(biāo)志和幀上升沿標(biāo)志,frame_cnt為幀計數(shù)器,hcount_l和hcount_r分別是識別后數(shù)字的左右邊界,vcount_l和vcount_r分別是數(shù)字的上下邊界。Th_flag_fall和th_flag_rise分別是灰度圖像閾值后的下降沿和上升沿標(biāo)志。
圖4數(shù)字識別模塊
如圖4所示基本的邊界信息均來自數(shù)字邊界識別模塊,數(shù)字識別模塊主要的到數(shù)字統(tǒng)計學(xué)的兩橫一豎(x1,x2,y)與數(shù)字的交點信息,以及其他補充信息。
部分核心代碼:
/*
Module name: digital_recognition.v
Description: digital recognition
Data: 2018/04/17
Engineer: lipu
e-mail: 137194782@qq.com
微信公眾號:FPGA開源工作室
*/
數(shù)字識別x1 ,x2,y核心代碼:
TFT顯示屏顯示代碼:
數(shù)字識別與數(shù)碼管顯示對接代碼:
結(jié)果展示
圖5實驗原圖
圖6邊界跟蹤數(shù)字識別6
圖7邊界跟蹤數(shù)字識別7
圖8邊界跟蹤數(shù)字識別4
圖9邊界跟蹤數(shù)字識別5
展望
基于機器視覺的識別是走向人工智能的必然之路,字符的識別就是這條路的敲門磚。本次實驗的結(jié)果完成了無論數(shù)字大小,數(shù)字在屏幕中的位置均可正確識別?;诖耍梢蚤_發(fā)人臉位置識別,人臉模板匹配識別,車牌識別等現(xiàn)如今比較火的機器視覺,人工智能等。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618648 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103669 -
數(shù)字識別
+關(guān)注
關(guān)注
2文章
21瀏覽量
10254
原文標(biāo)題:基于FPGA的數(shù)字識別的實現(xiàn)
文章出處:【微信號:eetop-1,微信公眾號:EETOP】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
關(guān)于數(shù)字識別方法模板匹配的實現(xiàn)
【工程源碼】基于FPGA的數(shù)字識別的實現(xiàn)
MSK信號檢測識別的FPGA實現(xiàn)

使用OpenCV進行車牌數(shù)字識別的資料免費下載

信號識別的意義和發(fā)展趨勢及特定信號識別的方法說明

使用FPGA平臺實現(xiàn)遺傳算法的圖像識別的研究設(shè)計說明

評論