OCR在NLP場景中的應(yīng)用
在NLP的產(chǎn)品體系中,OCR是關(guān)于文檔、文件處理的基礎(chǔ)步驟,是無法回避和繞開的。
關(guān)于OCR的基礎(chǔ)知識,也就成了NLP產(chǎn)品經(jīng)理必不可少的知識儲備了——只有產(chǎn)品詳細(xì)地了解了關(guān)于OCR的處理原理和步驟,才能充分發(fā)揮現(xiàn)有技術(shù)的優(yōu)勢,規(guī)避其弱點(diǎn),創(chuàng)造出更大的價值。
什么是OCR?
OCR (Optical Character Recognition,光學(xué)字符識別)是指電子設(shè)備(例如掃描儀或數(shù)碼相機(jī))檢查紙上打印的字符,通過檢測暗、亮的模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機(jī)文字的過程。
即,針對印刷體字符,采用光學(xué)的方式將紙質(zhì)文檔中的文字轉(zhuǎn)換成為黑白點(diǎn)陣的圖像文件,并通過識別軟件將圖像中的文字轉(zhuǎn)換成文本格式,供文字處理軟件進(jìn)一步編輯加工的技術(shù)。
那么既然是通過掃描,或者攝像的方式獲取,就會遇到很多諸如背景復(fù)雜、分辨率低等情況,在沒有針對OCR技術(shù)實質(zhì)性的了解下,有的朋友都會認(rèn)為OCR識別,是一件非常easy的事情,不值得進(jìn)行討論。
事實上,自然環(huán)境下的OCR要面臨、要解決的問題還是相當(dāng)多的,例如:
- 背景復(fù)雜;
- 存在如底紋、水印、底線、框線;
- 加蓋印章干擾疊加 ;
- 圖像對比度低;
- 文字傾斜、模糊;
- 污跡、磨損;
- 防偽標(biāo)識;
- 字體種類繁多;
- 字的筆畫深淺,印刷受墨多寡等等情況。
通常情況下,衡量一個OCR系統(tǒng)性能好壞的主要指標(biāo)有:拒識率、誤識率、識別速度、用戶界面的友好性,產(chǎn)品的穩(wěn)定性,易用性及可行性等。
傳統(tǒng)OCR的處理過程
下面,我們通過一張圖來簡要了解一下傳統(tǒng)OCR的處理過程:
圖像預(yù)處理
預(yù)處理一般包括諸如傾斜校正、灰度化、圖像降噪、二值化處理等等。
二值化:
二值化就是讓圖像的像素點(diǎn)矩陣中的每個像素點(diǎn)的灰度值為0(黑色)或者255(白色),也就是讓整個圖像呈現(xiàn)只有黑和白的效果。在灰度化的圖像中灰度值的范圍為0~255,在二值化后的圖像中的灰度值范圍是0或者255。
二值化的做法一般分為以下幾種:
- 版面分析:是將掃描得到的圖像,將文本按照不同的屬性劃分出區(qū)域塊。對于各個不同的區(qū)域塊,如:橫排正文、豎排正文、表格、圖片等。
- 字符切割:對圖像中的文本進(jìn)行字符級的切割,需要注意的是字符粘連等問題。
- 特征提?。簩ψ址麍D像提取關(guān)鍵特征并降維,用于后續(xù)的字符識別算法。
- 字符識別:依據(jù)特征向量,基于模版匹配分類法或深度神經(jīng)網(wǎng)絡(luò)分類法,識別出字符。版面恢復(fù):識別原文檔的排版,按照原排版的格式將識別結(jié)果輸出。
- 后處理:引入一些糾錯機(jī)制或者語言模型,針對一些形近字進(jìn)行修正。
當(dāng)然,上述傳統(tǒng)的OCR識別方法已經(jīng)有點(diǎn)兒過時了,現(xiàn)在更流行的做法是基于深度學(xué)習(xí)的端到端的文字識別,即我們不需要顯式加入文字切割這個環(huán)節(jié),而是將文字識別轉(zhuǎn)化為序列學(xué)習(xí)問題。
雖然輸入的圖像尺度不同,文本長度不同,但是經(jīng)過DCNN和RNN后,在輸出階段經(jīng)過一定的翻譯后,就可以對整個文本圖像進(jìn)行識別,也就是說,文字的切割也被融入到深度學(xué)習(xí)中去了。
OCR處理的技術(shù)框架
根據(jù)上面的技術(shù)框架圖,簡要介紹一下其中幾個關(guān)鍵步驟的模型:
第一,傾斜校正,采用深度學(xué)習(xí)模型AdvancedEast,進(jìn)行像素級別的分割。
它是一種用于場景圖像文本檢測的算法,主要基于EAST:一種高效且準(zhǔn)確的場景文本檢測器,并且還提供了顯著的改進(jìn),這使得長文本預(yù)測更準(zhǔn)確。它的網(wǎng)絡(luò)結(jié)構(gòu)圖如下:
第二,采用PixelLink識別文字條的位置。
該模型是浙大聯(lián)合阿里提出,其核心思想是基于圖像分割來實現(xiàn)場景文字檢測,比起之前的很多基于檢測的場景文字檢測模型來說在性能與準(zhǔn)確率方面都有比較明顯的提升。PixelLink網(wǎng)絡(luò)模型架構(gòu)如下:
其中CNN部分采用了VGG16做為特征提取網(wǎng)絡(luò),對輸出分為兩個部分:
- 像素分割,判斷每個像素是否為text/non-text
- 鏈接預(yù)測,對每個像素點(diǎn)八領(lǐng)域進(jìn)行鏈接預(yù)測,如果是positive則合并為text像素,如果不是則放棄。
通過上述兩步之后得到疊加的TEXT圖像mask,對mask圖像進(jìn)行連通組件發(fā)現(xiàn)即可得到最終檢測框輸出。
第三,采用CRNN模型進(jìn)行文字識別,它的網(wǎng)絡(luò)結(jié)構(gòu)是這樣的:
網(wǎng)絡(luò)結(jié)構(gòu)包含三部分,從下到上依次為:
- 卷積層,使用CNN,作用是從輸入圖像中提取特征序列;
- 循環(huán)層,使用RNN,作用是預(yù)測從卷積層獲取的特征序列的標(biāo)簽(真實值)分布;
- 轉(zhuǎn)錄層,使用CTC,作用是把從循環(huán)層獲取的標(biāo)簽分布通過去重整合等操作轉(zhuǎn)換成最終的識別結(jié)果;
CRNN借鑒了語音識別中的LSTM+CTC的建模方法,不同點(diǎn)是輸入進(jìn)LSTM的特征,從語音領(lǐng)域的聲學(xué)特征(MFCC等),替換為CNN網(wǎng)絡(luò)提取的圖像特征向量。
CRNN算法最大的貢獻(xiàn),是把CNN做圖像特征工程的潛力與LSTM做序列化識別的潛力,進(jìn)行結(jié)合。它既提取了魯棒特征,又通過序列識別避免了傳統(tǒng)算法中難度極高的單字符切分與單字符識別,同時序列化識別也嵌入時序依賴。
目前市面上都能提供哪些類型的文本識別呢?
通用文字識別
一般是指不規(guī)則文檔類的識別,例如PDF之類的。
卡證識別
身份證、銀行卡、營業(yè)執(zhí)照、名片、護(hù)照、港澳通行證、戶口本、駕駛證、行駛證等等
票據(jù)識別
增值稅發(fā)票、定額發(fā)票、火車票、出租車票、行程單、保單、銀行單據(jù)等等。
其他
車牌、車輛合格證、印章檢測等等。
應(yīng)用場景
最后我們來聊一下關(guān)于OCR的應(yīng)用場景,在開頭的時候,我們提到,在NLP的相關(guān)產(chǎn)品中,OCR扮演著不可或缺的角色,主要是在關(guān)于文檔處理的一些場景中,例如,pdf等格式的文檔抽取、文檔審核、文檔比對等等。
遠(yuǎn)程身份認(rèn)證
結(jié)合OCR和人臉識別技術(shù),實現(xiàn)用戶證件信息的自動錄入,并完成用戶身份驗證。應(yīng)用于金融保險、社保、O2O等行業(yè),有效控制業(yè)務(wù)風(fēng)險。
內(nèi)容審核與監(jiān)管
自動識別圖片、視頻中的文字內(nèi)容,及時發(fā)現(xiàn)涉黃、涉暴、政治敏感、惡意廣告等不合規(guī)內(nèi)容,規(guī)避業(yè)務(wù)風(fēng)險,大幅節(jié)約人工審核成本。
紙質(zhì)文檔票據(jù)電子化
通過OCR實現(xiàn)紙質(zhì)文檔資料、票據(jù)、表格的自動識別和錄入,減少人工錄入成本,提高輸入效率。
本文由 @燕然未勒 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash ,基于 CC0 協(xié)議。
默默的問一下,你這里的NLP指的是啥?
自然語言處理