深度學習:識別圖片中的電話號碼(1)

總結下最近作的一個項目,只提供一些技術方案,不涉及具體業務和具體實現。網絡

背景

自動識別圖片中電話號碼,也能夠推廣到識別字符串,英文等。性能

1

---識別--->學習

「18811610168」字體

固然,背景會有干擾(天然環境),字體也更多變。spa

要求:全對識別,人工修正的成本太高,若是有一位識別錯誤,人工修正還不如從新輸入方便(人工輸入能夠支持語音識別的)。保證85%以上的數據是能夠全對識別的,最好返回全對識別的機率。固然對於電話號碼業務,根據識別的文本結果再加上電話的一些規則,後判斷程序也能夠有效地判斷哪些是高几率識別錯誤的。設計

方案

目標檢測、ocr識別已是被學術界玩透的技術了。神經網路是目前的大熱,並且效果極佳。識別方案有如下三種:3d

方案一:做爲傳統ocr來解

檢測圖片中的數字位置,而後對數字region過度類器識別。傳統方法:Sliding Windows、Selective Search等尋找候選區域;Boosting分類器、SVM等均可以用於識別。深度學習的方案效果更好,好比:Faster RCNN、YOLO等。blog

它們的實質都是:檢測字符的位置,識別字符的類別(內容)。圖片

檢測:2ip

識別:3 --->數字「1」  4----->數字「8」 … …

識別結果主要受檢測準確度和識別精度的影響。在檢測徹底正確的狀況下,自左向右識別各個字符,而後串聯識別結果。若是檢測徹底正確,識別分類器的loss=0.01,每一個字符的正確識別的機率p=0.99。11位電話全對的機率約爲0.895,loss值=-ln(0.895)=0.111。

可是,檢測可能出錯。另外,圖片中的電話多是傾斜的,後期串聯結果也會比較繁瑣,好比。

方案二:循環神經網絡RNN

方案一沒有考慮電話號碼的序列特性,若是將圖片分割爲時序信號,送入RNN/LSTM/BLSTM等網絡,識別性能會大幅提高。

5

問題是圖片的分割不許確怎麼辦?其實這裏的分割並非嚴格的,解決方案是,將圖片按行分割成n個,好比電話號碼分割成21個小圖片,而後20個圖片送入RNN網絡獲得20個序列化的輸出。因爲一個字符可能在相鄰兩個小圖上出現(各一半),最終的識別結果極可能是「1_88_8_1_1_66_10_16_8」。最後再通過一個CTC網絡融合獲得「18811610168」。

方案三:循環卷積網路RCN

方案二是把圖片原圖分割後送入RNN網絡,RNN作特徵提取和分類識別。級聯RNN的訓練是不容易收斂的,並且特徵的提取工做是CNN的強項。從新設計網絡,可使用cnn提取圖片的特徵,而後將feature Map分割成n個,送入RNN作識別,最終經過CTC獲得識別結果。

6

這樣的好處是,輸入數據不用作預處理,切割能夠經過網絡中矩陣的轉置實現;網絡實現了End-to-End;輸出是完整字符串,識別準確率高,loss值約爲0.02,全對正確率約爲0.98。

參考:

1. Long-term Recurrent Convolutional Networks for Visual Recognition and Description 2.Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

相關文章
相關標籤/搜索