韓琳
近年來隨著計算機技術的不斷發展,Optical Character Recognition(光學字符識別,簡稱“OCR”)應用的領域更加的廣泛,而圖片文字識別就是其中重要的一個。目前圖片文字識別的準確率并沒有達到100%,這也成為了圖片文字識別發展領域的一大瓶頸,因此要去探索一個好的圖片文字識別算法是非常有意義的。
圖片文字識別系統的基本流程為:獲得圖片、去噪處理、二值化處理、矯正圖片、行查找、文字定位、細化處理、文字特征掃描、查詢顯示文字。OpenCv提供了圖片處理的基本函數,例如數據矩陣的遍歷,圖片的存儲等,去噪處理中的平滑處理、二值化處理等。矯正圖片就是將圖片按照文字的行擺正,該步驟是比較的關鍵一步,后面的行定位等都是依賴于圖片矯正。文字的行定位和文字定位即確定文字的區域,方便文字特征掃描,細化處理是將文字細化為一個像素,而不破壞連通性。細化處理是方便特征掃描而做的處理使數據庫中存儲文字特征碼和UTF-8編碼對應起來。涉及到的相關技術主要如下。
1. OpenCv
OpenCv是一個基于BSD許可發行的可以跨平臺的計算機視覺庫。它可以運行在Windows和Linux等操作系統之上,它是由一系列的C函數和少許的C++類構成,同時還提供了Python、Matlab等語言的接口,實現了計算機視覺和圖像處理等方面的很多通用算法。
包含的五個基本模塊,功能非常的強大。可以在設計中使用的是圖形處理模塊,結構圖如下所示:
2. UTF-8編碼
UTF-8是一種針對Unicode的可變長度字符編碼,又稱萬國碼,由Ken Thompson于1992年創建。UTF-8用1到6個字節編碼Unicode字符。在計算機內存中,統一使用Unicode編碼,當我們用記事本編輯的時候,從文件中讀取的UTF-8字符被轉換為Unicode字符到內存里,編輯完成后,保存的時候再把Unicode轉換為UTF-8保存到文件。
3.Flask框架
在大多數的標準當中,Flask是一個小型的框架,小到可以稱之為“微框架”。 Flask有3個主要依賴,分別為調試和Web服務器網關接口以及路由。子系統是由Werkzeug提供,模板系統是由Jinja2提供,命令行集成是由Click提供。這些依賴全部都是由Flask的開發者Armin Ronacher開發的。
Flask 本身是并不支持數據庫的訪問、用戶身份驗證和 Web 表單驗證等高級功能的。這些功能以及大多數Web應用需要的核心服務都以擴展的形式實現,然后再與核心包集成。
4.圖像處理相關技術
4.1圖像的灰度處理
在我們的生活中常見的圖片大多數都是24位真彩色圖像。8位的灰度圖片就能夠包含其基本信息。所以,在處理圖片的過程中為了更快捷的對圖片信息進行相應的處理,首先需要對圖片進行灰度化處理操作,灰度圖像就包含了圖像處理中所需要的圖像形態特征。在24位的真彩色圖像中,每個像素都是要用3個字節來保存,它們分別用來描述R,G,B,三種不同的顏色分量。每一種顏色的分量范圍都是從0-255,顏色的分量值越大,其對應的顏色分量高度值就會越高,因引用255來表示最亮,用0來表示最暗。在將一個真正色彩像素點轉換為灰度圖時,其亮度值通常按常理取三個分量的平均值。
4.2圖像的二值化處理
在圖片中的每個像素點的灰度值低于某個闕值則把它置于0,高于某個闕值把它置于255,從而使整個圖片呈現出一種“非白即黑”的效果,這就是圖片的二值化處理。二值化后的圖片仍然能夠反映出整個圖片的局部特征。為了能夠得到便于處理的二值化圖片,采用區域的要求是連通且封閉的并且邊界不能夠重疊。灰度值等于或者是高于指定闕值的像素點為目標像素,其灰度值是255,其他的像素點就會被排除在物體的區域之外,其灰度值定為0。
對于不一樣的圖片效果,可以選擇使用不同的闕值選擇方法。在空間的角度來看,分為全局闕值法和局部闕值法。全局闕值法對于具有明顯雙峰直方圖的圖像有更為顯著的效果,但是,當圖片的光照不均勻的時候,效果就會不那么明顯。局部闕值法適用于圖片特征比較復雜的圖片,但是有一個缺陷是忽略了圖片的邊緣特征,因此會造成偽影的現象。
4.3圖像的剪裁處理
在一張含有文字信息的圖片中,非文字的部分往往占據了這張圖片的一定比例,如果不對這張圖片進行相應的剪裁處理,在圖片文字識別的過程中就會對這張照片的整個區域進行掃描識別,這往往會增加了項目的額外開銷,與此同時也大大降低了圖片文字識別的速率。為此,在為了提高圖片文字識別的速率,對圖 片文字進行光學字符識別之前往往是需要進行剪裁的,剪裁之后僅保留包涵文字信息的部份,將非文字的部份區域剪裁掉。在本次設計中,圖片文字剪裁是由用戶自己手動進行剪裁,具體過程是:由用戶自己選擇要進行識別的圖片,在圖片上就會出現一個小小的方塊,用戶自己可以根據需求隨意進行拖動剪裁,最終方塊內部留下來的部份就是要識別的內容,然后系統會對這一部份進行識別處理。
4.4文字的特征碼掃描
本文所研究的圖片文字識別是根據所有文字的幾何特征進行編碼,然后輸入一個能夠代表所識別文字的特征碼,文字的特征碼和文字的UTF-8編碼一起關聯存放到數據庫中。一個文字可以有很多個特征碼,然而它只能對應一個UTF-8編碼。這樣的設計是因為可以滿足不同的圖片文字特征。只有更一步的進入文字的點和筆畫的關系才能夠更加具體的編出具有唯一性的特征編碼,那么接下來的每一個步驟都將會向更可靠的圖片文字識別方法靠近。
5系統開發環境的搭建
主要涉及到PyCharm的安裝, Python的安裝,虛擬環境的搭建。搭建虛擬環境有兩個目的,一是為了真實環境不被破壞。二是為了開發時的版本號不沖突,在Python3中,虛擬環境由Python標準庫中的venv包原生支持。
綜上所述,本文獨立自主的去探索一種基于文字幾何特征去深入文字內部來獲取文字特征編碼。這樣的編碼的唯一性非常高。并且可重入性也非常高。雖然該方法復雜,但是卻類似人類來識別文字的過程。