歡迎大家關注我的微信公眾號:FPGA開源工作室
基於FPGA的數字識別的實現二
作者:lee神
1 背景知識
1.1基於FPGA的數字識別的方法
通常,針對印刷體數字識別使用的算法有:基於模版匹配的識別方法、基於BP 神經網絡的識別方法、基於數字特征的識別方法等。下文將對這幾種算法進行討論以及比較。
1>模版匹配法
模版匹配法是一種被較早應用的數字識別算法,該算法的關鍵是對所要識別
的所有數字進行模版構建,之后將圖像中的數字與所有的數字模版一一進行比較,
計算出圖像中數字與每個模版的相似度,根據所計算出的相似度結果進行識別。
其中相似度最高的模版即為我們所要識別的結果。模版匹配法的對數字的大小、
結構形狀的規范化程度要求很高,數字的規范化程度對識別的准確率有着直接的
影響。該算法原理較為簡單,但計算復雜度過大,同時不利於 FPGA 的實現。
2>神經網絡識別算法
神經網絡識別的方法是模仿動物神經網絡的特征,對信息進行分布式並行處
理的一種算法。神經網絡識別算法具有一定的抗干擾能力,但為了保證識別的准
確率,該算法需要負責並且大量的計算,來對神經網絡進行訓練,而過於復雜的
計算不利於 FPGA 對該算法的實現。
3>數字特征識別算法
基於數字特征的識別算法其核心是通過對數字的形狀以及結構等幾何特征
進行分析與統計,通過對數字特征的識別從而達到對圖像中數字的識別。
1.2 基於數字特征算法實現數字識別
我們采用基於數字特征的算法進行數字的識別,通過圖像采集模塊采集到圖像,進行灰度化,二值化,然后進行數字特征的提取和統計來完成對數字的識別,最終顯示到數碼管上,完成圖像信息到數字信息的轉化。
圖1 0-6 數字特征標線
圖2 7-8 數字特征標線
圖3 5數字特征
數字特征信息的提取基於打印體,如上圖1,圖2,圖3所示,以圖3數字5舉例,紅框是數字5的水平和豎直的上下左右邊界。X1在豎直方向的2/5處的水平線,x2在豎直方向的2/3處的水平線,y在水平方的1/2處的水直線。我們以此特征來統計x1,x2,y與數字5的交叉點。
以交叉統計法來區分0-9數字的特征如下表1:
表1 0-9數字特征統計表
數字 |
與y交叉點個數 |
與x1交叉點個數 |
與x2交叉點個數 |
分類 |
0 |
2 |
2 |
2 |
A |
1 |
1 |
1 |
1 |
B |
2 |
3 |
1 |
1 |
C |
3 |
3 |
1 |
1 |
C |
4 |
2 |
2 |
1 |
D |
5 |
3 |
1 |
1 |
C |
6 |
3 |
1 |
2 |
E |
7 |
2 |
1 |
1 |
F |
8 |
3 |
2 |
2 |
G |
9 |
3 |
2 |
1 |
H |
由於2,3,5的數字特征統計表一樣,無法區分所以我們繼續增加數字特征以區分2,3,5。如表2:
表2 2,3,5 數字特征統計
數字 |
與x1的交叉點位置(左,右) |
與x2的交叉點位置(左,右) |
分類 |
2 |
右 |
左 |
I(C) |
3 |
右 |
右 |
J(C) |
5 |
左 |
右 |
K(C) |
這樣通過數字統計完全區分開數字0-9。然后利用FPGA系統搭建實時數字識別系統。
如圖4所示,交通攝像頭對公路上移動的汽車進行實時的定位,隨着小汽車的移動,紅色框也跟隨小汽車移動,實時將小汽車框起來。
1.3 目標跟蹤方法
基於實時物體移動的靜態圖像背景中移動目標檢測是計算機視覺領域的研究熱點,在安防、監控、智能交通、機器智慧、以及軍事領域等社會生活和軍事防御等諸多領域都有較大的實用價值。移動目標檢測的實質是從實時圖像序列中將圖像的變化區域從整體圖像中分割提取出來。由於圖像的后期處理,比如移動目標的分類、跟蹤、測距、判斷大小以及行為動作分析等,主要考慮的是移動目標區域的像素信息,所以對移動目標的准確檢測和有效分割是整個檢測跟蹤系統的重要基礎。
圖4 公路上的運動汽車
目前逐漸形成三種運動目標的檢測算法:
1)幀間差分法 是采用視頻序列中的相鄰兩幀圖像做差的方法,來檢測視頻序列中的移動目標。但是受運動目標和背景變化的影響,檢測過程中有可能出現偽目標或者目標中出現“空洞”,在目標運動不是太快時可以有效的檢測到目標。
2)背景減除法首先在沒有目標的場景中獲取背景圖像,然后利用實時視頻序列和背景圖像做差,來實現地移動目標的檢測。如何獲得背景是背景減除法的關鍵。
3)光流法是通過給圖像中每個像素點賦予一個速度矢量的方法建立光流場,利用光流場中矢量運動的連續性來檢測移動目標。該方法的計算量通常很大,難以實現實時性的檢測。
本節將基於FPGA的目標跟蹤以及統計學的特征統計來實現對數字的位置實時定位以及數字識別,不在局限於數字在屏幕中的位置,也不局限數字的大小。
2 基於FPGA的數字識別的實現
圖5 基於ov5640的FPGA實時數字識別系統
如圖5所示,我們圖像采集使用 ov5640 cmos 500W像素攝像頭,將采集到的彩色RGB圖像首先存入SDRAM中,然后由TFT顯示控制端讀出圖像數據,讀出RGB圖像數據后,我們首先進行RGB轉Ycbcr算法操作,然后對灰度圖像進行閾值分割,形成二值圖像,對二值數字圖像進行邊界追蹤的基礎上進行數字識別,最終將邊界顯示在TFT5寸屏幕上,將識別的數字信息顯示在數碼管上。
圖6 邊界追蹤數字識別的三大主要核心模塊
如圖6 所示,以TFT屏的顯示時序為基准,首先進行邊界追蹤,識別數字邊界后,我們在邊界的基礎上進行統計特征的數字識別。
圖7 邊界追蹤模塊
如圖7 所示,hcount為列計數器,vcount為行計數器,TFT_VS_fall和TFT_VS_rise分別是幀下降沿標志和幀上升沿標志,frame_cnt為幀計數器,hcount_l和hcount_r分別是識別后數字的左右邊界,vcount_l和vcount_r分別是數字的上下邊界。Th_flag_fall和th_flag_rise分別是灰度圖像閾值后的下降沿和上升沿標志。
圖8 數字識別模塊
如圖8 所示基本的邊界信息均來自數字邊界識別模塊,數字識別模塊主要的到數字統計學的兩橫一豎(x1,x2,y)與數字的交點信息,以及其他補充信息。
部分核心代碼:
/*
Module name: digital_recognition.v
Description: digital recognition
Data: 2018/04/17
Engineer: lipu
e-mail: 137194782@qq.com
微信公眾號: FPGA開源工作室
*/
數字識別x1 ,x2,y核心代碼:
TFT顯示屏顯示代碼:
數字識別與數碼管顯示對接代碼:
結果展示:
圖9 實驗原圖
圖10 邊界跟蹤數字識別6
圖11 邊界跟蹤數字識別7
圖12 邊界跟蹤數字識別4
圖13 邊界跟蹤數字識別5
展望:
基於機器視覺的識別是走向人工智能的必然之路,字符的識別就是這條路的敲門磚。本次實驗的結果完成了無論數字大小,數字在屏幕中的位置均可正確識別。基於此,可以開發人臉位置識別,人臉模板匹配識別,車牌識別等現如今比較火的機器視覺,人工智能等。