CNN在影像處理、辨識都是很重要的技術,在上一篇已經稍微了解 CNN 的概念後,現在來看看這個實用的技術會被運用在哪裡吧!
應用場景包括機器學習、文檔分析、和圖像辨識等領域。
CNN 相當於眼睛
的角色,以辨識不同物體,現在很多地方都會使用數位的手寫功能,就算只拿數字來看,每個人寫出來的樣子也都不同,這時候辨識的功能就很重要。
首先要先匯入 keras
中引入 mnist
→ minst 是一個手寫數字的圖像資料集!整個 dataset 是由 60,000 張 training set 和 10,000 張 testing set,手寫 0~9 平均分布並且是 28 x 28 的灰階圖片所組成。
# 導入函式庫
import numpy as np
from keras.models import Sequential
from keras.datasets import mnist
from keras.utils import np_utils # 用來後續將 label 標籤轉為 one-hot-encoding
import cv2
再來我們要載入 MNIST 資料庫的訓練資料,並自動分為『訓練組』及『測試組』和建立簡單的線性模型去執行。
(X_train, y_train), (X_test, y_test) = mnist.load_data()
model = Sequential()
將 training 的 label 進行 one-hot encoding 和把 training 的 input 資料轉為2維
One-hot encoding:例如數字 7 經過轉換後是 0000001000,即第7個值為 1。
y_TrainOneHot = np_utils.to_categorical(y_train)
y_TestOneHot = np_utils.to_categorical(y_test)
X_train_2D = X_train.reshape(60000, 28*28).astype('float32')
X_test_2D = X_test.reshape(10000, 28*28).astype('float32')
數值正規化後進行預測
x_Train_norm = X_train_2D/255
x_Test_norm = X_test_2D/255
X = x_Test_norm[0:10,:]
predictions = model.predict_classes(X)
print(predictions) # get prediction result
接下來就可以讀取影像囉~
img=cv2.imread('C:/Users/User/Desktop/7.png', cv2.IMREAD_GRAYSCALE)
crop_size
cv2.imshow('My Image', img) # 顯示圖片
cv2.waitKey(0) # 按下任意鍵則關閉所有視窗
cv2.destroyAllWindows()
得到最後結果!
img_2D = img.reshape(1,28*28).astype('float32')
img_norm=img_2D/255
img = img_norm
predictions = model.predict_classes(img)
# get prediction result
print(predictions)