數字辨識 (raspberryPi + openCV)

13
數字辨識 -使用openCV 張家銘 <[email protected]> Oct 13, 2016 / NIU

Transcript of 數字辨識 (raspberryPi + openCV)

Page 1: 數字辨識 (raspberryPi + openCV)

數字辨識 -使用openCV

張家銘 <[email protected]>

Oct 13, 2016 / NIU

Page 2: 數字辨識 (raspberryPi + openCV)

投影片用到的code

• http://ppt.cc/jxQMg

• http://ppt.cc/ig4mL

Page 3: 數字辨識 (raspberryPi + openCV)

數字辨識

• 數字辨識其實不難

• 他背後的概念是這樣子的

• 圖片來源 http://img.technews.tw/wp-content/uploads/2016/02/shutterstock_360063380.jpg

• 圖片來源 https://static1.squarespace.com/static/52b1f7fde4b0cf42302dca8f/t/55de2e37e4b0f379c277f311/1440624193979/

Page 4: 數字辨識 (raspberryPi + openCV)

數字辨識 概念

• 首先,我們蒐集各種不同類型的數字1

• 然後把這些照片存在一個陣列裡面

• 並且把這個陣列貼上“這是數字1”的標籤

• 這樣程式比對後得到相近的結果

• 再去取對應陣列上面標的是甚麼標籤

• 程式就會知道辨識的目標是甚麼東西了!

Page 5: 數字辨識 (raspberryPi + openCV)

• 但是在辨識之前

• 我們要先做好一個知識庫

• 這樣辨識的程式才有依據可以比對呀~

• 註:以下程式碼與說明僅供參考。

如有錯誤疏失,歡迎交流指教 =]

Page 6: 數字辨識 (raspberryPi + openCV)

建立訓練庫(1/4)

• 建立訓練庫首要的工作

• 就是引進作為我們比對資料的範本啦~

• 首先讀進單引號裡的檔案(如圖為.png)

• 並分別給img1~4的變數名稱

Page 7: 數字辨識 (raspberryPi + openCV)

建立訓練庫(2/4)

• 設立一個預先處理圖片的副程式

• 建立訓練庫有個規定的固定大小

• 之後呼叫副程式來處理每一張圖片

Page 8: 數字辨識 (raspberryPi + openCV)

建立訓練庫(3/4)

• 這個步驟呢

• 就是讓零散的圖變成方便我們管理的陣列

• 另外其他莫名其妙的轉換呢

• 為的是要符合建立訓練庫的規範

Page 9: 數字辨識 (raspberryPi + openCV)

建立訓練庫(4/4)

• 經過一連串複雜的設定後

• 目的是為了產出我們以後要用的訓練庫

• 也就是一個可讓程式做比對的百科全書嚕~

• 這邊37行,是讓圖的陣列與標籤作結合

• 產出的訓練庫如截圖將是“knn_data.npz”

Page 10: 數字辨識 (raspberryPi + openCV)

其實這個辨識程式的背後有個巨大的陰謀 (?

Page 11: 數字辨識 (raspberryPi + openCV)

所謂KNN演算法

• 離散資料中

• 具某特徵的資料易有固定分布

• 今天有一筆新的資料進來

• 我們找距離他最近的幾筆資料

• 來決定這筆資料是屬於哪一國的

• 張智星老師:第13講 K-Nearest Neighbor Classifiers (2:38~6:00)

• https://www.youtube.com/watch?v=ARuFG4SjM-g

• 圖片來源 http://bdewilde.github.io/assets/images/2012-10-26-knn-concept.png

Page 12: 數字辨識 (raspberryPi + openCV)

介紹幾個基本的openCV函式

• 讀圖片檔案我們用cv2.imread()

• 模糊圖片我們用cv2.medianBlur()

• 將圖片二值化我們用cv2.threshold()

• 擷取圖片的某部分我們用cv2.resize()

• openCV官網收錄全部相關的解釋文件

• openCV2與openCV3的函式名稱有變動

Page 13: 數字辨識 (raspberryPi + openCV)

最後

• 如果你想要深入學習這個領域的話

• 請認明 “計算機圖學”