之前沒有接觸過OCR文字識別,本文主要對使用深度學習算法完成文字識別的整體步驟進行一下梳理。
一般來說,OCR文字識別是檢測+識別,首先將可能在文字的區域檢測出來,然後在進行識別。本質是識別圖片中的文字,即在複雜的圖片背景下對所需目標文字進行識別提取。
1、文字識別基礎步驟
① detection:檢測存在文字的區域,得到proposal。
② recognation:識別proposal中的文字。
2、文字區域 detection
對文字存在區域的detection方法,與目標檢測領域的常用檢測方法相當,分爲one-stage和two-stage方法,(後續也可以考慮使用anchor free的方法對文字propsal進行檢測)。
(1) 在文字識別領域,常用的two-stage方法爲faster rcnn,one-stage方法主要有yolo系列方法。相比之下,前者的精度更好,後者速度更快。
(2)在文字識別領域,與傳統目標檢測的不同還在於文字的方向、扭曲程度等。
① 對於水平文字的檢測。水平文字文本框是規則的四邊形(四個自由度),類似於物體檢測。水平文字檢測效果較好的算法爲CPTN:Detecting Text in Natural Image with Connectionist Text Proposal Network, ECCV, 2016。
② 文本框是不規則的四邊形,擁有八個自由度,傾斜文字檢測較好的算法有cvpr2017提出的EAST和Seglink。一般的檢測套路爲:檢測文本框 --> 採用Radon Hough變換等方法進行文本矯正 --> 通過投影直方圖分割單行文本圖片 --> 對單行文本進行OCR。
3、文字recognation:classification model,可以對字符進行分割後單獨識別,也可以進行序列識別,容易想見的是,序列識別纔是真正有意義的。
(1)定長文字,各個字符之間看作是獨立的,需事先選定可預測的sequence的最大長度,比較適用於門牌檢測或車牌號碼檢測。典型算法In Goodfellow2013年提出的multi-digit number classification,[1312.6082] Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks。
(2)不定長文字,可以產生任意長度的文字
① CNN+RNN/LSTM/GRU+CTC,CRNN算法描述較清楚 鏈接 bgshih/crnn
CTC詳解: Framewise and CTC Training of Neural Networks for Handwriting Recognition
②引入注意力機制(CNN+RNN+Attention),其中attention可以分爲hard attention和soft attention。其中hard attention能夠直接給出hard location,通常是bounding box的位置 (https://arxiv.org/pdf/1412.7755.pdf), 想法直觀,缺點是不能直接暴力bp。soft attention通常是rnn/lstm/gru encoder-decoder model (https://arxiv.org/abs/1603.03101), 可以暴力bp。
這兩種模型均不需要對文字進行預先分割(end-to-end)。
以前的文字識別算法將檢測和識別分爲兩個階段來訓練,現在較火的方向是將文字檢測和識別放到一個網絡中進行聯合訓練joint train。ICCV2017文章Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks,在水平文字檢測中,將檢測和識別進行端到端訓練,這個方向會是未來一兩年的熱點。
4、 文字識別常用數據集:https://blog.csdn.net/u011489887/article/details/79804498
(1)、[英文] ICDAR 2017 Robust Reading Competiton,主頁有11年至今的所有競賽。
[非中文數據集] 參考:https://www.cnblogs.com/lillylin/p/6893500.html
(2)、[中文] CTW data(Chinese Text in the Wild),超大街景圖片中文文本數據集,包含 32,285 張圖像和 1,018,402 箇中文字符。
資源鏈接:https://ctwdataset.github.io/ 。在相關論文《Chinese Text in the Wild》中,清華大學的研究人員以該數據集爲基礎訓練了多種目前業內最先進的深度模型進行字符識別和字符檢測。這些模型將作爲基線算法爲人們提供測試標準。這些圖像源於騰訊街景,從中國的幾十個不同城市中捕捉得到,不帶任何特定目的的偏好。由於其多樣性和複雜性,使得該數據集的收集很困難。它包含了平面文本、凸出文本、城市街景文本、鄉鎮街景文本、弱照明條件下的文本、遠距離文本、部分顯示文本等。對於每張圖像,數據集中都標註了所有中文字符。對每個中文字符,數據集都標註了其真實字符、邊界框和 6 個屬性以指出其是否被遮擋、有複雜的背景、被扭曲、3D 凸出、藝術化,和手寫體等。
(3)、[中文] 華中科技大學中文數據集 http://www.icdar2017chinese.site:5080/dataset/
icdar2017比賽結果分析https://blog.csdn.net/rabbithui/article/details/79107208
(4)、[中文] ICPR WTMI2018中文數據集(天池比賽數據集)
https://tianchi.aliyun.com/competition/entrance/231685/information
(5)、[中文] ICDAR2019 數據集 http://rrc.cvc.uab.es/?ch=12
5、文字識別模型資源
https://github.com/bear63/sceneReco
Crnn中文end-to-end識別 : http://blog.csdn.net/u01329375
6、當前圖像文本檢測和識別領域研究熱點
白紙黑字的掃描文檔識別技術已經很成熟;
自然場景圖像文本識別效果不是很理想。傾斜字、藝術字、變形字、模糊字、形似字、殘缺字、光影遮蔽、多語言混合文本等應用落地面臨的技術難題還沒被徹底解決。
(本圖摘自新浪微博《光學字符識別技術:讓電腦像人一樣閱讀》)
7、OCR(Optical Charactor Recognition)文字識別和STR(Scene Text Rcognition)場景文字識別
當前較多的認爲OCR文字識別泛指所有的圖像文字檢測和識別技術,包括傳統的OCR文檔圖像分析和場景文字識別技術。場景文字識別技術可以看作傳統OCR技術的自然演進與升級換代。
傳統解決方案:分別訓練文字檢測和文本識別兩個模型,然後再服務實施階段將這兩個模型串聯到數據流水線中組成文字識別系統。
當前流行的技術解決方案:用一個多目標網絡訓練出一個端到端模型。
(1)訓練階段
模型輸入:訓練圖像、圖像中文本座標、文本內容;
模型優化目標:輸出端文本邊框座標預測誤差,文本內容預測誤差,二者加權和。
(2)服務實施階段(測試)
原始圖片流經訓練好的端到端模型,直接輸出預測文本信息。
總結:文本檢測和識別是CV和NLP兩個領域的交叉,即需要使用CV技術來提取圖像中文字區域的圖像特徵向量,也需要藉助NLP技術來解碼圖像特徵向量爲文字結果。
參考文章: