深圳技師學(xué)院 楊思怡 付相祥 吳曉華 夏 清
在高速信息化的時代,針對海量文檔數(shù)據(jù)處理效率低下的問題,提出了一種基于OCR技術(shù)的識別系統(tǒng),首先利用OpenCV對文檔數(shù)據(jù)進行預(yù)處理濾波,邊緣計算,灰度化等一系列預(yù)處理,然后使用Canny算子找到圖片邊緣信息后應(yīng)用一個透視的轉(zhuǎn)換去獲取一個文檔的自頂向下的正圖,最后完成了一個基于Tesseract-OCR的文檔掃描識別項目,該實驗表明此方法具有準(zhǔn)確的識別率,提供多種語言開發(fā)調(diào)用,以及具備高可用性;可以有效提升數(shù)據(jù)錄入的效率,大大減輕人工的消耗。
隨著信息技術(shù)的快速發(fā)展,數(shù)字化時代已然來臨。人們不再滿足傳統(tǒng)的紙質(zhì)辦公而是將需求投放在了電子文稿上,在現(xiàn)如今的商業(yè)事務(wù)中,資金的往來以及員工的報銷將會產(chǎn)生大量的紙質(zhì)票據(jù),而將紙質(zhì)的票據(jù)進行保存及錄入成為了一大難題。在傳統(tǒng)的票據(jù)錄入中往往需要耗費大量人工進行手動錄入,但其卻存在效率低下,差錯率高,成本昂貴等弊端。為了有效提高票據(jù)錄入的效率,本項目將提出Tesseract-OCR引擎所給出的一套自適應(yīng)識別方法。利用OpenCV函數(shù)庫對圖像進行濾波,灰度化,閾值化處理后得到二值圖像。再通過透視變換對圖像進行擺正,應(yīng)用一個透視的轉(zhuǎn)換去獲取一個票據(jù)的自頂而下的正圖,最后再通過OCR技術(shù)對票據(jù)進行識別。具體過程如圖1所示。
圖1 文檔掃描識別具體過程圖
OpenCV是一個跨平臺計算機視覺和機器學(xué)習(xí)的軟件庫,它可以運行在各大操作系統(tǒng)上,并且能提供多種語言的接口。例如Python語言就是其中之一,它的應(yīng)用領(lǐng)域非常的廣泛,比如物體識別、人機互動、圖像分割、等各種領(lǐng)域,因此被大量使用。
Tesseract的OCR引擎是由惠普實驗室于1985年到1955年進行研發(fā)的,自2006年開始谷歌改進了其算法,通過消除bug,優(yōu)化其相關(guān)工作。它可以獲取圖像并將它們轉(zhuǎn)譯成多種語言(包括中文)的文本,并支持用戶能不斷的訓(xùn)練字庫,使用圖像轉(zhuǎn)換文本的能力不斷增強。Tesseract在本項目中的作用是進行字符識別。
透視變換也可以稱作投影映射,它是將成像投影到另一個視頻里,它是二維(x, y)到三維(X, Y, Z),再到另一個二維(x', y' )空間的映射。校正對畸變圖像,它需要獲取圖像的一組4個點的坐標(biāo),和目標(biāo)圖像的一組4個點的坐標(biāo),再利用兩組坐標(biāo)點則可以計算出透視變換的變換矩陣,最后對原始圖像執(zhí)行變換矩陣,就可以實現(xiàn)圖像校正功能。
如圖2所示的公式可以看出變換之前的點是z值為1的點,它在三維平面上的值是x, y,1,在二維平面上的投影是x, y,通過矩陣變換成三維中的點X, Y, Z,再通過除以三維中Z軸的值,從而轉(zhuǎn)換為二維中的點x', y',代碼如下:
圖2 透視變換公式
OpenCV圖像處理模塊中常用的閾值化處理有三種:普通閾值化,自適應(yīng)閾值,和Otsu二值化。
光影環(huán)境對效果的影響非常大,當(dāng)同一幅圖像上的不同地方具有不同的亮度時,應(yīng)用局部閾值的處理方法會出現(xiàn)一塊黑,一塊白的情況,并且黑的區(qū)域下無法對特征進行提取。在這種情況下我們將采用自適應(yīng)閾值的處理方法,它是根據(jù)圖像上的每一個小區(qū)域計算與其對應(yīng)的閾值,所以在一幅圖像上不同的區(qū)域?qū)捎貌煌拈撝担瑯O大降低了陰影對于圖片本身的影響,從而我們在亮度不同的情況能獲取到更好的結(jié)果。
本項目將在OpenCV中運用thresh3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
函數(shù)進行自適應(yīng)閾值的處理。
獲取圖片的邊緣信息是圖像處理當(dāng)中的基本任務(wù)之一。主要應(yīng)用于一些數(shù)據(jù)信息的處理,從中提取想要的目標(biāo),剔除一些干擾及不相關(guān)的信息,通過精簡的數(shù)據(jù)去獲得更準(zhǔn)確的信息。Canny于1986年開發(fā)的一個多級邊緣檢測算法,被許多人們認(rèn)為時邊緣檢測的最優(yōu)算法,不容易受噪聲干擾是它的一大優(yōu)點,能夠真正的檢測到軟邊緣。
Canny邊緣檢測算法包含以下四個步驟。
濾波的主要作用是降噪,防止噪聲引起的錯誤檢測。將使用高斯濾波與圖像進行卷積,平滑圖像,減少邊緣檢測器上噪聲的影響。
圖像中的邊緣將指向各個方向,因此用Canny算法中的四個算子去檢測圖像中的水平,垂直,和對腳邊緣。它的集合包含的都是灰度值變化較大的像素點,白邊和黑邊的中間就是它的邊緣。檢測的算子將會返回Gx和Gy的一階導(dǎo)數(shù)值,這樣就可以知道像素點的G和theta。
非極大值抑制是一種邊緣稀疏的技術(shù),它的處理方法就是找到局部中的最大值像素點,再把非極大值所對應(yīng)的灰度值設(shè)為0再將非極大值點對應(yīng)的灰度值設(shè)置為0,就可以將非邊緣的點剔除掉一大部分。完成操作后將會得到一個二值圖像,結(jié)果會包含大量的噪聲和一些外界因素所造成的假邊緣。所以我們還要對圖像做進一步的處理。
對圖像處理之后,余下的像素將更準(zhǔn)確的表示出圖像中的實際邊緣,但還是會存在因為顏色及噪聲所引起變化的一些邊緣像素。雙閾值的處理方法是設(shè)置一個maxval,以及minval。例如一個像素點的位置的超過了它的高閾值,這個像素點就會保留為邊緣像素;但如果某一個像素點小于低閾值,這個像素點就會被排除;但如果某一個的像素點位置的幅度在兩個閾值的中,像素只連接到一個高于高閾值的像素時會被保留。
本文在python語言的基礎(chǔ)上對字符識別算法進行了初步的研究,在基于Tesseract-OCR開源引擎和OpenCV庫對文檔進行掃描與識別。但仍然存在很多不足的地方,還有待之后的進一步該進。
項目只能對在普通環(huán)境下的文檔進行掃描,對清晰的圖像進行識別且只能是英文字符,對其它語種的字符還有待考究。