?

基于Tesseract_OCR文字識別的研究

2021-11-22 08:56馬明棟
計算機技術與發展 2021年11期
關鍵詞:像素點字符對話框

曾 悅,馬明棟

(1.南京郵電大學 通信與信息工程學院,江蘇 南京 210003;2.南京郵電大學 地理與生物信息學院,江蘇 南京 210003)

0 引 言

在二十世紀三十年代末,德國科學家Tausheck提出了OCR的概念[1],并獲得了OCR專利。之后美國科學家Handel也提出了利用技術進行文字識別[2]的想法。二十世紀六十年代,OCR技術首次被使用于生產實踐中,至此第一批OCR系統誕生,其中Farrington3010最具有代表性[3],但是運行速度慢且只能識別簡單的字符。1996年,IBM公司的Casey和Nagy完成了中文字符識別系統的研發,采用模板匹配法能識別1 000個印刷體漢字[4]。

中國在二十世紀七十年代才開始在字符識別方面的研究,主要是常見的字符,比如數字、英文和漢字。1986年進入到一個實質性的階段,雖然很多研究單位推出了一些中文OCR的產品,但由于識別率低,硬件設備成本高,運行速度慢等,未能達到實際要求。只有信息部門、新聞出版社等個別單位使用漢字識別軟件。

到二十世紀九十年代,隨著平臺式掃描儀的普及,以及信息科學技術的發展,大大推動了該技術的發展,使得識別的速度、效率大大滿足了用戶的使用要求,并在學校、醫院、企業等地方得到了廣泛的應用。

Tesseract是一個OCR庫,目前由Google贊助[5]。Tesseract是目前公認最優秀、最精確的開源OCR系統。除了極高的精確度,Tesseract也具有很高的靈活性。它可以通過訓練識別出任何字體,也可以識別出任何Unicode字符[6]。

文中在分析了文字識別系統的需求后,結合相關技術和方法設計了一個基于Tesseract文字識別框架的文字識別系統,主要工作如下:

(1)文字信息提?。涸谧R別輸入圖片之前對圖片進行處理,避免原圖的質量、亮暗程度、傾斜程度對實驗結果的影響,使得提取出來的文字信息區域平滑、規范。截取修正包含完整的文字信息區域,對原圖上的所有文字進行識別,以提高有效性。

(2)文字識別:通過Tesseract識別框架,對提取出的文字信息進行模型訓練和優化字庫,提取輸入圖片中的文字信息,并重構原圖版面和矯正識別信息。

(3)系統架構設計:根據項目需求分析,對各個模塊進行實現并優化系統。

1 文字信息提取

1.1 圖像預處理

圖像處理主要是對圖像成像所出現的問題進行修正,可以降低隨機噪聲,為后續的識別做準備。預處理一般包括二值化,灰度化,畸變校正,幾何變換(扭曲、旋轉、透視等等),去除模糊、圖像增強、光線校正,規范化等等[7]。

二值化(image binarization)[8]是一種基于灰度直方圖的圖像分割算法,將圖像中的像素分為兩類,通過適當的閾值選取獲得仍然可以反映圖像整體和局部特征的二值化圖像,減少圖像中的數據量,凸顯目標輪廓。適用于物體與背景的灰度值差別比較大的情況。二值化算法的初始值被設置為整個圖像灰度值的平均值,求取最優二值化的值是這個算法的關鍵,也就是盡量求取灰度直方圖中兩個雙峰間的最低點。

然而,如果直接用OTSU大律法[9]進行二值化,實際效果并不是很好,因為這是全局閾值,比較好的二值化方法應該用局部閾值,畢竟圖像上每個地方的灰度值差別是比較大的。局部自適應二值化的基本思想:首先針對某個像素點,確定它的鄰域大小,然后根據鄰域內像素值的分布情況來決定該像素點處的閾值,進行二值化。該方法有較強的自適應能力,能夠根據局部亮度值設定閾值,解決一定程度的明暗情況??梢杂行У貏澐至炼然蛘邔Ρ榷炔町愝^大的區域,獲得效果較好的二值化圖像。

Bernsen方法主要是一種動態選擇閾值的自適應方法,主要步驟為:首先讀取圖像并按照要求填充為指定形式的圖像,然后根據當前位置像素點鄰域灰度情況計算該點二值化閾值,比較當前像素點灰度值和閾值大小,如果閾值較小則將該點視為白點,反之將該點視為黑點,最后構建二值圖像并顯示。

假設在一幅M×N大小的圖像中,針對(i,j)處的像素點,它的灰度值為f(i,j),將大小為(2ω+1)×(2ω+1)的正方形區域視為鄰域窗口,則圖像中(i,j)位置像素點的二值化閾值T(i,j)可以表示為:

(1)

將該像素點的灰度值f(i,j)和二值化閾值T(i,j)進行比較,從而對圖像進行二值化。比較的規則如下:

