圖像文本識別

前言

  • 我在過去的兩三個月實現了護照的圖像文字識別,回顧起來,網上雖有一部分身份證識別、銀行卡識別的例子,但實際做起來,會有很多問題。踩了一些坑,花點時間總結一下。

方案

  • 當前OCR(Optical Character Recognition)有兩種模式,一種是傳統的模式識別,另外一種機器學習的神經網絡??梢宰约貉邪l,也可以使用開源引擎。
  • 這里介紹谷歌的tesseract-ocr引擎,目前(2017年5月),最新版為4.0,還處于alpha版本,使用的是神經網絡,還有3.0x,使用的是傳統的模式識別,識別正確率上4.0的要高一些,但3.0x的可能會快一些,目前大部分用的還是3.0x。國內一些專業做圖像識別的公司用的是自己研發的引擎。
    不管用哪種,都可以。

預備知識

OpenCV:需要用到一些圖像處理算法,可以買一本相關入門書籍看一看,大部分算法都會用上,需要了解各種算法的大致遠離。
機器學習:非必要項,但是如果了解機器學習的訓練過程,也能用到這邊的開發中,比如對樣本做各種處理,來增加測試用例。

流程

  1. 獲取圖像
  2. 圖像預處理
  3. 引擎識別
  4. 用先驗知識校正

獲取圖像

  • 拍照方式

單次拍照:好處是對用戶操作要求低,速度快,沒有任何校驗,按下快門即可,缺點是對圖片質量沒有校驗,質量不達標,得返回重新拍攝。這種方式也可以簡單校驗。
實時視頻流:實時識別視頻流,待對識別結果有一定把握時人工確認或自動確認,好處是不做無用功,可以實時查看識別效果,滿意后確認。缺點是用時較長,但這個時間實際包含了識別結果校驗的時間。

  • 裁剪方式

設定目標區域人工對準裁剪:大部分實現采用這種方式,但是如果是選中一張圖像進行識別時,就沒有這一步了。
全自動識別目標區域并裁剪:這種方式是操作簡單,使目標出現在取景框中,保持較大比例即可。缺點是對拍攝環境要求比較高,需要保持背景和前景分明。

圖像預處理

  • 證件類型分類

通過識別不同證件的特征來區分。這里就要說一說定位,定位是通過矩形實現的,圖像經過處理之后,得到黑色像素的外接矩形,然后根據矩形在全局的相對位置和本身的寬度高度來判斷是什么內容。

  • 興趣區域定位

  • 灰度化、二值化、腐蝕、計算矩形區域,這是標準步驟,經過嘗試,這樣的效果并不好,用戶拍照環境千差萬別,亮度不均等,導致最后二值化出來的圖形不完整:

  • 先通過三次不同閥值,且針對不同種類的護照設置不同的閥值,結果在訓練樣本測試集上效果還行,但到實際環境中效果太差,很難定位;
    
  • 通過自適應閥值,這樣只需一次,但是得到的二值化圖像有噪點,通過膨脹消除噪點,然后再次腐蝕,取得比較好的效果;
    
  • 再通過指定大致的興趣區域,避免無意義的圖像處理,提高效率;
    
  • 經過上面處理得到的圖像因為拍攝的原因,有一定的傾斜角度,經過算法(霍夫變換)計算角度,再旋轉,得到水平的圖像;
    
  • 對水平的圖像再度優化處理,去掉上下左右的白色像素區域,得到最優圖像位置;
    
  • 中文

中文需要拆成單個字放入引擎,這樣識別效果比較好,避免單個漢字被識別成多個,例如“明月”,會被識別為“日月月”,單個漢字的的圖像就能強制標注為單字,就不會被拆分。

  • 英文

英文最好使用整行輸入識別,拆成單個字符反而識別率會下降。

  • 其它

在圖像預處理過程,唯一的目標就是要得到清晰的黑白文字圖像,不要多余的空白像素,也不要缺失像素,不要傾斜,不要顏色太深,也不要太淡。處理出來的質量越高,識別準確率越高。

引擎識別

  • 因為引擎是第三方的,能做的工作不多,但做了,對識別率的提升也很有幫助。為提高識別率,對不同的內容設定不同的白名單黑名單,設定不同的識別模式。
  • 圍繞黑名單、白名單、語言模式可以做文章。例如使用簡體中文引擎也能識別英文和數字,但識別率是不如英文引擎的。

先驗知識校正

這一步其實很重要,前面都是硬碰硬,識別出什么就是什么,在最后輸出之前,其實還可以大幅提高準確率。

  • 校驗碼 很多證件都有校驗碼設計,針對一些容易出錯的,如MHW這三個字母就容易出錯,有了校驗碼就能糾錯。
  • 冗余信息 很多證件都有冗余信息,可以對照互相糾錯
  • 可枚舉數據 有些數據項可能性是有限的,比如省份,可以在識別時設置白名單,然后將結果與枚舉值比較,最接近的一般就是正確結果。

經過這些工作,識別率比直接識別會有很大提高,接近實用水準。具體在開發過程中還有很多小算法,目的都是提高圖像質量,提取冗余信息。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,791評論 6 545
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,795評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,943評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,057評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,773評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,106評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,082評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,282評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,793評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,507評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,741評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,220評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,929評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,325評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,661評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,482評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,702評論 2 380

推薦閱讀更多精彩內容

  • 不同圖像灰度不同,邊界處一般會有明顯的邊緣,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同,邊緣...
    大川無敵閱讀 13,923評論 0 29
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,806評論 25 708
  • 圖像識別意義: 圖像是指物體的描述信息,數字圖像是一個物體的數字表示。視覺是人類感知外部世界的最重要手段,據統計,...
    木木口丁閱讀 8,468評論 1 21
  • 【作者】唐美玲 【導師】王玉印 【分舵】縱橫思海 【舵主】羅汝錫 【導圖解說】 對于思維導圖,感覺自己就像一只剛破...
    唐美玲DAD閱讀 249評論 7 2
  • 還是喜歡易拉罐, 輕輕一拉, 九月的秋意就迸了出來, 沒有夏日那么火熱, 怎么說呢, 是一種泛著寒意的清涼, 就像...
    楚地小生閱讀 154評論 0 2