AI 魔杖搭配 TensorFlow Lite for Microcontrollers 和 Arduino

1. 簡介

建構項目

在本程式碼研究室中,我們將學習如何使用 TensorFlow Lite For Microcontrollers,在 Arduino Nano 33 BLE 上執行深度學習模型。使用者可將微控制器變成數位「魔杖」,揮動魔杖施展各種魔法。使用者移動魔杖時,模型會收到複雜的多維度感應器資料做為輸入內容,並輸出簡單的分類結果,在發生特定動作時發出警示。

9208eb1207211349.gif

微控制器上的機器學習

機器學習技術可用於打造智慧型工具,讓使用者生活更輕鬆,例如 Google 助理。但通常這類體驗需要大量運算或資源,包括強大的雲端伺服器或桌機。不過,現在可以在微控制器等耗電量低的微型硬體上執行機器學習推論。

微控制器非常常見、價格低廉、耗電量極低,而且非常可靠。這些晶片內建於各種家用裝置,例如家電、汽車和玩具。事實上,每年生產的微控制器裝置約有 300 億部。

1914a419dfacf0b5.jpeg

我們將機器學習技術導入微型微控制器,讓數十億部裝置變得更智慧,且不需使用昂貴的硬體或穩定的網際網路連線。想像一下:可依照您的日常作息進行調整的智慧應用程式、可區分問題與一般操作的智慧型工業用感應器,以及可讓兒童透過開心又有趣的方式學習的神奇玩具。

TensorFlow Lite For Microcontrollers (軟體)

864114d0c2b4c919.png

TensorFlow 是 Google 的開放原始碼機器學習架構,可用於訓練及執行模型。TensorFlow Lite 是一種軟體框架,是 TensorFlow 的最佳化版本,適用於在小型、相對低功耗的裝置 (例如手機) 上執行 TensorFlow 模型。

TensorFlow Lite For Microcontrollers 是一種軟體框架,是 TensorFlow 的最佳化版本,專門用於在微控制器等小型低功耗硬體上執行 TensorFlow 模型。它符合這些嵌入式環境的必要限制,也就是二進位檔大小較小,不需要作業系統支援、任何標準 C 或 C++ 程式庫,也不需要動態記憶體配置等。

Arduino Nano 33 BLE (硬體)

bcd452d4d660efa9.jpeg

Arduino 是熱門的開放原始碼平台,可用於建構電子專案。包括:

  1. 實體可程式化電路板 (通常是微控制器),例如本程式碼實驗室使用的 Arduino Nano 33 BLE。
  2. Arduino IDE (整合開發環境),用於編寫電腦程式碼並上傳至實體開發板的軟體。

Arduino Nano 33 BLE 是以微控制器為基礎的平台,也就是單一電路板上的微型電腦。這類裝置配備處理器、記憶體和 I/O 硬體,可與其他裝置傳送及接收數位信號。微控制器不像電腦一樣功能強大,通常不會執行作業系統。這些裝置的處理器很小,記憶體不多,而且您編寫的程式會直接在硬體上執行。但由於微控制器設計盡可能簡單,因此耗電量極低。

執行步驟

  • 設定 Arduino Nano 33 BLE 微控制器,並將其變成數位「魔杖」
  • 設定 Arduino IDE 並安裝必要程式庫
  • 將程式部署至裝置
  • 揮動魔杖施展各種咒語,並查看預測結果

軟硬體需求

2. 設定 Arduino 微控制器

拆開 Arduino 包裝

從盒中取出,並從包裝泡棉中拉出。否則可能會導致問題!

6ed84a651c871a58.jpeg

將點字顯示器連接至筆電

  • 將 MicroUSB 傳輸線插入晶片上的插座。
  • 將連接線的另一端插入筆電的 USB 插座。
  • Arduino 左下方的 LED 燈 (下圖左上方) 應會亮起。

c6936696f9659104.jpeg

熟悉工作流程

99852afbed7e78b0.png

如上圖所示,Arduino 上的 TFLite 解譯器會定期對模型執行推論。模型會使用處理過的加速計資料做為輸入內容,並輸出預測結果,指出最有可能發生的手勢。此外,系統會列印所需輸出內容,並亮起正確的 LED 燈。