(2)

由于(2ω+1)×(2ω+1)的窗口并不能在M×N尺寸的圖像中移動,所以要對圖像進行填充。

1.2 文字信息區域的截取和修正

由于輸入圖片上的字體位置不固定、文字傾斜等情況,很難確保后續包含完整的文字信息,所以要對原圖上的文字信息進行精確截取和修正[10],確保待識別的文字信息區域含有較少的干擾信息和完整的文字信息。

對已處理后的二值化區域部分進行適當的調整,截取相對的文字信息區域。在獲得區域截圖之后,使用間隙法來確定截取的圖片是否包括完整的文字信息。間隙法的主要思想是用于檢查圖區的圖片是否存在兩條間隙,若不存在則根據對應的情況進行調整,直到截取成功位置,如果在最大循環次數結束后,依舊沒有檢測到兩條間隙,則返回錯誤代碼。

1.3 字符分割

字符分割是將二值化后的圖像分割成只包含單個字符的圖片,也是關鍵步驟。分割的效果如何對后續的文字識別結果有直接的影響,避免分割的字符出現重疊、分裂的情況,盡量取出完整清晰的文字。

基于投影的圖像分割算法[11-12]就是依據圖像在水平和垂直兩個方向的投影密度來確定行切分和字符切分。一般是先進行行切分,然后對每一文本行進行垂直投影進行字符切分。以行切分為例,首先判斷圖片是否存在傾斜,若存在則先進行傾斜校正(計算傾斜角度然后進行坐標變換),保證文本行都是水平以后,逐行掃描圖像,記錄每一行的前景像素點(即組成文字的像素點)個數,得到一個圖像像素在水平方向上的統計結果。

然后根據這個結果來決定每一個文本行的起始行和結束行,最一般的做法是閾值法,即設定一個閾值,根據每一行的前景像素個數決定該行是否屬于“文本行”的一部分。

(1)通過空白區域寬度判斷當前空白區域是字與字之間的空隙,還是同一個字內結構與結構之間的空隙。比如和前一個空白區域、后一個空白區域的寬度進行比較,或者與空白區域寬度的均值進行比較,一般來說,同一個字內部結構之間的空隙寬度是要比字與字之間的空隙小的。

(2)通過字的寬度/寬高比來判斷當前切割出來的“字”是一個完整的字還是一個完整的字的一部分。不同的字體,會有不同的字體寬高比,所以利用字寬是個更好的方法,原理與通過空白區域寬度進行判斷的方法類似。

基于區域的圖像分割算法可以確保字符重疊時能夠將包含多個字符的單個區域分割開來。以直接尋找區域為基礎的分割技術,基于區域提取方法有兩種基本形式:一種是區域生長,從單個像素出發,逐步合并以形成所需要的分割區域;另一種是從全局出發,逐步切割至所需的分割區域。

文中提出了一種垂直投影結合區域判定算法,算法步驟如下:

(1)使用基于投影的圖像算法統計各個位置上的投影點的個數;

(2)將字符大致分割,并計算分割位置的寬度眾數;

(3)設置圖像中字符的寬度為字符寬度的寬度眾數;

(4)比較寬度眾數和字符寬度,如果二者相差較小,就說明字符沒有重疊,可以直接返回,反之則認為字符重疊,需要進一步分割字符;

(5)計算寬度眾數和字符寬度的比值并向上取整數,尋找兩個字符中間領域最小的投影點位置作為重疊字符的分割位置進行分割。

2 字符識別

Tesseract是1985年Ray Smith在HP實驗室研發的一個OCR引擎[13],在1995年成為了最準確的三款OCR識別引擎之一。曾經在UNLV精確度測試中名列前茅。但1996年后基本停止了開發。2006年,Google邀請Smith加盟,重啟該項目。Tesseract目前支持Windows、Linux和Mac OS等平臺[14],在各個領域應用廣泛。

2.1 前期準備

配置所需測試環境組件如表1所示。

表1 設備環境

2.2 訓練流程

(1)將訓練數據打包成tif格式,如果有多個圖片可以用jTessBoxEditors合并成單個,圖片可以利用Windows自帶的畫圖工具另存為tif格式;

(2)將訓練數據生成box格式。生成box文件的語法格式如下:

Tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

(3)用jTessBoxEditor打開tif文件進行矯正錯誤并訓練,根據實際情況進行修正,可能會分頁需要逐頁調整;

(4)顯示分析修正的字,生成.tr文件。tr文件格式如下:

tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] nobatch box.train

(5)計算字符集,生成一個unicharset文件。unicharset文件格式如下:

unicharset_extractor [lang].[fontname].exp[num].box

(6)定義字體特征文件,新建一個文件font_properties;

(7)聚集字符特征;

(8)合并5個文件。

Tesseract中主要的數據結構如表2所示。

表2 Tesseract中的主要數據結構

Init接口函數對內部的變量進行初始化,patapath為字符庫的路徑,language使用默認的字庫,默認的英文字庫為“eng”,默認的中文字庫為“chi_sim”,在這里也可以添加自己訓練的字庫。

SetImage接口函數輸入待識別的圖片,以及寬度、高度、像素等信息,為Tesseract提供最后識別的圖片。

3 系統實現

MFC是微軟公司提供的一個C++類庫,用于在C++環境下編寫應用程序的框架和引擎。MFC是WinAPI與C++的結合[15]。API,即微軟提供的Windows下應用程序的編程語言接口,是一種軟件編程的規范,但不是一種程序開發語言本身,可以允許用戶使用各種各樣的第三方的編程語言對Windows下應用程序進行開發,使這些被開發出來的應用程序能在Windows下運行,比如VB、VC++、Java、Delhpi。編程語言函數本質上全部源于API,因此用它們開發出來的應用程序都能工作在Windows的消息機制和繪圖里,遵守Windows作為一個操作系統的內部實現,這其實也是一種必要。MFC不只是一個功能單純的界面開發系統,它提供的類絕大部分用來進行界面開發,關聯一個窗口的動作,但它提供的類中有好多類不與一個窗口關聯,即類的作用不是一個界面類,不實現對一個窗口對象的控制(如創建、銷毀),而是一些在Windows(用MFC編寫的程序絕大部分都在Windows中運行)中實現內部處理的類,如數據庫的管理類等[16-17]。

在MFC應用中常規的應用程序主要分為SDI(single document interface,單文檔界面)、MDI(multiple document interface,多文檔界面)、MTI(multiple top-level windows interface,多頂級窗口界面)和Dialog對話框程序幾類。

文中主要使用Dialog對話框程序來實現文字識別系統。對話框是圖形化用戶界面中一種組件,用于對用戶輸入、選擇的信息進行接收,用戶可對各種控件進行操作,也可向用戶顯示響應的操作。對話框中包括編輯框、文本框、列表框、組合框、單選按鈕和復選按鈕等多種控件,來實現用戶的需求,完成用戶指定的操作和響應。

對話框的組成:(1)對話框資源:在程序執行過程中,用戶可以動態地創建對話框資源,可以使用對話框資源對控件位置和類型、對話框位置和大小進行編輯來配置對話框界面。通過創建對話框資源來添加所需的各種控件,以設置控件的ID和內容;(2)對話框類:一般這個類由CDialog派生出,然而CDialog這個類又是由CWnd類派生。

CDialog成員變量如表3所示。

表3 CDialog成員變量

系統主要的控制按鈕及其說明如表4所示。

表4 控制按鈕與說明

系統實現代碼如下:

CString file;

m_path.GetWindowText(file);

char *path = T2A(file);

tesseract::TessBaseAPI *ap = new tesseract::TessBaseAPI();

string language="eng_my+chi_my";

if (ap->Init(NULL, language.c_str())) /

{

cerr<<"Could not initialize."<

exit(1);

}

Pix *pic = pixRead(path);

ap->SetImage(pic);

char *put = api->GetUTF8Text();

ifstream in("../Debug/tmp.txt",ios::binary);

while (getline(in, t)) {

r += UTF8ToGB(t.c_str()).c_str();

}

MessageBox(_T("識別成功"));

m_res = A2W(r.c_str());

UpdateData(false);

ap->End();

pixDestroy(&pic);

4 實驗結果

識別結果如圖1所示。

圖1 識別結果

5 結束語

文中介紹了OCR識別的過程和相應的模塊,主要從文字信息提取和字符識別兩大模塊進行研究。實現了容錯性強、易擴展等特點的文字識別系統。由于漢字字符集龐大導致漢字識別比英文字母的識別難度大,而傳統的基于字形結構的方法不能滿足當下實際的需求。文中主要結合了國內外關于文字識別領域的文獻,針對目前技術現狀的需求特點,基于Tesseract框架實現了一種文字識別系統。

由于該識別模型的識別率主要與訓練的數據量有關,中文字符集較多且字符的結構大致相識,系統依靠Tesseract引擎進行識別,實驗結果表明識別率并不高。目前文字信息提取的識別樣本有限,訓練集也遠遠不夠,所以在以后的處理中會逐步加入更多的數據集,以提高系統的識別率。

猜你喜歡
像素點字符對話框
基于局部相似性的特征匹配篩選算法
正則表達式快速入門
字符代表幾
圖片輕松變身ASCⅡ藝術畫
Bootlace Worms’Secret etc.
What Is Beauty?
一種X射線圖像白點噪聲去除算法
基于canvas的前端數據加密
圖像采集過程中基于膚色理論的采集框自動定位
淺談VB的通用對話框《CommonDialog》控件的使用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合