一般OCR套路是這樣的
1.先檢測和提取Text region.
2.接著利用radon hough變換 等方法 進行文字校正。
3.透過投影直方圖分割出單行的文字的圖片。
最後是對單行的OCR
對單行的OCR主要由兩種思想
第一種是需要分割字元(segmentation based method)的。
分割字元的方法也比較多,用的最多的是基於投影直方圖極值點作為候選分割點並使用分類器+beam search 搜尋最佳分割點。具體可以參考tesseract 的 presentation.
搜尋到分割點之後對於單個字元,傳統的就是特徵工程+分類器。一般流程是 灰度 -> 二值化->矯正影象 -> 提取特徵(方法多種多樣例如pca lbp 等等) ->分類器(分類器大致有SVM ANN KNN等等 )。
現在的 CNN(卷積神經網路)可以很大程度上免去特徵工程。
第二種是無需分割字元(segmentation free method)的
對於短長度的可以使用mutli-label classification 。比如像車牌,驗證碼,不過提前需要預測長度。車牌識別中的不分割字元的端到端(End-to-End)識別
google做街景門牌號識別就是用的這種方法。
要是長度很長的話呢,就得用CTC模型了. ctc loss 能自動對其標籤而不需要標註資訊。
另外主要注意的一點是CTC不一定要配合RNN才能work.純CNN也能做時序任務,只是時序依賴沒有RNN強而已。
一般OCR套路是這樣的
1.先檢測和提取Text region.
2.接著利用radon hough變換 等方法 進行文字校正。
3.透過投影直方圖分割出單行的文字的圖片。
最後是對單行的OCR
對單行的OCR主要由兩種思想
第一種是需要分割字元(segmentation based method)的。
分割字元的方法也比較多,用的最多的是基於投影直方圖極值點作為候選分割點並使用分類器+beam search 搜尋最佳分割點。具體可以參考tesseract 的 presentation.
搜尋到分割點之後對於單個字元,傳統的就是特徵工程+分類器。一般流程是 灰度 -> 二值化->矯正影象 -> 提取特徵(方法多種多樣例如pca lbp 等等) ->分類器(分類器大致有SVM ANN KNN等等 )。
現在的 CNN(卷積神經網路)可以很大程度上免去特徵工程。
第二種是無需分割字元(segmentation free method)的
對於短長度的可以使用mutli-label classification 。比如像車牌,驗證碼,不過提前需要預測長度。車牌識別中的不分割字元的端到端(End-to-End)識別
google做街景門牌號識別就是用的這種方法。
要是長度很長的話呢,就得用CTC模型了. ctc loss 能自動對其標籤而不需要標註資訊。
另外主要注意的一點是CTC不一定要配合RNN才能work.純CNN也能做時序任務,只是時序依賴沒有RNN強而已。