3. 設定 Arduino IDE

1. 下載 Arduino IDE

如要將程式部署至 Arduino 微控制器,請使用 Arduino IDE。

下載完成後,請點選圖示如下的應用程式,安裝並開啟 Arduino IDE:75717f13527f36b9.png

系統會開啟初始到達網頁,如下所示:

933c91e6e1997c61.png

2. 設定 Board 管理員

  1. 從 Arduino 選單中選取 Tools -> Board: "Arduino .." —> Boards Manager
  2. 搜尋並安裝 "Arduino Nano 33 BLE"Arduino nRF528x Boards (Mbed OS)。這樣可確保 Arduino IDE 支援 Arduino Nano 33 BLE 微控制器。817c63346152eda9.png
  1. 從 Arduino 選單中選取 Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

9357691e1a1348eb.png

  1. 最後,請在 IDE 右下方確認所選開發板為「Arduino Nano 33 BLE」。

aa08706bb84fa9b2.png

3. 設定通訊埠

從 Arduino 選單中選取 Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)。畫面應如下所示:

8c25990d0c6fb6f8.png

4. 檢查開發板連線

從 Arduino 選單中選取 Tools -> Get Board Info。畫面應如下所示:

ccd8f5305be6cf59.png

4. 安裝程式庫

1. TensorFlow Arduino 程式庫

這個程式庫包含所有 TensorFlow Lite for Microcontrollers 範例,包括本程式碼研究室所需的魔杖原始碼。

  1. 從 Arduino 選單中選取 Sketch -> Include Library -> Add .ZIP Library...
  2. 新增您下載的 TensorFlow Arduino 程式庫 .zip

2. LSM9DS1 Arduino 程式庫

這個程式庫可讓您從 Arduino Nano 33 BLE Sense 上的 LSM9DS1 IMU 讀取加速計、磁力計和陀螺儀值。

  1. 從 Arduino 選單中選取 Sketch -> Include -> Manage Libraries...
  2. 搜尋並安裝 "Arduino_LSM9DS1"ac2f78a737c5f233.png

5. 載入及建構範例

1. 載入範例

從 Arduino 選單中選取 File -> Examples -> Arduino_TensorFlowLite -> magic_wand,載入程式碼範例。

de349f2d3cb49b98.png

這會載入魔杖的原始碼。

cda8c35a597b0798.png

2. 建構範例

按一下草圖視窗中的 Upload 按鈕。

71cb1474d5e14669.png

幾分鐘後,畫面應該會顯示紅色文字,指出刷新已完成。上傳時,右側 LED 燈應會閃爍,上傳完成後則會熄滅。

3df1d0858c6e40a4.png

6. 試用版

魔法棒目前可偵測 3 種手勢,如下所示:99a607da66af9fc8.png

  1. 翅膀:從左上角開始,仔細描繪「W」字形,持續兩秒。
  2. 圓圈:直立開始,將魔杖順時針畫圓一秒。
  3. 斜面:首先,將魔杖向上舉起,LED 燈朝向自己。將魔杖傾斜向下移動至左側,然後水平向右移動一秒。

下圖顯示兩種手勢。首先是斜坡,然後是機翼 (請將此做為示範的參考)。

9208eb1207211349.gif

如要執行試用版,請按照下列指示操作:

  1. 插入 USB 後,從 Arduino 選單中選取 Tools -> Serial Monitor。一開始會開啟空白畫面,沒有任何輸出內容。

38e8d53652eb28f2.png

  1. 移動 Arduino 微控制器,仔細描繪上述每個形狀,並查看序列埠監控器是否偵測到手勢。

60b8a0017bcae419.png

  1. 從序列監控器中的輸出內容,我們發現魔杖確實偵測到所有形狀!你也會發現右側 LED 燈亮起。

7. 後續步驟

恭喜,您已成功在 Arduino 微控制器上建構第一個可辨識手勢的「魔杖」!

希望您喜歡這篇簡短的 TensorFlow Lite for Microcontrollers 開發入門教學。在微控制器上進行深度學習是令人興奮的新概念,我們鼓勵您勇於嘗試!

參考文件

647c3ef0dc103804.png

感謝你,祝你建構愉快!