中文 | English

【自造筆記】串接Teachable Machine的Ai模型到Raspberry PI

**文章撰寫日期為2/23/2022,文章內操作流程可能會因為各套件及Github內程式碼版本不同而有所差異

Teachable Machine

Teachable machine是google推出的服務,讓沒有程式基礎的人也可以體驗甚至應用Ai人工智慧。目前Teachable Machine提供三種深度學習的模型:影像辨識、聲音辨識、人體姿勢追蹤。最普遍被應用的是影像辨識,只要用筆電相機拍下幾十張不同物體的照片,就可以快速的訓練出一個影像辨識的模型。

雖然訓練出這個模型不用會寫程式碼,但是一旦要應用到電腦、Raspberry PI甚至Arduino上面,就會有各種頭痛的問題要解決。這一篇文章,就會一步一步跟大家說如何將Teachable Machine訓練好的模型,配合Tensorflow Lite,應用到樹莓派上面。

硬體配件及測試

這個教學的硬體是運用Raspberry PI 4搭配Raspberry PI Camera Module。Raspberry裝好後插上相機模組,可以用在Terminal輸入libcamera-still來測試相機是否正常運作。(網路上許多教學提到的raspistill已經為舊版套件不再支援了。)

Raspberry PI準備

我們在樹莓派上有準備運作深度學習所需要的套件跟範例程式,這邊會使用一個比較輕量的框架叫做Tensorflow Lite。在Terminal依序輸入下方指令

  1. git clone https://github.com/tensorflow/examples --depth 1
    
  2. cd examples/lite/examples/image_classification/raspberry_pi
  3. sh setup.sh

這些步驟會將範例程式下載下來,並且將需要的套件安裝完成。為了確定一切正常運作,可以再執行下列程式碼:

python3 classify.py

應該就能開啟相機跑範例程式本身內建的EfficientNet的影像辨識了。

Teachable Machine模型準備

在Teachable Machine完成模型訓練後,選擇Export Model >> TensorFlow Lite >> Quantized >> Download my model。他會需要花一點時間輸出,但最後就會變成一個zip檔下載到電腦裡了。解壓縮之後應該會看到兩個檔案:labels.txt以及model.tflite。

不相容問題

理論上接著只要把Teachable Machine的模型放到樹莓派裡面,並在跑classify.py這個檔案的時候指定使用的模型,從EfficientNet改成我們自己客製化的模型就可以運作了。但現階段有一個不相容的問題,自從2021年12月,Tensorflow提供的範例程式要求Tflite(Tensorflow Lite)的模型要帶有Metadata,包含模型名稱以及Label information(類別標記),但Teachable Machine輸出的模型還未更新,上述提到下載下來的model.tflite並沒有包含Metadata,因此是無法被讀取使用的。對於這個問題提供給大家兩個解法

方案1:補上Metadata

若要在tflite的檔案內補上metadata的話,比較麻煩。

Step1:在「電腦」上安裝tensorflow,並要在電腦的terminal執行「git clone https://github.com/tensorflow/examples --depth 1

Step2:先找到這個範例檔案:\


cd examples/image_classification/metadata/metadata_writer_for_image_classifier.py

並更改內部的_MODEL_INFO,至少需修改檔案名稱、name、以及num_class,以符合你的自訂模型

Step3:將你的模型(tflite跟labels.txt)都放到examples/image_classification/metadata這個資料夾裡

Step4:就可以執行以下程式碼:

python3 ./metadata_writer_for_image_classifier.py \

--model_file=./model.tflite \

--label_file=./labels.txt \

--export_directory= ./

模型輸出完畢後,就可以運用classify.py這個比較新版的範例程式,來執行你的自訂模型了

cd ~/examples/lite/examples/image_classification

python3 raspberry_pi/classify.py \

--model = metadata/model_with_metadata.tflite

方案2:抓舊版範例程式

舊版範例有一個「classify_picamera.py」的檔案,可以直接應用Teachable Machine輸出的模型。
這個檔案可以從這裡下載(打開連結後直接按右鍵另存新檔),或是到tensorflow github的歷史紀錄,去2021年12月以前的任何一次commit裡面找,就可以在 example/lite/examples/image_classification/raspberry_pi這個路徑下面找到這個檔案。

這個檔案在樹莓派裡面下載完畢後,連同Teachable Machine的模型放到原路徑(examples/lite/examples/image_classification/raspberry_pi

就可以跑下列的程式碼執行檔案了:

python3 raspberry_pi/classify_picamera.py \

--model = model.tflite\

--labels = labels.txt

希望這個教學能協助大家順利把自己製作的深度學習模型應用到樹莓派上面喔~

分享到社群

林 允涵

透過拍攝影片紀錄創作過程並提供開源設計,讓更多人對於自造運動產生興趣並開始自己動手實現自己的想法