現在數字無處不在,無論是鬧鐘、健身追蹤器、條形碼還是包裝好了的送貨包裹。利用MNIST數據集,機器學習可用來讀取單個手寫數字。現在,我們可以將其擴展為讀取多個數字,如下所示。底層的神經網絡同時進行數字定位和數字檢測。這在很多實際環境中是非常有用的,例如讀取商店中的標簽,車牌,廣告等。
讀取多個數字
但是,為什么不直接使用OCR呢?OCR雖然可以自動檢測數字,但是效果并不總是很好,有時我們需要為特定任務訓練特定的神經網絡。
0.1數字檢測
數字檢測問題可分為2部分
數字查找
數字識別
數字查找:
數字可能出現在圖像的任何位置,要檢測到這些數字,我們首先需要查找包含這些數字的區域。這些數字可以有不同的大小和背景。
有多種檢測數字位置的方法。比如可以利用簡單的圖像形態學操作(例如二值化,腐蝕,膨脹)來提取圖像中的數字區域。但是,由于存在諸如閾值,內核大小等調整參數,因此這些處理方式不具有普遍性。此外我們還可以使用無監督特征檢測器,深度模型等。
數字識別:
確定好區域的數字即可進入數字識別的過程。MNIST數據集是用于手寫數字識別的規范數據集。大多數數據科學家已經對該數據集進行了實驗。它包含約60,000個用于培訓的手寫數字和10,000個用于測試的手寫數字。一些示例如下所示:
MNIST圖片
但是,現實生活中的數字通常大不相同。它們具有不同的顏色,通常按照以下情況打印。
日常數字圖像
另一個公共數據集SVHN-街景房數數據集。數據集包含從Google的街景中收集并帶有注釋的門牌號圖像。以下是SVHN的示例圖片:
SVHN圖片
該數據集在許多背景下都有各種數字組合,對于通用模型更合適。
02. Keras建模
我們選擇此基于SVHN位數檢測器來實現多位數檢測器。它寫得很好并且易于遵循。數字定位使用最大穩定的外部區域(MSER)方法完成,該方法用作穩定的特征檢測器。MSER主要用于圖像內的斑點檢測。斑點是像素的連續集合,其外邊界像素強度高于內邊界像素強度(給定閾值)。如果這些區域在強度變化量上變化不大,則可以說是最大穩定的。MSER的運行時復雜度較低,為O(nlog(log(n))),其中n是圖像上像素的總數。該算法對于模糊和縮放也很魯棒。這使其非常適合提取文本/數字。
使用具有卷積,maxpool和FC層的CNN來完成數字識別,這些層將每個檢測到的區域分類為10個不同的數字。分類器在測試集上的準確性達到95%。
我們通過各種示例對存儲庫進行了測試,發現它運行良好。請參閱上面共享的示例。
在某些間隙中,要么本地化器無法正常工作(未檢測到數字1的位置),要么檢測器發生故障($被檢測為5)。
結論
我們希望該博客被證明是了解多位數檢測管道如何工作的良好起點。我們共享了一個github鏈接,該鏈接可用于在SVHN數據集上構建模型。如果此模型無法正常運行。大家可以收集自己的數據并微調已訓練的模型。
SVHN鏈接:https://github.com/penny4860/SVHN-deep-digit-detector
審核編輯 :李倩
-
檢測器
+關注
關注
1文章
863瀏覽量
47678 -
OpenCV
+關注
關注
31文章
634瀏覽量
41338 -
數據集
+關注
關注
4文章
1208瀏覽量
24689
原文標題:基于OpenCV的多位數檢測器
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論