使用 Teachable Machine
Teachable Machine 是 Google 所推出的無程式碼機器學習平台,只需要簡單的步驟,就能夠在瀏覽器上訓練模型,透過訓練的模型辨識圖片、聲音或是姿勢,這篇教學將會介紹如何使用 Teachable Machine。
快速導覽:
什麼是 Teachable Machine?
Teachable Machine 是 Google 所推出的無程式碼機器學習平台,更簡單來說,Teachable Machine 是一個網頁工具,只需要打開瀏覽器,就能在不需要專業知識和撰寫程式碼的情況下,輕鬆的為網站和應用程式訓練機器學習模型。
前往 Teachable Machine:https://teachablemachine.withgoogle.com/
Teachable Machine 目前提供了「圖片、聲音和姿勢」共三種訓練模型,只要經過「蒐集和訓練」的步驟,就能夠建立自己的模型,由於 Teachable Machine 背後應用了開源的機器學習函式庫 Tensorflow.js,因此可以將訓練好的模型以 Tensorflow.js、Keras、或 Tensorflow Lite 格式輸出,在任何的網頁或是應用程式中呼叫使用。
注意,Python 只能使用圖片專案所訓練的模型。
建立分類,訓練模型
開啟 Teachable Machine 網站後,點擊「開始使用」開始訓練模型的新專案 ( 最下方可以切換語系為繁體中文 )。
點擊 「圖片專案」,選擇「標準圖片模型」,就可以進入圖片模型訓練流程。
訓練流程主要有三個步驟,「添加分類內容」、「訓練模型」和「預覽訓練結果」。
添加分類內容:
每個分類的內容可以透過攝影鏡頭 Webcam 或上傳 Upload 的方式增加圖片,最少需要有兩個分類,點擊下方 Add a class 的按鈕可以增加分類,下圖的範例的分類使用 oxxo ( 畫面中有人 ) 以及維他命 ( 畫面中有維他命的罐子 ) 兩種。
訓練模型:
分類建立完成後,點擊「訓練模型」,就會開始進行圖片模型的訓練,出現「模型已訓練完成」的文字表示訓練完成。
預覽訓練結果:
訓練完成後,就能從預覽模型的視窗裡,測試自己訓練的模型準確度。
在 Python 中使用模型
點擊右上方的「匯出模型」,選擇 Tensorflow,勾選 Keras,就能下載 Keras.h5 模型供 Python 使用。
下載模型並壓縮,將 keras_model.h5 放到和 Python 程式同樣的路徑下,就可以開始編輯 Python 程式。
在 Anaconda Jupyter 安裝好 Tensorflow 和 OpenCV 後,執行下方的程式碼,就可以看到透過 OpenCV 播放攝影鏡頭的影片,並判斷現在出現的影像是什麼分類。
import tensorflow as tf
import cv2
import numpy as np
model = tf.keras.models.load_model('keras_model.h5', compile=False) # 載入 model
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32) # 設定資料陣列
cap = cv2.VideoCapture(0) # 設定攝影機鏡頭
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
ret, frame = cap.read() # 讀取攝影機影像
if not ret:
print("Cannot receive frame")
break
img = cv2.resize(frame , (398, 224)) # 改變尺寸
img = img[0:224, 80:304] # 裁切為正方形,符合 model 大小
image_array = np.asarray(img) # 去除換行符號和結尾空白,產生文字陣列
normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1 # 轉換成預測陣列
data[0] = normalized_image_array
prediction = model.predict(data) # 預測結果
a,b= prediction[0] # 取得預測結果
if a>0.9:
print('oxxo')
if b>0.9:
print('維他命')
cv2.imshow('oxxostudio', img)
if cv2.waitKey(500) == ord('q'):
break # 按下 q 鍵停止
cap.release()
cv2.destroyAllWindows()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~