如何利用深度學(xué)習(xí)識別圖片中的電話號碼?
總結(jié)下最近做的一個項目,只提供一些技術(shù)方案,不涉及具體業(yè)務(wù)和具體實現(xiàn)。
背景
自動識別圖片中電話號碼,也可以推廣到識別字符串,英文等。
---識別--->
“18811610168”
當(dāng)然,背景會有干擾(自然環(huán)境),字體也更多變。
要求:全對識別,人工修正的成本過高,如果有一位識別錯誤,人工修正還不如重新輸入方便(人工輸入可以支持語音識別的)。
保證85%以上的數(shù)據(jù)是可以全對識別的,***返回全對識別的概率。當(dāng)然對于電話號碼業(yè)務(wù),根據(jù)識別的文本結(jié)果再加上電話的一些規(guī)則,后判斷程序也可以有效地判斷哪些是高概率識別錯誤的。
方案
目標(biāo)檢測、ocr識別已經(jīng)是被學(xué)術(shù)界玩透的技術(shù)了。神經(jīng)網(wǎng)路是目前的大熱,而且效果***。識別方案有以下三種:
方案一:作為傳統(tǒng)ocr來解
檢測圖片中的數(shù)字位置,然后對數(shù)字region過分類器識別。傳統(tǒng)方法:Sliding Windows、Selective Search等尋找候選區(qū)域;Boosting分類器、SVM等都可以用于識別。深度學(xué)習(xí)的方案效果更好,比如:Faster RCNN、YOLO等。
它們的實質(zhì)都是:檢測字符的位置,識別字符的類別(內(nèi)容)。
檢測:
識別:
--->數(shù)字“1”
----->數(shù)字“8” … …
識別結(jié)果主要受檢測準(zhǔn)確度和識別精度的影響。在檢測完全正確的情況下,自左向右識別各個字符,然后串聯(lián)識別結(jié)果。
如果檢測完全正確,識別分類器的loss=0.01,每個字符的正確識別的概率p=0.99。11位電話全對的概率約為0.895,loss值=-ln(0.895)=0.111。
但是,檢測可能出錯。另外,圖片中的電話可能是傾斜的,后期串聯(lián)結(jié)果也會比較繁瑣,比如。
方案二:循環(huán)神經(jīng)網(wǎng)絡(luò)RNN
方案一沒有考慮電話號碼的序列特性,如果將圖片分割為時序信號,送入RNN/LSTM/BLSTM等網(wǎng)絡(luò),識別性能會大幅提升。

問題是圖片的分割不準(zhǔn)確怎么辦?
其實這里的分割并不是嚴(yán)格的,解決方案是,將圖片按行分割成n個,比如電話號碼分割成21個小圖片,然后20個圖片送入RNN網(wǎng)絡(luò)得到20個序列化的輸出。
由于一個字符可能在相鄰兩個小圖上出現(xiàn)(各一半),最終的識別結(jié)果很可能是“1_88_8_1_1_66_10_16_8”。***再經(jīng)過一個CTC網(wǎng)絡(luò)融合得到“18811610168”。
方案三:循環(huán)卷積網(wǎng)路RCN
方案二是把圖片原圖分割后送入RNN網(wǎng)絡(luò),RNN做特征提取和分類識別。級聯(lián)RNN的訓(xùn)練是不容易收斂的,而且特征的提取工作是CNN的強項。
重新設(shè)計網(wǎng)絡(luò),可以使用cnn提取圖片的特征,然后將feature Map分割成n個,送入RNN做識別,最終通過CTC得到識別結(jié)果。

這樣的好處是,輸入數(shù)據(jù)不用做預(yù)處理,切割可以通過網(wǎng)絡(luò)中矩陣的轉(zhuǎn)置實現(xiàn);網(wǎng)絡(luò)實現(xiàn)了End-to-End;輸出是完整字符串,識別準(zhǔn)確率高,loss值約為0.02,全對正確率約為0.98。