基于SoPC的嵌入式文字識別系統(tǒng)設(shè)計(jì)
摘 要: 設(shè)計(jì)了一種基于SoPC的嵌入式文字識別系統(tǒng)。在FPGA平臺下,基于SoPC框架搭建軟硬件協(xié)同系統(tǒng),設(shè)計(jì)硬件電路完成文字圖像的采集和預(yù)處理,嵌入Linux系統(tǒng),使用其下的識別引擎完成文字圖像的識別。采用Altera公司的SoPC builder構(gòu)建系統(tǒng)框架,Quartus II完成硬件電路的設(shè)計(jì),在宿主機(jī)Linux環(huán)境下完成了軟件部分的交叉編譯并嵌入到FPGA平臺。整體設(shè)計(jì)在DE2-70開發(fā)板上完成了系統(tǒng)驗(yàn)證。
關(guān)鍵詞: 文字識別;可編程邏輯器件;可編程片上系統(tǒng);Linux
計(jì)算機(jī)文字識別也被稱為光學(xué)文字識別[1]OCR(Optical Character Recognition),在智能計(jì)算機(jī)和辦公自動化領(lǐng)域有著極其重要的應(yīng)用。文字識別的基本原理是通過諸如照相機(jī)、掃描儀等圖像輸入設(shè)備獲取文字圖片,經(jīng)過圖像處理后使用光學(xué)模式判別等算法分析文字圖片,最后將判斷出的文字編碼儲存起來從而完成文字識別。
文字識別設(shè)備對識別速度要求較高,因此圖像采集和預(yù)處理的速度十分關(guān)鍵。同時對識別率要求高,識別字體種類多,因此選用帶學(xué)習(xí)功能的軟件引擎非常重要。另外系統(tǒng)需要交互界面和大量外圍設(shè)備的驅(qū)動,因此需要引入操作系統(tǒng)以方便設(shè)計(jì)開發(fā)。
1 SoPC系統(tǒng)設(shè)計(jì)
系統(tǒng)功能設(shè)計(jì)的整體方案如圖1所示。各部分功能介紹如下:
(1)圖像采集功能,通過外接的攝像頭模塊完成圖像的采集;
(2)由硬件模塊完成文字圖像預(yù)處理功能,能夠?qū)Σ杉奈淖謭D像進(jìn)行傾斜糾正[2]、圖像分割[3]、二值化[4]等處理,保證系統(tǒng)的性能和速度,以提高后續(xù)的文字識別率;
(3)文字圖像識別功能,能夠?qū)⑽淖謭D像中的文字識別出來并保存在TXT中;
(4)識別結(jié)果的存儲和發(fā)送功能,能夠?qū)⒆R別結(jié)果文件存入SD卡或U盤中,或者通過網(wǎng)絡(luò)發(fā)送給上位機(jī);
(5)交互界面功能:能夠通過LCD模塊或者外接的VGA設(shè)備等輸出設(shè)備以及鍵盤、觸摸屏或者鼠標(biāo)等輸入設(shè)備與使用者交互。
整個系統(tǒng)由一塊FPGA和攝像采集、輸入輸出等外圍設(shè)備組成。FPGA硬件模塊完成攝像采集控制和圖像預(yù)處理,CPU作為系統(tǒng)主控控制外設(shè)和硬件模塊的數(shù)據(jù)流。文字識別模塊和外圍設(shè)備驅(qū)動在Linux平臺上進(jìn)行開發(fā)或移植。
本文采用Altera Cyclone2系列的FPGA,通過Altera提供的SoPC技術(shù),可以將Nios Ⅱ軟核處理器和外圍設(shè)備接口IP通過Avalon總線連接起來,并集成在一塊FPGA上。圖2是系統(tǒng)的SoPC設(shè)計(jì)。
2 系統(tǒng)硬件設(shè)計(jì)
文字識別硬件設(shè)計(jì)主要包括文字圖像的采集控制和文字圖像的預(yù)處理。文字圖像的預(yù)處理又分為邊緣檢測、傾斜糾正、文字區(qū)域提取、二值化。硬件模塊總體設(shè)計(jì)圖如圖3所示。
對于待識別的文字圖像,影響文字識別準(zhǔn)確率的不僅僅是后端引擎的性能,更重要的是文字圖像的質(zhì)量和實(shí)際使用的文字圖像,除了光照不均勻且有傾斜外,還會有不少干擾信息。因此,本設(shè)計(jì)選取傾斜糾正、文字圖像分割、二值化等預(yù)處理方法來減少干擾因素,保證后續(xù)文字識別的質(zhì)量。本設(shè)計(jì)的處理方法概括如下:
(1)圖像邊緣就是圖像中灰度發(fā)生急劇變化的地方。本設(shè)計(jì)采用一階導(dǎo)數(shù)的Sobel算子的邊緣檢測算法可以滿足設(shè)計(jì)的需要。本設(shè)計(jì)中將最后得到的梯度值簡化為水平方向梯度絕對值和垂直方向梯度絕對值之和。求出梯度后采用基本全局門限:當(dāng)某像素點(diǎn)(x,y)的梯度值大于或等于設(shè)定的門限T時,規(guī)定該點(diǎn)的像素值為1,反之則為0。
(2)文字圖像傾斜糾正包括傾斜角計(jì)算和圖像旋轉(zhuǎn),即將拍攝中獲取的傾斜圖像根據(jù)傾斜角度進(jìn)行旋轉(zhuǎn),最后得到校正后的圖像。本設(shè)計(jì)采用基于Hough的變換來計(jì)算傾斜角?;驹硎峭ㄟ^找出圖像中通過最多點(diǎn)的直線,即為圖像的傾斜角。變換中,將二維圖像中的點(diǎn)通過極坐標(biāo)系表示,而平面坐標(biāo)系中一條直線上的所有點(diǎn)對應(yīng)的極坐標(biāo)系曲線交于極坐標(biāo)系中唯一一點(diǎn)(ρ,θ),因此,只需要尋找極坐標(biāo)系中最大值即可。
(3)文字圖像的分割可以提取文字信息區(qū)域以減少背景等干擾,同時,由于圖像區(qū)域的減少,對于光照不均勻也有一定的改善。本設(shè)計(jì)根據(jù)文字圖像的具體特點(diǎn)設(shè)計(jì)分割方法,首先將經(jīng)過傾斜糾正的文字圖像通過邊緣檢測算法得到邊緣檢測圖片;后通過逐行和逐列掃描確定行和列的閾值;接著對所有符合閾值的區(qū)域進(jìn)行分析,相隔較近的區(qū)域進(jìn)行聯(lián)通,從而確定最終的分割區(qū)域。最后根據(jù)分割區(qū)域?qū)υ瓐D進(jìn)行圖像分割。
(4)經(jīng)過傾斜糾正和圖像分割后得到的文字圖像仍有光照不均勻和噪聲的影響,因此需要進(jìn)行二值化處理。對圖像進(jìn)行二值化不僅能提高文字識別的精度,對后端引擎的識別速度也有不少的幫助。考慮到實(shí)際拍攝的圖片光照不均勻的程度較高,使用全局或者混合二值化的效果都不理想,且考慮到硬件實(shí)現(xiàn)等因素,本設(shè)計(jì)采取局部閾值二值化。
3 系統(tǒng)軟件設(shè)計(jì)
本設(shè)計(jì)軟件部分基于嵌入式Linux。首先在NiosⅡ處理器中植入嵌入式Linux;然后在Linux內(nèi)核中配置外圍設(shè)備驅(qū)動并加入一些自定義的設(shè)備驅(qū)動;最后基于Linux移植或者開發(fā)交互界面、文字識別引擎等。另外,還需要移植bootloader,系統(tǒng)啟動后,bootloader將Linux內(nèi)核搬到SDRAM中運(yùn)行,從而實(shí)現(xiàn)系統(tǒng)開機(jī)自啟動的功能。
整體流程是:首先將bootloader和Linux內(nèi)核下載進(jìn)入Flash,同時設(shè)定復(fù)位地址為Flash中內(nèi)核bootloader的入口地址。系統(tǒng)啟動時先啟動bootloader,初始化外圍設(shè)備,并通過串口打印輸出信息,同時將Linux內(nèi)核搬運(yùn)到SDRAM進(jìn)行解壓。Linux內(nèi)核解壓完成后內(nèi)核啟動。只是Linux初始化所有的外圍硬件設(shè)備,啟動nano-X圖形接口和nano-wm窗口管理器和基于FLTK的交互界面。交互界面上是各種的按鈕選擇,包括圖片瀏覽、圖像采集、文本瀏覽編輯、網(wǎng)絡(luò)連接及文字識別等應(yīng)用程序的按鈕。當(dāng)按鍵選擇各種功能后會進(jìn)入相應(yīng)的功能模塊。當(dāng)程序運(yùn)行完成后通過選擇返回按鈕再次進(jìn)入到交互界面的按鍵選擇部分。
4 系統(tǒng)功能驗(yàn)證
將硬件信息配置進(jìn)入FPGA,同時通過Flashprogrammer將bootloader和Linux下載到Flash。Linux內(nèi)核啟動完成后,調(diào)用交互界面程序,系統(tǒng)可以通過鼠標(biāo)鍵盤進(jìn)行輸入操作,通過VGA輸出交互界面。此外,可通過串口對系統(tǒng)進(jìn)行調(diào)試并看到打印出來的系統(tǒng)信息。
本設(shè)計(jì)通過NiosⅡ控制圖像采集模塊,通過DE2-70開發(fā)板上的開關(guān)可以調(diào)節(jié)曝光,采集回的圖像通過NiosⅡ?qū)懭隨D卡,用來驗(yàn)證圖像采集模塊的功能。開發(fā)板和攝像頭通過支架固定在文字識別區(qū)域上方。實(shí)際采集的效果滿足應(yīng)用需求。
由于受DE2-70開發(fā)板上SDRAM大小的限制,本設(shè)計(jì)Tesseract引擎的數(shù)據(jù)文件不能太大。因此先使用默認(rèn)引擎進(jìn)行英文的識別,然后用拍攝的幾幅文字圖像對引擎進(jìn)行訓(xùn)練;再使用經(jīng)過訓(xùn)練的引擎對圖像進(jìn)行識別。最終的圖像識別結(jié)果存入SD卡中。文字識別的效果圖如圖4所示。
圖4(a)是默認(rèn)引擎的識別效果圖,圖4(b)是經(jīng)過訓(xùn)練的引擎識別效果圖。通過對比可以看出,未經(jīng)訓(xùn)練的識別效果錯誤率高達(dá)18.59%,而經(jīng)過訓(xùn)練的引擎識別效果明顯好于默認(rèn)引擎識別的結(jié)果,錯誤率僅為7.7%。但是在一些圖像偽影和不連續(xù)處,兩個引擎都出現(xiàn)了不同程度的錯誤。其原因在于目前的文字識別理論還尚未成熟,難以達(dá)到百分之百的文字識別精確度。
本文通過硬件電路完成文字圖像采集和文字圖像預(yù)處理,嵌入式軟件完成文字識別,實(shí)現(xiàn)了一種基于SoPC的嵌入式文字識別系統(tǒng)。此設(shè)計(jì)中構(gòu)建了完整的SoPC系統(tǒng),嵌入了Linux操作系統(tǒng),通過軟硬件協(xié)同充分發(fā)揮各自的優(yōu)點(diǎn),達(dá)到了較好的文字識別效果。
評論