十八、應用實例:圖片文字識別(Application Example: Photo OCR)
18.1 問題描述和流程圖
參考視頻: 18 - 1 - Problem Description and Pipeline (7 min).mkv
圖像文字識別應用所作的事是,從一張給定的圖片中識別文字。這比從一份掃描文檔中識別文字要複雜的多。
爲了完成這樣的工作,需要採取如下步驟:
1.文字偵測(Text detection)——將圖片上的文字與其他環境對象分離開來
2.字符切分(Character segmentation)——將文字分割成一個個單一的字符
3.字符分類(Character classification)——確定每一個字符是什麼 可以用任務流程圖來表達這個問題,每一項任務可以由一個單獨的小隊來負責解決。如果你有一個工程師的團隊 在完成同樣類似的任務, 那麼通常你可以讓 不同的人來完成 不同的模塊 ,所以我可以假設 文字檢測這個模塊 需要大概1到5個人 ,字符分割部分 需要另外1到5個人 ,字母識別部分 還需要另外1到5個人。
18.2 滑動窗口
參考視頻: 18 - 2 - Sliding Windows (15 min).mkv
滑動窗口是一項用來從圖像中抽取對象的技術。假使我們需要在一張圖片中識別行人,首先要做的是用許多固定尺寸的圖片來訓練一個能夠準確識別行人的模型。然後我們用之前訓練識別行人的模型時所採用的圖片尺寸在我們要進行行人識別的圖片上進行剪裁,然後將剪裁得到的切片交給模型,讓模型判斷是否爲行人,然後在圖片上滑動剪裁區域重新進行剪裁,將新剪裁的切片也交給模型進行判斷,如此循環直至將圖片全部檢測完。
一旦完成後,我們按比例放大剪裁的區域,再以新的尺寸對圖片進行剪裁,將新剪裁的切片按比例縮小至模型所採納的尺寸,交給模型進行判斷,如此循環。
滑動窗口技術也被用於文字識別,首先訓練模型能夠區分字符與非字符,然後,運用滑動窗口技術識別字符,一旦完成了字符的識別,我們將識別得出的區域進行一些擴展,然後將重疊的區域進行合併。接着我們以寬高比作爲過濾條件,過濾掉高度比寬度更大的區域(認爲單詞的長度通常比高度要大)。下圖中綠色的區域是經過這些步驟後被認爲是文字的區域,而紅色的區域是被忽略的。
以上便是文字偵測階段。 下一步是訓練一個模型來完成將文字分割成一個個字符的任務,需要的訓練集由單個字符的圖片和兩個相連字符之間的圖片來訓練模型。
模型訓練完後,我們仍然是使用滑動窗口技術來進行字符識別。
以上便是字符切分階段。 最後一個階段是字符分類階段,利用神經網絡、支持向量機或者邏輯迴歸算法訓練一個分類器即可。