馬 飛,申 遠,孫國瑞,程榮花
(平頂山學院 軟件學院,河南 平頂山 467000)
現代生活節奏的加快要求我們高效的工作效率和低成本的產出,科技的發展使得這一要求得以實現。我們用到很多工具來幫助我們節省時間,手機電腦等工具幾乎應有盡有。但是這些技術仍存在一些不完整性和缺陷。比如廣告紙上的聯系方式、姓名只需拍照識別就能及時獲得,即時撥通電話就可以通信。這種方式較之保存圖片來說,省去大量的內存空間和撥打電話的時間,是人們期望的方式,也是人工智能的發展趨勢。我們都想坐在電腦前把紙張上的內容通過攝像頭獲取,這就推動了印刷體識別的發展。因為現在印刷體識別仍存在代價高,操作復雜的弊端,而圖像若通過攝像頭獲取則節約了大量的成本,所以基于圖像處理的印刷體的單詞識別系統就顯得十分必要。由于計算機科學和科技的發展諸多的此類產品也露出水面如:漢王雙槍筆,智能監控系統,人臉通,指紋識別,車牌識別等產品等都是基于圖像來處理的。常見的圖像識別技術研究也很廣泛,如模板匹配、貝葉斯、Fisher、SVM和神經網絡[1-3]等主要算法。
獲取圖像是設計識別軟件的基礎,最常見的獲取方式有:在圖像輸入區進行手動繪制,這有利于樣本訓練時的樣本多樣化。導入本地圖像到圖像輸入區,這是最基本的獲取圖像的方法。通過攝像頭拍攝獲取圖像。
1)攝像頭拍攝:通過攝像頭拍攝得到圖像,將圖像導入到圖像輸入區,或直接把拍攝到的圖像設置到輸入區。
2)導入本地圖像:在項目中添加一個文件對話框,通過打開文件對話框找到目標圖像,將其添加到圖像輸入區。
圖像預處理是一個良好的圖像識別系統必不可少的環節。本節主要包括全局二值化、3×3中值濾波去噪等操作,以達到改善原圖像的目的。
一般的閾值的處理方式如下:設一幅原始圖像的像素值p(i,j)的取值范圍為[0,m],那么設有其閾值為 T=t,0<t<m,則映射成新的二值圖像的像素值 p′(i,j)為:

用1表示需要的圖像,0表示背景。
在字符圖像處理中,二值化處理占有非常重要的地位。這樣在圖像處理系統中,可以減少圖像冗余信息的提取從而提高處理速度。雖然一般的圖像處理時會利用所有的圖像灰度級,但是本系統處理的圖像灰度級不會太多,因為有的字符、指紋、工程圖等圖像本身就是二值的,而且需要獲取的圖像信息只是字符像素的信息,所以本系統二值化處理只要得到兩個灰度值。
圖像信息在采集過程中往往受到各種噪聲源的干擾,這些噪聲在圖像上的常常表現為一些孤立的像素點,這可理解為像素的灰度是空間相關的,即噪聲點像素灰度與它們鄰近像素的灰度有著顯著不同。通常,一般的前置圖像處理后的圖像仍然帶有后續所不希望夾帶的孤立像素點,這種干擾或孤立像素點如不經過濾波去噪處理[4],會對以后的圖像區域分割、分析和判斷帶來影響。所以為了精確識別,要進行圖像的濾波去噪處理。本文采用3×3中值濾波去噪,如圖1所示為圖像去噪前的原始圖像,如圖2所示為經過中值濾波后的圖像,從圖像效果來看,噪聲的支隊效果較好。像中的所有行的上下邊界。

圖1 圖像去噪前Fig.1 Image before the filter noise
[Step 2]:定義圖像的左邊界、右邊界為此行的左邊界、右邊界 edgeRows[rowsNumber,left],edgeRows[rowsNumber,right]。
[Step 3]:獲取了行的上下邊界后,從圖像的左邊界掃描到右邊界第一次獲取的黑色像素點的位置的水平分量位置存到 edgeRows[rowsNumber,left]中,再以行的上下邊界為邊界,從圖像右邊界掃描到左邊界第一次獲取的黑色像素點的位置的水平分量位置存到edgeRows[rowsNumber,right]中。
2)在行的基礎上單個字符的定位
[Step 1]:在第一步中獲得的行位置的基礎上,以行的上下邊界為掃描邊界從左到右掃描圖像中標定的字符行的區域,判斷掃描的像素點是否為黑色,若為黑色則記下此像素點位置的水平分量即將它設置成字符的左邊界edgeLetters[lettersNumber,left];繼續循環判斷像素點是否還有黑色若有則繼續循環,直到不發現黑色像素點記下此時像素點位置的水平位置為字母的右邊界edgeLetters[lettersNumber,right];繼續用遞歸算法獲取下一個字母的左右邊界。
[Step 2]:利用同[step1]同樣的原理獲得每行的每個字母的 上 下 邊 界 edgeLetters [lettersNumber,top], edgeLetters[lettersNumber,dwon]。
多個字符定位功能的實現如圖3多個字母定位示例。

圖2 圖像去噪后Fig.2 Image after the filter noise
處理印刷體文字識別時,最常見的還是多個字母的識別,當圖像中有多個印刷體字符時,需要先獲取行的行的上下左右邊界坐標,再獲取單個字符的上下左右邊界坐標,以便進行單個字符的特征提取和特征值匹配來識別的字符。多個字符的定位分兩步,實現算法:
1)行的定位
[Step 1]:獲取圖像后從圖像的上邊界到下邊界掃描圖像區域,當檢測到黑色時記下此像素點位置并把該點的水平方向的坐標存入數組edgeRows[rowsNumber,top]即行的上邊界,繼續向下掃描若仍檢測到黑色不做任何事,直到檢測到非黑色記下此時像素點,并把此點的坐標的垂直分量值記下存入edgeRows[rowsNumber,down]即行的下邊界,繼續掃描圖像獲取下一行字符的上、下邊界,直到掃描完整張圖片,獲取到圖

圖3 多個字母定位示例Fig.3 Location of multiply characters
字母分割的具體算法:
[Step 1]:經過字符區域定位,得出字符所占區域的邊界坐標為左邊界 edgeOfLetter[left],右邊界 edgeOfLetter[right],上邊界 edgeOfLetter[top],下邊界 edgeOfLetter[down], 字符區域的寬 width=edgeOfLetter[right]-edgeOfLetter[left],高 height=edgeOfLetter[top]-edgeOfLetter[down];
[Step 2]:判斷字符區域的寬度 width和高度height,若width和height同時大于9則用9×9分割取N=9;若width和height有一個不滿足大于9則用5×5分割。
[Step 3]:為保證劃分的區域均勻,將前(N-1)×(N-1)格的每一格的寬度設為wx=width/N,高度設為hy=height/N;
[Step 4]:由于字符區的寬高大小不定,不是每個字符都能剛好平均劃分,所以最后一列的寬應定為width-wx×(N-1),最后一行的高應定為 height-hy×(N-1);
[Step 5]:獲取分割點后,將分割線以橫向和縱向不同顏色繪制到定位的字符圖像中,直觀地顯示出分割的效果(這一步可有可無,在完善系統時并不需要將分割線描繪出來);如圖4分割字母前和圖5分割字母后的效果圖。
本文采用的網格統計特征值[5]算法,具體實現算法:

圖4 字母“B”分割前Fig.4 Letter B before splitting

圖5 字母“B”分割后Fig.5 Letter B after splitting
[Step 1]:在對單個字符進行定位后,將定位的字符區域分為N×N(本系統采用9×9的分割)個小區域;
[Step 2]:分別對每個小區域進行判斷,利用calculatePixel(int left, int right, int top, int down)函數統計[1]中分割后每個小區域中黑像素點的個數,若一個單元格的黑像素點個數超過pixelNum(本系統設為6)個,就將此區域的特征值設置為1,否則設置為0存儲于特征數組arrayOfCharacter[];
[Step 3]:將步驟[Step 2]中獲得的該字符的所有特征值arrayOfCharacter[],按照特定的命名方式,存儲到相應的*.dat的文件中;如圖7字符“a”的9×9分割特征值。

