基于FPGA的脫機(jī)手寫體漢字識別系統(tǒng)
1設(shè)計摘要
1.1項目背景
漢字作為非字母化、非拼音化的文字,在當(dāng)今高度信息化的社會里,如何快速高效地將漢字輸入計算機(jī),已成為影響人機(jī)交流信息效率的一個重要瓶頸。目前,漢字輸入主要分為人工鍵盤輸入和機(jī)器自動識別輸入兩種,其中人工鍵入速度慢且勞動強(qiáng)度大。自動識別輸入分為語音識別和漢字識別兩種,其中漢字識別是將漢字點(diǎn)陣圖形轉(zhuǎn)換成電信號,然后輸入給數(shù)字信號處理器或計算機(jī)進(jìn)行處理,依據(jù)一定的分類算法在漢字字符集合中識別出與之相匹配的漢字。因此,研究脫機(jī)手寫體漢字識別的目的就是解決漢字信息如何高速輸入的問題,以更方便快速地進(jìn)行信息加工處理。
脫機(jī)手寫體漢字識別在以下領(lǐng)域中具有廣泛的應(yīng)用前途:
(1)信息處理領(lǐng)域中使用漢字識別技術(shù)可以大大提高紙質(zhì)文檔電子化的效率。若將漢字識別的準(zhǔn)確度和速度均提高到比人工輸入更高的程度,便可在提高效率的同時節(jié)省人力資源。
(2)漢字自動識別是辦公自動化、新聞出版等最理想的輸入方法。
(3)很大部分電子文獻(xiàn)是以點(diǎn)陣圖像存儲的,經(jīng)過漢字識別后以字符存儲,會大大節(jié)省存儲空間,并提高網(wǎng)絡(luò)等傳輸速度。
(4)使用FPGA進(jìn)行漢字識別可以采用并行化計算,從而實現(xiàn)高速低功耗的文字識別。而如果采用人工鍵盤輸入的方式,計算機(jī)在大部分時間里處于等待鍵盤敲擊的閑置狀態(tài),從而導(dǎo)致計算機(jī)系統(tǒng)利用率不高。
和所有模式識別系統(tǒng)一樣,脫機(jī)手寫體漢字識別的主要性能指標(biāo)是正確識別率和識別速度,從實用角度看,還應(yīng)考慮系統(tǒng)的復(fù)雜性、可靠性和價格等等。對識別系統(tǒng)識別率和識別速度的要求,很難有一種統(tǒng)一的、嚴(yán)格的標(biāo)準(zhǔn),主要根據(jù)實際應(yīng)用的需要來確定。但是作為一種輸入手段,漢字識別系統(tǒng)的性能至少應(yīng)該可以和其它輸入手段(如人工輸入)相比擬。
以上指標(biāo)應(yīng)該是漢字識別系統(tǒng)必須達(dá)到的最低要求(在某些需要大量輸入的場合對識別系統(tǒng)性能的要求還應(yīng)更高),但是由于手寫體漢字的特殊性,要達(dá)到上述要求困難較大。手寫體漢字的特殊性可歸納為如下幾條:
(1)字量大,字體多,結(jié)構(gòu)復(fù)雜
(2)部分字形相似
(3)書寫變化大:筆畫不規(guī)范;筆畫之間、偏旁部首之間相對位置不固定;連筆書寫或筆畫粘連。
(4)字與字之間相互粘連
正因為手寫體漢字存在以上四特殊之處,脫機(jī)手寫體漢字識別被一些學(xué)者看成是模式識別的最終目標(biāo)。目前存在的主要問題有:
(1)脫機(jī)手寫體漢字的行、列切分正確率不高;
(2)在特征提取階段,目前尚未找到一組適用于各種字體、筆跡的特征向量;
(3)由于漢字的特征向量維數(shù)較高,將待識別漢字的特征向量同樣本庫中的海量模板匹配會占用很多識別時間,直接導(dǎo)致識別性能不高。
如果能采用FPGA進(jìn)行高速并行計算,使上述困難能得到最大程度的化解,從而使脫機(jī)手寫體漢字識別系統(tǒng)達(dá)到實用階段,則在實際應(yīng)用方面和理論研究方面均有重大意義。由于漢字模式類別多,是大類別(或者稱為超多類)模式識別問題,因此其識別涉及到模式識別、圖像處理、數(shù)字信號處理、人工智能、模糊數(shù)學(xué)等多個學(xué)科,是一門綜合性技術(shù),有著重要的價值和意義。
1.2系統(tǒng)的設(shè)計目標(biāo)
本次設(shè)計要實現(xiàn)的目標(biāo)就是建立一個圖像處理識別的平臺,使手寫的漢字以圖像文件格式(BMP)的形式輸入FPGA,提取出其特征向量,通過分類識別,轉(zhuǎn)換為漢字文本。我們需要設(shè)計和實現(xiàn)脫機(jī)手寫漢字識別系統(tǒng),主要實現(xiàn)樣本采集,預(yù)處理,特征提取,分類與識別五個方面。系統(tǒng)的具體目標(biāo)如下:
(1)使用FPGA對字庫圖像文件進(jìn)行前期處理,包括字符分割平滑去噪、二值化處理、歸一化、細(xì)化等。
(2)使用處理后的標(biāo)準(zhǔn)字符圖像對分類模型進(jìn)行訓(xùn)練,使其成為具有字形識別功能的分類器。通過包括神經(jīng)網(wǎng)絡(luò)、筆畫密度、字型特征、四角特征等多種分類器的測試,綜合考慮每種分類器的并行化可能性、漢字特征針對性等,選出合適的分類器分別進(jìn)行粗分類和細(xì)識別,以利用FPGA的并行運(yùn)算特性大幅度提高識別的效率和準(zhǔn)確度。
(3)對多個手寫樣本圖像文件進(jìn)行并行化的采集和預(yù)處理,提出具有價值的字形特征。采用適當(dāng)?shù)姆诸惼鲗ζ溥M(jìn)行分類識別,得到漢字國標(biāo)碼,從而實現(xiàn)手寫體漢字從圖片到文本的轉(zhuǎn)換。
2系統(tǒng)原理和技術(shù)特點(diǎn)
2.1預(yù)處理
2.1.1行、字切分
從實際出發(fā),一個完整的脫機(jī)手寫體漢字識別系統(tǒng)必須能對輸入的整個手寫體漢字圖像進(jìn)行一些必要的處理,并從中正確切分出一個個手寫體漢字,形成單個漢字的圖像陣列,以便對其進(jìn)行方便的單字識別處理。
通常的做法是對漢字圖像從上到下逐行掃描,同時計算每掃描行的像素,獲取圖像的水平投影,利用文字行間空白間隔造成的水平投影空隙,將行分割,再利用字與字之間的空白間隔在圖像行垂直投影上形成的空白間隙,將單個漢字的圖像切割出來。
2.1.2平滑去噪處理
一幅漢字圖像可能存在著各種噪聲,消除圖像中的這些噪聲成分叫做圖像的平滑化,其目的有兩個:一是按特定的需要突出一幅圖像中的有用信息,使?jié)h字圖像清晰,視覺效果好;另一是為適應(yīng)計算機(jī)處理的需要,消除漢字在輸入數(shù)字化時所混入的噪聲。
常用的平滑去噪算法有中值濾波、鄰域平均法去噪處理(均值濾波) 、Unger平滑算法等,在接下來的研究中我們將詳細(xì)研究討論每種算法的特性并選擇最適合漢字和FPGA特性的一種。
2.1.3二值化
二值化就是把數(shù)字字符圖像的灰度數(shù)字信號處理成只有O和1兩級灰度的圖像。對灰度圖像二值化能顯著的減小數(shù)據(jù)存儲的容量,降低后續(xù)處理的復(fù)雜度。二值化的基本要求是筆劃中不出現(xiàn)空白并較好的保持原來文字的特征。
最簡單的二值化通過設(shè)定固定灰度閾值完成,其關(guān)鍵在于閾值的選擇。常用方法有整體閾值法(由灰度級直方圖確定整體閾值)、局部閾值法(由像素灰度值和像素周圍點(diǎn)局部灰度特性確定閾值)、動態(tài)閾值法(不僅與灰度有關(guān),還與該像素坐標(biāo)位置有關(guān))。局部閾值和動態(tài)閾值雖然能處理質(zhì)量較差的文字,避免整體閾值法帶來的不應(yīng)有的失真。但是,一則時間開銷大,二則考慮到實際的局部閾值和動態(tài)閾值選擇算法往往在圖像的某些部位上產(chǎn)生整體選擇不會產(chǎn)生失真,所以,在文字識別中,一般采用整體閾值法。
2.1.4歸一化
單個漢字圖像(或點(diǎn)陣),還必須進(jìn)行歸一化處理,以消除漢字在位置和大小上的變化。歸一化處理,主要包括位置歸一化和大小歸一化。漢字點(diǎn)陣的歸一化是十分重要的,因為漢字識別主要基于漢字的圖形結(jié)構(gòu),如果不能將漢字點(diǎn)陣在位置和大小上經(jīng)歸一化處理一致起來,漢字點(diǎn)陣的相似性比較就無法正確進(jìn)行。
(1)位置歸一化
主要有兩種,一是重心歸一化,二是外框歸一化。重心歸一化方法是計算出漢字的重心后將重心移到漢字點(diǎn)陣的規(guī)定位置。外框歸一化是將漢字的外框移到點(diǎn)陣規(guī)定位置上。因為重心計算是全局性的,因此抗干擾能力強(qiáng);各邊框搜索是局部性的,易受干擾影響。而大多數(shù)漢字筆劃分布左、右、上、下比較均勻,漢字的重心和漢字字形的中心相差不多,重心歸一化不會造成字形失真,但對個別上下分布不勻的漢字,重心歸一化使字形移動,以致字形超出點(diǎn)陣范圍而造成失真。
(2)大小歸一化
對大小不一的的漢字進(jìn)行識別,必須有效地進(jìn)行大小歸一化。常用方法是根據(jù)漢字點(diǎn)陣的外圍邊框進(jìn)行的,先判斷漢字點(diǎn)陣的上、下、左、右的外圍邊框,然后按比例將漢字線性放大或縮小成規(guī)定大小的點(diǎn)陣。
2.1.5細(xì)化
在二值化點(diǎn)陣圖像中,漢字圖像中的前景像素點(diǎn)對識別率的貢獻(xiàn)是不一樣的,對識別有價值的漢字信息,主要集中在漢字骨架上,因此經(jīng)常用細(xì)化技術(shù)處理原始漢字圖像的前景像素點(diǎn),將滿足一定條件的像素點(diǎn)保留,不滿足條件的像素點(diǎn)置為背景像素點(diǎn),最終得到筆劃寬度為1的漢字骨架圖像。細(xì)化后的漢字骨架的存儲量比原漢字二值化點(diǎn)陣要少得多,在降低了處理工作量的基礎(chǔ)上又保留了原漢字絕大部分特征,利于特征抽取,保證了識別的高效、正確性。但是細(xì)化往往會造成新的畸變,增加了對識別的干擾和困難。細(xì)化的算法很多,大體分類如下:
(1)按細(xì)化后圖形的連續(xù)性分,有四鄰連接算法,八鄰連接算法和混合連接算法。四鄰接連指的是水平垂直四個方向上的連接,八鄰連接則加上正反斜向共八個方向。
(2)按細(xì)化處理過程分,有串行、并行和串并行處理法。FPGA適合并行計算,故我們采用并行處理法,即對邊緣點(diǎn)全部檢測完畢后,再同時改變所有可刪除點(diǎn)的值。
(3)按處理方式分,有單方向,雙方向和四方向細(xì)化法。愈是方向多的細(xì)化處理方式,細(xì)化的速度愈快。
2.1.6預(yù)處理仿真示例
2.2特征提取
由于漢字字量大、字體多、結(jié)構(gòu)復(fù)雜,我們采用分級分類的方法進(jìn)行識別,而每級分類應(yīng)采用最合適的特征提取算法。同時,考慮到FPGA的并行計算特點(diǎn),應(yīng)優(yōu)先選用并行性好的算法。基于以上兩點(diǎn),我們在對BP神經(jīng)網(wǎng)絡(luò)、字型特征、筆畫密度特征、彈性網(wǎng)格特征、筆畫結(jié)構(gòu)特征、四角特征等能夠提取特征的算法進(jìn)行了理論分析,有如下討論:
2.2.1基于分類識別的選擇
BP神經(jīng)網(wǎng)絡(luò):具有自適應(yīng)性,通過反復(fù)訓(xùn)練不斷修正連接權(quán)值以進(jìn)行特征提取。該方法具有較高的普適性,并且可以通過調(diào)整學(xué)習(xí)方法得到一種較優(yōu)的網(wǎng)絡(luò)。但該方法并未利用漢字的特征,適用于子類中單字識別。
字型特征:通過對水平和垂直方向上投影得出的直方圖的分析,可得出一個漢字的字型統(tǒng)計特征(左右、上下等),適于粗分類。
筆畫密度特征:從水平,垂直方向等間隔取多根掃描線,取穿過筆畫數(shù)的最大值,形成2維特征向量,適于粗分類。
彈性網(wǎng)格特征:根據(jù)筆畫位置將單個漢字分割為幾個網(wǎng)格,通過計算每個網(wǎng)格內(nèi)筆畫的矢量特征進(jìn)行特征提取,特征向量較多,適用于子類中單字識別。
筆畫結(jié)構(gòu)特征:通過尋找交叉點(diǎn)和拐點(diǎn)將漢字分為筆段,然后將筆段按傾斜度和連通性合并成筆畫,提取筆畫的矢量特性作為特征向量,向量數(shù)較多,適用于子類中單字識別。但該方法同時可以統(tǒng)計出筆畫總數(shù)和交叉點(diǎn)總數(shù),可用于粗分類。
四角特征:通過提取四角的筆畫結(jié)構(gòu)特征進(jìn)行分類,向量中包含四個元素,可結(jié)合(5)進(jìn)行粗分類。
我們將通過MATLAB對以上算法進(jìn)行實驗,以確定最優(yōu)的分類和子分類中單字識別的算法。
2.2.2基于并行化運(yùn)算的選擇
BP神經(jīng)網(wǎng)絡(luò):由于神經(jīng)網(wǎng)絡(luò)由神經(jīng)元構(gòu)成,每個神經(jīng)元的計算以及權(quán)值調(diào)整計算都為乘法和加法,以上特征使之很適合并行化和流水線計算。
字型特征:投影運(yùn)算為串并行結(jié)合加法運(yùn)算,最大值計算為串行運(yùn)算,字型判斷部分為較復(fù)雜串并行結(jié)合邏輯運(yùn)算。
筆畫密度特征:水平和垂直掃描運(yùn)算為串行,多根掃描線并行,取最大值運(yùn)算為串行。
彈性網(wǎng)格特征:分格后可對每格進(jìn)行并行化運(yùn)算,但其中的向量計算包含大量除法,其實現(xiàn)效率有待驗證。
筆畫結(jié)構(gòu)特征:交叉點(diǎn)尋找為并行,傾斜度計算為并行,提取矢量特性為并行,但以上步驟的結(jié)果入庫過程為串行掃描。
四角特征:四角可并行運(yùn)算。
在進(jìn)行MATLAB進(jìn)行算法實驗的同時,我們會同時使用System Generator進(jìn)一步對算法的并行化及流水線計算可能性進(jìn)行評估實驗,并結(jié)合2.2.1進(jìn)行總體效率評估。
2.3分類識別
在分別對樣本和標(biāo)準(zhǔn)樣本提取特征后,分類和識別可采用神經(jīng)網(wǎng)絡(luò)、決策樹、支持向量機(jī)或統(tǒng)計方法等。對于在FPGA上實現(xiàn)文字識別來說,神經(jīng)網(wǎng)絡(luò)和統(tǒng)計方法可行性較好,下面對這兩種算法的特點(diǎn)進(jìn)行簡單說明。
2.3.1神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)通過網(wǎng)絡(luò)節(jié)點(diǎn)間的連接來存儲信息并完成分類計算。神經(jīng)網(wǎng)絡(luò)分類器通過學(xué)習(xí),根據(jù)訓(xùn)練樣本集來調(diào)整連接的權(quán)值,構(gòu)造出相應(yīng)的分類曲面。由于其較強(qiáng)的曲線擬合和模式分類能力,為手寫簽名識別的研究提供了新的手段。
神經(jīng)網(wǎng)絡(luò)有很強(qiáng)的信息處理能力,它能以任意精度逼近連續(xù)非線性函數(shù);它信息處理的并行機(jī)制中的冗余性可以實現(xiàn)很強(qiáng)的容錯能力;對復(fù)雜不確定問題具有自適應(yīng)和自學(xué)習(xí)能力。在一定多的訓(xùn)練次數(shù)以及合適的參數(shù)選擇下,神經(jīng)網(wǎng)絡(luò)可以得出很理想的結(jié)果。
神經(jīng)網(wǎng)絡(luò)是由大量神經(jīng)元構(gòu)成的,其自身的特點(diǎn)使其非常適合并行化和流水線計算。
2.3.2 統(tǒng)計方法
統(tǒng)計方法主要有最近鄰歸類、基于事例的學(xué)習(xí)等,這些方法本質(zhì)上是基于某種距離進(jìn)行相應(yīng)變換,得到具有另外一些參數(shù)的分類公式。統(tǒng)計學(xué)上主要用的基本距離公式有絕對值距離、歐氏距離、明斯基距離等。
其中,最小距離分類器作為一種直觀有效的分類方法,在實際應(yīng)用中受到廣泛重視,尤其對于高維多模式問題,使用類聚等分類方法存在計算量巨大、難以保證算法收斂等問題,距離函數(shù)分類器更顯其優(yōu)越性。在實際問題中,常把各類模式矢量的統(tǒng)計平均值作為該類模式的基準(zhǔn)模板,用待識別樣本與此基準(zhǔn)模板做比較。
統(tǒng)計計算多為乘累加運(yùn)算,在FPGA中采用分級流水線乘法器和加法器可獲得較高的計算效率。[!--empirenews.page--]
2.4仿真識別結(jié)果(以數(shù)字測試)
附:
(部分matlab主要程序代碼)
主程序:main.m
clear
clc
global X; %圖像特征矩陣
global S; %樣本特征矩陣
sample_training; %訓(xùn)練樣本
E=imread('6_1.jpg'); %待識別圖像讀入
%A=gca;
imshow(E);%axis(A);
initial(E);
i=0;j=0;d=0;
Dm=zeros(10,15);
for i=1:10
for j=1:15
Dm(i,j)=abs(S(i,j)-X(1,j));
end
end
D=sum(Dm,2);
Position=find(D==min(D));
% i=Position;
if Position==10
Position=0;
else break;
end
set(handles.edit1,'String',Position);
預(yù)處理程序:initial.m
function initial(RGB)
GRAY=rgb2gray(RGB);
%高斯濾波
g=fspecial('gaussian',3,3);
GRAY1=imfilter(GRAY,g);
%切割圖像
BW=im2bw(GRAY1);
[m,n]=size(BW);
%豎直投影
I1=sum(BW);
L=max(I1);
L1=L-2;
x1=0;x2=0;k=0;
for k=1:m
if I1(k)
x1=k;break;
else
k=k+1;
end
end
for k=x1:m
if I1(k)>L1
x2=k;break;
else
k=k+1;
end
end
%水平投影
BW1=BW';
I2=sum(BW1);
L=max(I2);
L2=L-2;
y1=0;y2=0;k=0;
for k=1:n
if I2(k)
y1=k;break;
else
k=k+1;
end
end
for k=y1:n
if I2(k)>L2
y2=k;break;
else
k=k+1;
end
end
%行,子切分
BW2=BW(y1:y2,x1:x2);
%圖像歸一化
NOR=imresize(BW2,[120 90]);
%特征提取
X=zeros(1,15);
X(1)=bwarea(NOR(1:40,1:30))/10800;
X(2)=bwarea(NOR(1:40,31:60))/10800;
X(3)=bwarea(NOR(1:40,61:90))/10800;
X(4)=bwarea(NOR(41:80,1:30))/10800;
X(5)=bwarea(NOR(41:80,31:60))/10800;
X(6)=bwarea(NOR(41:80,61:90))/10800;
X(7)=bwarea(NOR(81:120,1:30))/10800;
X(8)=bwarea(NOR(81:120,31:60))/10800;
X(9)=bwarea(NOR(81:120,61:90))/10800;
X(10)=X(1)+X(2)+X(3);
X(11)=X(4)+X(5)+X(6);
X(12)=X(7)+X(8)+X(9);
X(13)=X(1)+X(4)+X(7);
X(14)=X(2)+X(5)+X(8);
X(15)=X(3)+X(6)+X(9);