OCR在NLP場景中的應用 | 人人都是產品經理

在NLP的產品體系中,OCR是關於文檔、文件處理的基礎步驟,是無法迴避和繞開的。

關於OCR的基礎知識,也就成了NLP產品經理必不可少的知識儲備了——只有產品詳細地了解了關於OCR的處理原理和步驟,才能充分發揮現有技術的優勢,規避其弱點,創造出更大的價值。

什麼是OCR?

OCR (Optical Character Recognition,光學字元識別)是指電子設備(例如掃描儀或數碼相機)檢查紙上列印的字元,通過檢測暗、亮的模式確定其形狀,然後用字元識別方法將形狀翻譯成計算機文字的過程。

即,針對印刷體字元,採用光學的方式將紙質文檔中的文字轉換成為黑白點陣的圖像文件,並通過識別軟體將圖像中的文字轉換成文本格式,供文字處理軟體進一步編輯加工的技術。

那麼既然是通過掃描,或者攝像的方式獲取,就會遇到很多諸如背景複雜、解析度低等情況,在沒有針對OCR技術實質性的了解下,有的朋友都會認為OCR識別,是一件非常easy的事情,不值得進行討論。

事實上,自然環境下的OCR要面臨、要解決的問題還是相當多的,例如:

  • 背景複雜;
  • 存在如底紋、水印、底線、框線;
  • 加蓋印章干擾疊加 ;
  • 圖像對比度低;
  • 文字傾斜、模糊;
  • 污跡、磨損;
  • 防偽標識;
  • 字體種類繁多;
  • 字的筆畫深淺,印刷受墨多寡等等情況。

通常情況下,衡量一個OCR系統性能好壞的主要指標有:拒識率、誤識率、識別速度、用戶界面的友好性,產品的穩定性,易用性及可行性等。

傳統OCR的處理過程

下面,我們通過一張圖來簡要了解一下傳統OCR的處理過程:

圖像預處理

預處理一般包括諸如傾斜校正、灰度化、圖像降噪、二值化處理等等。

二值化:

二值化就是讓圖像的像素點矩陣中的每個像素點的灰度值為0(黑色)或者255(白色),也就是讓整個圖像呈現只有黑和白的效果。在灰度化的圖像中灰度值的範圍為0~255,在二值化后的圖像中的灰度值範圍是0或者255。

二值化的做法一般分為以下幾種:

  • 版面分析:是將掃描得到的圖像,將文本按照不同的屬性劃分出區域塊。對於各個不同的區域塊,如:橫排正文、豎排正文、表格、圖片等。
  • 字元切割:對圖像中的文本進行字元級的切割,需要注意的是字元粘連等問題。
  • 特徵提取:對字元圖像提取關鍵特徵並降維,用於後續的字元識別演算法。
  • 字元識別:依據特徵向量,基於模版匹配分類法或深度神經網路分類法,識別出字元。版面恢復:識別原文檔的排版,按照原排版的格式將識別結果輸出。
  • 后處理:引入一些糾錯機制或者語言模型,針對一些形近字進行修正。

當然,上述傳統的OCR識別方法已經有點兒過時了,現在更流行的做法是基於深度學習的端到端的文字識別,即我們不需要顯式加入文字切割這個環節,而是將文字識別轉化為序列學習問題。

雖然輸入的圖像尺度不同,文本長度不同,但是經過DCNN和RNN后,在輸出階段經過一定的翻譯后,就可以對整個文本圖像進行識別,也就是說,文字的切割也被融入到深度學習中去了。

OCR處理的技術框架

根據上面的技術框架圖,簡要介紹一下其中幾個關鍵步驟的模型:

第一,傾斜校正,採用深度學習模型AdvancedEast,進行像素級別的分割。

它是一種用於場景圖像文本檢測的演算法,主要基於EAST:一種高效且準確的場景文本檢測器,並且還提供了顯著的改進,這使得長文本預測更準確。它的網路結構圖如下:

第二,採用PixelLink識別文字條的位置。

該模型是浙大聯合阿里提出,其核心思想是基於圖像分割來實現場景文字檢測,比起之前的很多基於檢測的場景文字檢測模型來說在性能與準確率方面都有比較明顯的提升。PixelLink網路模型架構如下:

其中CNN部分採用了VGG16做為特徵提取網路,對輸出分為兩個部分:

  • 像素分割,判斷每個像素是否為text/non-text
  • 鏈接預測,對每個像素點八領域進行鏈接預測,如果是positive則合併為text像素,如果不是則放棄。

通過上述兩步之後得到疊加的TEXT圖像mask,對mask圖像進行連通組件發現即可得到最終檢測框輸出。

第三,採用CRNN模型進行文字識別,它的網路結構是這樣的:

網路結構包含三部分,從下到上依次為:

  • 卷積層,使用CNN,作用是從輸入圖像中提取特徵序列;
  • 循環層,使用RNN,作用是預測從卷積層獲取的特徵序列的標籤(真實值)分佈;
  • 轉錄層,使用CTC,作用是把從循環層獲取的標籤分佈通過去重整合等操作轉換成最終的識別結果;

CRNN借鑒了語音識別中的LSTM+CTC的建模方法,不同點是輸入進LSTM的特徵,從語音領域的聲學特徵(MFCC等),替換為CNN網路提取的圖像特徵向量。

CRNN演算法最大的貢獻,是把CNN做圖像特徵工程的潛力與LSTM做序列化識別的潛力,進行結合。它既提取了魯棒特徵,又通過序列識別避免了傳統演算法中難度極高的單字元切分與單字元識別,同時序列化識別也嵌入時序依賴。

目前市面上都能提供哪些類型的文本識別呢?

通用文字識別

一般是指不規則文檔類的識別,例如PDF之類的。

卡證識別

身份證、銀行卡、營業執照、名片、護照、港澳通行證、戶口本、駕駛證、行駛證等等

票據識別

增值稅發票、定額發票、火車票、計程車票、行程單、保單、銀行單據等等。

其他

車牌、車輛合格證、印章檢測等等。

應用場景

最後我們來聊一下關於OCR的應用場景,在開頭的時候,我們提到,在NLP的相關產品中,OCR扮演著不可或缺的角色,主要是在關於文檔處理的一些場景中,例如,pdf等格式的文檔抽取、文檔審核、文檔比對等等。

遠程身份認證

結合OCR和人臉識別技術,實現用戶證件信息的自動錄入,並完成用戶身份驗證。應用於金融保險、社保、O2O等行業,有效控制業務風險。

內容審核與監管

自動識別圖片、視頻中的文字內容,及時發現涉黃、涉暴、政治敏感、惡意廣告等不合規內容,規避業務風險,大幅節約人工審核成本。

紙質文檔票據電子化

通過OCR實現紙質文檔資料、票據、表格的自動識別和錄入,減少人工錄入成本,提高輸入效率。