圖6 字符“a”的9×9分割特征值Fig.6 9×9 grid feature of"a"
英文單詞的識別實際上就轉換為英文字母的識別,然后再組合為單詞的過程。識別就是將提取的信息與記憶中的信息進行分類和模式匹配的過程。分類是將一個未知樣本分到幾個預先已知類的過程。數據分類問題的解決是一個兩步過程:第一步,建立一個模型,描述預先的數據集或概念集。
本文所用最短歐式距離的模式識別方法,結合特征提取階段所得的各字母的特征,實現單詞中字母的識別。具體實現如下:
[Step1]:從特征庫打開各字母的特征存儲文件,遍歷所有文件,統計出特征文件的數量;
[Step2]:將提取出來的特征值與特征庫里的所有文件進行比對;
[Step3]:使用上述公式,計算待測樣品x與訓練集中的漢字的每個特征的距離,并將結果存放在二維數組arrTrainedFeature[]中;
[Step5]:找出運算結果數組arrTrainedFeature[]中的最小值對應的字母編碼,轉換為對應的字母和空格、標點符號,識別后進行組合成單詞。
語音合成技術是信息處理領域的一個重要分支 ,實現計算機文本文件語音合成 ,就是讓計算機開口說話 ,這也是人工智能的一個重要研究方向。語音合成是一門跨學科的技術,涉及到自然語言理解、語音學、信號處理、心理學、聲學等。TTS技術(Text To Speech)是當前語音合成技術的代表性研究內容 ,它解決的主要問題是如何將文本狀態的文字信息轉化為可聽的聲音信息。這一技術在人機對話、電話咨詢、自動播音、助講助讀、語音教學等方面有著廣闊的應用前景。
最新的TTS技術推出已經兩年有余。Text To Speech是一個將Text文本通過計算機讀出來的過程。TTS的原理在此不作更深入的講解 ,因為Speech SDK開發包已經將所有的技術包含在內 ,只需要將這些技術以 “類”和“函數”的方式應用到自己的程序中就可以了。
通過研究現有的一些語音朗讀軟件發現,有很多的產品都使用了MicroSoft的Speech Api。MicroSoFt Speech Api的功能十分強大,不僅可以準確讀出單詞,而且還能夠實現流利地朗讀句子乃至段落、文章。對于不常見的單詞(如中文人名的拼音),也能夠根據英文的發音原則,讀出較準確的發音。
本課題運用了現有的語音技術融合到本系統中。下面介紹一下實現算法:
[Step 1]:安裝 MicroSoFt Speech Api,它可以在金山詞霸的光盤上找到,或者從網上下載,文件名是SpchApi.exe,是個自解壓文件,直接運行即可。同時還需要安裝朗讀的引擎tts51eng.msi,本系統采用的是男聲的引擎;
[Step 2]:在項目中引入TTS技術相應的開發包SpeechLib;
[Step 3]:雖然開發包中有可以進行朗讀的類,但是開發包中的類方法中有太多的參數,使用不方便,所以在本系統中創建一個類Speech,該類中定義一個SpVoicel類型的變量voice 和 Speak(String text)方法;
[Step 4]:完成字符識別后的文本會在richTextBox中展現,使用字符串變量text獲取richTextBox的文本;
[Step 5]:在窗體中加入一個按鈕,觸發單擊按鈕事件創建一個 Speech對象 speech,speech調用 Speak(String s)方法即speech.Speak(text)。完成這些步驟,就完成了文本朗讀功能的實現。
最終處理效果系統界面圖如圖7所示。本系統能夠對成篇的英文進行精確的定位、識別和朗讀,并能夠將中間處理結果顯示出來,以方便用戶查閱對應的識別過程。

圖7 識別結果圖Fig.7 Recognition system
文中利用VS.net2005[6-7]構建了一個可以進行印刷體單詞識別和朗讀的系統,能夠進行較為準確的識別和朗讀。但印刷體單詞識別的難點主要在于以下幾方面:
1)有些英文單詞大小寫字形區別不大,在識別中很容易將大寫識別成小寫,或者把小寫識別成大寫如:W和w,S和s等。
2)英文單詞分詞問題。英文單詞由字母組成,字母之間的距離和單詞之間的距離在印刷體中有時很難區分。所以在識別單詞時,要注意分詞。
3)由于脫機印刷體字母的輸入只是簡單的一幅圖像,它不像聯機輸入那樣可以從物理輸入設備上獲得字符筆畫的順序信息,因此脫機印刷體字母識別是一個更有挑戰性的問題。
[1]王科俊.印刷體中文文檔識別系統的研究 [D].哈爾濱:哈爾濱工程大學,2009.
[2]張宏濤.印刷體漢字處理后處理方法的研究[J].中文信息學報,2009(11):67-71.
ZHANG Hong-tao.Post-processing approach for printed chinese character recognition[J].Journal of Chinese Information Processing,2009(11):67-71.
[3]梁涌.印刷體漢字識別系統的研究與實現 [D].西安:西北工業大學,2006.
[4]倪桂博.一種快速有效的印刷體漢字識別方法[J].華北電力大學學報,2008(5):107-112.
NI Gui-boa.A fast and effective method for printed Chinese character recognition[J].Journal of North China Electric Power University:Natural Science Edition,2008(5):107-112.
[5]楊淑瑩.模式識別與智能計算:Matlab技術實現[M].北京:電子工業出版社,2008.
[6]趙春江.C#數字圖像處理算法典型實例 (附光盤)[M].北京:人民郵電出版社,2009.
[7]李蘭友.Visual C#圖像處理程序設計實例[M].北京:國防工業出版社,2003.