「MindSpore:跟著小Mi一起機器學習吧」圖片文字識別

fans news 發佈 2022-01-29T06:29:25+00:00

隨著智慧型手機拍照功能的成熟,OCR技術注重的是如何讓計算機讀取圖片中的文字信息,從而方便以後的自動查找,而不是從成千上萬的照片中用滑鼠一張張照片點開查詢,再逐個關閉。

時間可過得真快,本周小Mi的更新便是我們機器學習系列的最後一期啦!說了那麼多理論,總該來點案例對不對!廢話不多說,讓我們開始吧~

定義

那麼什麼是圖片文字識別呢?其實對應的英文全稱為Photo Optical Character Recognition,也可以翻譯為圖片光學字符識別。

隨著智慧型手機拍照功能的成熟,OCR技術注重的是如何讓計算機讀取圖片中的文字信息,從而方便以後的自動查找,而不是從成千上萬的照片中用滑鼠一張張照片點開查詢,再逐個關閉(是不是想想都頭大呢)。當然啦,從一張給定的圖片中識別文字肯定比從一份掃描文檔中識別文字要複雜的多。

操作流程

按照我們正常的理解,圖片文字識別的話通常會先將圖像掃描一遍,然後找出圖片中的文字信息,並重點關注這些文字區域,同時對區域中的文字進行識別,當正確讀出這些文字以後,將這些文字內容顯示並記錄下來。聽起來好像很簡單,畢竟光學文字識別對於掃描文檔來說,已經是一個比較簡單的問題了,但是對於常用的圖片、照片來說,還算是一個較難的機器學習問題。

因此,實現圖片OCR技術需要採取如下步驟:

1.文字探測(Text detection)——掃描圖像並找出有文字的圖像區域,將圖片上的文字與其他環境對象分離開來;

2.字符切分(Character segmentation)——進行文字分離,將文字分割成一個個單一的字符;

3.字符分類(Character classification)——確定每一個字符是什麼。

流程圖也能夠非常直觀地表達這個學習問題,每一項任務都可以單獨拆解開來進行處理:

如果成功解決了這樣的問題,不僅可以幫助計算機更好地理解圖像中的內容,還可以做一些更有意義的事情,比如可以為盲人提供一種相機,該相機可以識別出盲人前面的各種潛在危險路障。

滑動窗口

滑動窗口是一項用來從圖像中抽取對象的技術。假使我們需要在一張圖片中識別行人,首先要做的是用許多固定尺寸的圖片來訓練一個能夠準確識別行人的模型。然後用之前訓練識別行人的模型時所採用的圖片尺寸在我們要進行行人識別的圖片上進行剪裁,將剪裁得到的部分交給模型,讓模型判斷是否為行人,繼而不斷地在圖片上滑動剪裁區域重新進行剪裁,同樣將新剪裁的部分交給模型進行判斷,如此循環直至將圖片全部檢測完。

一旦完成後,按比例放大剪裁的區域,再以新的尺寸對圖片進行剪裁,將新剪裁的部分按比例縮小至模型所採納的尺寸,交給模型進行判斷,如此循環。

滑動窗口技術也被用於文字識別,首先訓練模型能夠區分字符與非字符,然後運用滑動窗口技術識別字符,一旦完成了字符的識別,我們將識別得出的區域進行一些擴展,然後將重疊的區域進行合併。接著便可以以寬高比作為過濾條件,過濾掉高度比寬度更大的區域(默認單詞的長度通常比高度要大)。下圖中綠色的區域是經過這些步驟後被認為是文字的區域,而紅色的區域是被忽略的。

下一步是訓練一個模型來完成將文字分割成一個個字符的任務,需要的訓練集由單個字符的圖片和兩個相連字符之間的圖片來訓練模型。

模型訓練完後,我們仍然是使用滑動窗口技術來進行字符識別。

最後一個階段是字符分類階段,利用神經網絡、支持向量機或者邏輯回歸算法訓練一個分類器即可。

數據獲取

如果我們的模型是低方差的,那麼獲得更多的數據用於訓練模型是能夠有更好的效果的。問題在於,怎樣獲得更多的數據,可能還需要人工地創造一些數據。

以文字識別應用為例,可以從字體網站下載各種字體,然後利用這些不同的字體配上各種不同的隨機背景圖片創造出一些用於訓練的實例,這將會幫助大家獲得一個無限大的訓練集。

同時,還可以利用已有的數據對其進行修改,例如將已有的字符圖片進行一些扭曲、旋轉、模糊處理。只要實際數據和經過處理後的數據依舊相似,那麼便可以創造大量的數據。

因此,獲得更多數據可以通過如下方式:

1.人工數據合成

2.手動收集、標記數據

3.眾包

局部分析

在機器學習的應用中,通常需要通過幾個步驟才能進行最終的預測,那麼如何知道哪一部分是最值得我們花精力去完善的呢?

大家可以跟著小Mi再仔細觀察一下文字識別應用的流程圖:

流程圖中每一部分的輸出都是下一部分的輸入,選取某一部分手動提供100%正確的輸出結果,然後看最終的整體效果提升了多少。(假使總體效果為72%的正確率)

令Text detection部分輸出的結果100%正確,發現系統的總體效果從72%提高到了89%。這就意味著需要在Text detection部分多花些功夫啦。

接著手動選擇數據,使得Character segmentation部分輸出的結果100%正確,發現系統的總體效果最終只提升了1%,也就是說Character segmentation部分已經足夠好啦。

同樣Character recognition也是這樣的檢驗方法啦~輸出結果100%正確,系統的總體效果又提升了10%,表示完善Character recognition部分可以使得整體系統有較大的提升。

雖然整個系列小Mi只在最後介紹了機器學習相關的一個案例,但是已經足夠可以展現一個複雜的機器學習系統是如何被組合起來的,同時也介紹了機器學習操作流程的有關概念以及如何分配資源來以作出更好的決定,希望可以幫助到大家學習如何自己開發一個複雜的機器學習應用呦。

好啦,相聚總會有離別的時候,卻依舊期待著下次的美好相遇,小Mi還記著當初跟大家的約定,後續一定會帶來更多的學習系列!

PS:再次感謝吳恩達老師!通過觀看老師的視頻,小Mi也重新對機器學習有了更多更深的理解,感謝大佬!!!

好啦,我們,下個系列,再見呦!(揮手24h,太捨不得啦~)

關鍵字: