<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于SoPC的嵌入式文字識(shí)別系統(tǒng)設(shè)計(jì)

          基于SoPC的嵌入式文字識(shí)別系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2011-11-07 來(lái)源:網(wǎng)絡(luò) 收藏

          摘 要: 設(shè)計(jì)了一種基于SoPC的嵌入式系統(tǒng)。在FPGA平臺(tái)下,基于SoPC框架搭建軟硬件協(xié)同系統(tǒng),設(shè)計(jì)硬件電路完成文字圖像的采集和預(yù)處理,嵌入Linux系統(tǒng),使用其下的識(shí)別引擎完成文字圖像的識(shí)別。采用Altera公司的SoPC builder構(gòu)建系統(tǒng)框架,Quartus II完成硬件電路的設(shè)計(jì),在宿主機(jī)Linux環(huán)境下完成了軟件部分的交叉編譯并嵌入到FPGA平臺(tái)。整體設(shè)計(jì)在DE2-70開發(fā)板上完成了系統(tǒng)驗(yàn)證。
          關(guān)鍵詞: ;;Linux

           計(jì)算機(jī)也被稱為光學(xué)文字識(shí)別[1]OCR(Optical Character Recognition),在智能計(jì)算機(jī)和辦公自動(dòng)化領(lǐng)域有著極其重要的應(yīng)用。文字識(shí)別的基本原理是通過(guò)諸如照相機(jī)、掃描儀等圖像輸入設(shè)備獲取文字圖片,經(jīng)過(guò)圖像處理后使用光學(xué)模式判別等算法分析文字圖片,最后將判斷出的文字編碼儲(chǔ)存起來(lái)從而完成文字識(shí)別。
          文字識(shí)別設(shè)備對(duì)識(shí)別速度要求較高,因此圖像采集和預(yù)處理的速度十分關(guān)鍵。同時(shí)對(duì)識(shí)別率要求高,識(shí)別字體種類多,因此選用帶學(xué)習(xí)功能的軟件引擎非常重要。另外系統(tǒng)需要交互界面和大量外圍設(shè)備的驅(qū)動(dòng),因此需要引入操作系統(tǒng)以方便設(shè)計(jì)開發(fā)。
          1 SoPC系統(tǒng)設(shè)計(jì)
          系統(tǒng)功能設(shè)計(jì)的整體方案如圖1所示。各部分功能介紹如下:

          基于SoPC的嵌入式文字識(shí)別系統(tǒng)設(shè)計(jì)

          (1)圖像采集功能,通過(guò)外接的攝像頭模塊完成圖像的采集;
          (2)由硬件模塊完成文字圖像預(yù)處理功能,能夠?qū)Σ杉奈淖謭D像進(jìn)行傾斜糾正[2]、圖像分割[3]、二值化[4]等處理,保證系統(tǒng)的性能和速度,以提高后續(xù)的文字識(shí)別率;
          (3)文字圖像識(shí)別功能,能夠?qū)⑽淖謭D像中的文字識(shí)別出來(lái)并保存在TXT中;
          (4)識(shí)別結(jié)果的存儲(chǔ)和發(fā)送功能,能夠?qū)⒆R(shí)別結(jié)果文件存入SD卡或U盤中,或者通過(guò)網(wǎng)絡(luò)發(fā)送給上位機(jī);
          (5)交互界面功能:能夠通過(guò)LCD模塊或者外接的VGA設(shè)備等輸出設(shè)備以及鍵盤、觸摸屏或者鼠標(biāo)等輸入設(shè)備與使用者交互。
          整個(gè)系統(tǒng)由一塊FPGA和攝像采集、輸入輸出等外圍設(shè)備組成。FPGA硬件模塊完成攝像采集控制和圖像預(yù)處理,CPU作為系統(tǒng)主控控制外設(shè)和硬件模塊的數(shù)據(jù)流。文字識(shí)別模塊和外圍設(shè)備驅(qū)動(dòng)在Linux平臺(tái)上進(jìn)行開發(fā)或移植。
          本文采用Altera Cyclone2系列的FPGA,通過(guò)Altera提供的SoPC技術(shù),可以將Nios Ⅱ軟核處理器和外圍設(shè)備接口IP通過(guò)Avalon總線連接起來(lái),并集成在一塊FPGA上。圖2是系統(tǒng)的SoPC設(shè)計(jì)。

          基于SoPC的嵌入式文字識(shí)別系統(tǒng)設(shè)計(jì)

          2 系統(tǒng)硬件設(shè)計(jì)
          文字識(shí)別硬件設(shè)計(jì)主要包括文字圖像的采集控制和文字圖像的預(yù)處理。文字圖像的預(yù)處理又分為邊緣檢測(cè)、傾斜糾正、文字區(qū)域提取、二值化。硬件模塊總體設(shè)計(jì)圖如圖3所示。

          基于SoPC的嵌入式文字識(shí)別系統(tǒng)設(shè)計(jì)

          對(duì)于待識(shí)別的文字圖像,影響文字識(shí)別準(zhǔn)確率的不僅僅是后端引擎的性能,更重要的是文字圖像的質(zhì)量和實(shí)際使用的文字圖像,除了光照不均勻且有傾斜外,還會(huì)有不少干擾信息。因此,本設(shè)計(jì)選取傾斜糾正、文字圖像分割、二值化等預(yù)處理方法來(lái)減少干擾因素,保證后續(xù)文字識(shí)別的質(zhì)量。本設(shè)計(jì)的處理方法概括如下:
          (1)圖像邊緣就是圖像中灰度發(fā)生急劇變化的地方。本設(shè)計(jì)采用一階導(dǎo)數(shù)的Sobel算子的邊緣檢測(cè)算法可以滿足設(shè)計(jì)的需要。本設(shè)計(jì)中將最后得到的梯度值簡(jiǎn)化為水平方向梯度絕對(duì)值和垂直方向梯度絕對(duì)值之和。求出梯度后采用基本全局門限:當(dāng)某像素點(diǎn)(x,y)的梯度值大于或等于設(shè)定的門限T時(shí),規(guī)定該點(diǎn)的像素值為1,反之則為0。
          (2)文字圖像傾斜糾正包括傾斜角計(jì)算和圖像旋轉(zhuǎn),即將拍攝中獲取的傾斜圖像根據(jù)傾斜角度進(jìn)行旋轉(zhuǎn),最后得到校正后的圖像。本設(shè)計(jì)采用基于Hough的變換來(lái)計(jì)算傾斜角?;驹硎峭ㄟ^(guò)找出圖像中通過(guò)最多點(diǎn)的直線,即為圖像的傾斜角。變換中,將二維圖像中的點(diǎn)通過(guò)極坐標(biāo)系表示,而平面坐標(biāo)系中一條直線上的所有點(diǎn)對(duì)應(yīng)的極坐標(biāo)系曲線交于極坐標(biāo)系中唯一一點(diǎn)(ρ,θ),因此,只需要尋找極坐標(biāo)系中最大值即可。
          (3)文字圖像的分割可以提取文字信息區(qū)域以減少背景等干擾,同時(shí),由于圖像區(qū)域的減少,對(duì)于光照不均勻也有一定的改善。本設(shè)計(jì)根據(jù)文字圖像的具體特點(diǎn)設(shè)計(jì)分割方法,首先將經(jīng)過(guò)傾斜糾正的文字圖像通過(guò)邊緣檢測(cè)算法得到邊緣檢測(cè)圖片;后通過(guò)逐行和逐列掃描確定行和列的閾值;接著對(duì)所有符合閾值的區(qū)域進(jìn)行分析,相隔較近的區(qū)域進(jìn)行聯(lián)通,從而確定最終的分割區(qū)域。最后根據(jù)分割區(qū)域?qū)υ瓐D進(jìn)行圖像分割。
          (4)經(jīng)過(guò)傾斜糾正和圖像分割后得到的文字圖像仍有光照不均勻和噪聲的影響,因此需要進(jìn)行二值化處理。對(duì)圖像進(jìn)行二值化不僅能提高文字識(shí)別的精度,對(duì)后端引擎的識(shí)別速度也有不少的幫助??紤]到實(shí)際拍攝的圖片光照不均勻的程度較高,使用全局或者混合二值化的效果都不理想,且考慮到硬件實(shí)現(xiàn)等因素,本設(shè)計(jì)采取局部閾值二值化。
          3 系統(tǒng)軟件設(shè)計(jì)
          本設(shè)計(jì)軟件部分基于嵌入式Linux。首先在NiosⅡ處理器中植入嵌入式Linux;然后在Linux內(nèi)核中配置外圍設(shè)備驅(qū)動(dòng)并加入一些自定義的設(shè)備驅(qū)動(dòng);最后基于Linux移植或者開發(fā)交互界面、文字識(shí)別引擎等。另外,還需要移植bootloader,系統(tǒng)啟動(dòng)后,bootloader將Linux內(nèi)核搬到SDRAM中運(yùn)行,從而實(shí)現(xiàn)系統(tǒng)開機(jī)自啟動(dòng)的功能。
          整體流程是:首先將bootloader和Linux內(nèi)核下載進(jìn)入Flash,同時(shí)設(shè)定復(fù)位地址為Flash中內(nèi)核bootloader的入口地址。系統(tǒng)啟動(dòng)時(shí)先啟動(dòng)bootloader,初始化外圍設(shè)備,并通過(guò)串口打印輸出信息,同時(shí)將Linux內(nèi)核搬運(yùn)到SDRAM進(jìn)行解壓。Linux內(nèi)核解壓完成后內(nèi)核啟動(dòng)。只是Linux初始化所有的外圍硬件設(shè)備,啟動(dòng)nano-X圖形接口和nano-wm窗口管理器和基于FLTK的交互界面。交互界面上是各種的按鈕選擇,包括圖片瀏覽、圖像采集、文本瀏覽編輯、網(wǎng)絡(luò)連接及文字識(shí)別等應(yīng)用程序的按鈕。當(dāng)按鍵選擇各種功能后會(huì)進(jìn)入相應(yīng)的功能模塊。當(dāng)程序運(yùn)行完成后通過(guò)選擇返回按鈕再次進(jìn)入到交互界面的按鍵選擇部分。
          4 系統(tǒng)功能驗(yàn)證
          將硬件信息配置進(jìn)入FPGA,同時(shí)通過(guò)Flashprogrammer將bootloader和Linux下載到Flash。Linux內(nèi)核啟動(dòng)完成后,調(diào)用交互界面程序,系統(tǒng)可以通過(guò)鼠標(biāo)鍵盤進(jìn)行輸入操作,通過(guò)VGA輸出交互界面。此外,可通過(guò)串口對(duì)系統(tǒng)進(jìn)行調(diào)試并看到打印出來(lái)的系統(tǒng)信息。
          本設(shè)計(jì)通過(guò)NiosⅡ控制圖像采集模塊,通過(guò)DE2-70開發(fā)板上的開關(guān)可以調(diào)節(jié)曝光,采集回的圖像通過(guò)NiosⅡ?qū)懭隨D卡,用來(lái)驗(yàn)證圖像采集模塊的功能。開發(fā)板和攝像頭通過(guò)支架固定在文字識(shí)別區(qū)域上方。實(shí)際采集的效果滿足應(yīng)用需求。
          由于受DE2-70開發(fā)板上SDRAM大小的限制,本設(shè)計(jì)Tesseract引擎的數(shù)據(jù)文件不能太大。因此先使用默認(rèn)引擎進(jìn)行英文的識(shí)別,然后用拍攝的幾幅文字圖像對(duì)引擎進(jìn)行訓(xùn)練;再使用經(jīng)過(guò)訓(xùn)練的引擎對(duì)圖像進(jìn)行識(shí)別。最終的圖像識(shí)別結(jié)果存入SD卡中。文字識(shí)別的效果圖如圖4所示。

          基于SoPC的嵌入式文字識(shí)別系統(tǒng)設(shè)計(jì)

          圖4(a)是默認(rèn)引擎的識(shí)別效果圖,圖4(b)是經(jīng)過(guò)訓(xùn)練的引擎識(shí)別效果圖。通過(guò)對(duì)比可以看出,未經(jīng)訓(xùn)練的識(shí)別效果錯(cuò)誤率高達(dá)18.59%,而經(jīng)過(guò)訓(xùn)練的引擎識(shí)別效果明顯好于默認(rèn)引擎識(shí)別的結(jié)果,錯(cuò)誤率僅為7.7%。但是在一些圖像偽影和不連續(xù)處,兩個(gè)引擎都出現(xiàn)了不同程度的錯(cuò)誤。其原因在于目前的文字識(shí)別理論還尚未成熟,難以達(dá)到百分之百的文字識(shí)別精確度。
          本文通過(guò)硬件電路完成文字圖像采集和文字圖像預(yù)處理,嵌入式軟件完成文字識(shí)別,實(shí)現(xiàn)了一種基于SoPC的嵌入式文字識(shí)別系統(tǒng)。此設(shè)計(jì)中構(gòu)建了完整的SoPC系統(tǒng),嵌入了Linux操作系統(tǒng),通過(guò)軟硬件協(xié)同充分發(fā)揮各自的優(yōu)點(diǎn),達(dá)到了較好的文字識(shí)別效果。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();