中文 | English

【TinyML應用專題】用 Edge Impulse與 Arduino Nano BLE Sense 自造健身手環

編譯:江宗諭

前言

最近,我參與一場由 Edge Impulse與 Sparkfun 共同組織的工作坊。

在工作坊中,我學習打造一個顛覆性的 TinyML 健身手環,在此解決方案中,我運用 SparkFun 的 MicroMod ML ,以及 Nordic 的 nRF52840 MicroMod 處理器,分類了不同的動作和身體姿勢。

在 Edge Impulse 支援下,我收集了相關數據並訓練了機器學習的模型。為具備準確性,並執行在有線情況下,可能無法實現的不同身體動作,我撰寫了一個小型的 Python 腳本,成功從低功耗藍牙裝置收集資料,並上傳至Edge Impulse 平台。

關於資料收集範例的測試,請您觀看下方影片(編按:影片中,作者Sanyam_Arora將低功耗藍牙裝置配戴在左臂上。)

以下則是如何打造這個 TinyML 健身手環的相關細節:

第一步:TinyML 健身手環的硬體需求

  • Arduino Nano Ble Sense ,或任何 TinyML 相容的微控制器。
  • USB 升壓轉換器或行動電源
  • 電池
  • 臂帶

只要透過行動電源或 USB 升壓轉換器,為 Arduino Nano 供應電源,您便可開始使用了。

需注意的是,因 Arduino BLE Sense 以非常低的電量運作,所以,一些行動電源無法與裝置正常配合使用,它們會在一段時間後自動關閉,這會打亂收集資料或測試裝置的過程。

若有這樣的情況發生,比較好的方式是採用一個升壓轉換器及一顆 3.7 伏特的電池。

第二步:

如同我在前面的影片中所示範,這個裝置可輕易地配戴於您的手腕或手臂。

第三步:如何安裝 Arduino IDE

對微控制器而言, Arduino IDE 是個非常棒的簡約解決方案!

就讓我們從安裝 Arduino IDE 開始吧!首先,針對電腦上的作業系統,您必須確定下載正確版本,然而,Arduino IDE 支援最常使用的作業系統,包括微軟的 Windows 、 Linux 及蘋果的 Mac OS。

接著,請您點擊以下網址下載 Arduino IDE:https://www.arduino.cc/en/software

等安裝程式下載完畢後,您便可安裝 Arduino IDE ,並啟用如函式庫等一些選項。

在此的關鍵點是,針對指定的微控制器安裝所需內核。對此,我們要使用「開發板管理器( Board Manager )」,它是個很好的安裝工具。以下,讓我們快速執行幾個步驟,以安裝正確內核:

  1. 在 Arduino IDE 的左邊欄位中,請點擊「開發板管理器( Board Manager )」。
  2. 運用「開發板管理器( Board Manager )」搜尋功能,請搜尋 Arduino nano 33 BLE sense 。
  3. 搜尋到「 Arduino Mbed OS Nano Boards」,請點擊「安裝( Install )」。
  4. 等待一會便安裝完成!

圖一

安裝完畢後,請您上傳程式碼,以透過低功耗藍牙取得加速器的資料。(編按:作者此處所指程式碼,位於原文的「 Step 3: INSTALLING THE REQUIREMENTS : 」最下方,請您自行前往下載,謝謝。)

第四步:如何使用「 EDGE IMPULSE STUDIO 」

Edge Impulse是入門 TinyML 的絕佳平台。

若您已有 Edge Impulse 帳號,請以該帳號登入;如果您尚未註冊,請點擊以下連結,創立一個新帳號:https://studio.edgeimpulse.com/login

帳號創立完成後,請點擊「 Create New Project (建立新的專案)」。專案建立完成後,請透過螢幕上方選單,前往「Project Key」段落,並複製專案的「 API  密鑰」及「 HMAC 密鑰」。

第五步:運用低功耗藍牙收集數據

由 Edge Impulse 平台上的文件得知, Arduino Nano BLE sense 完全相容於該平台,所以,我們可直接透過EDGE IMPULSE CLI 或 WEB USB 介面收集數據。然而,若我們想收集「人類動作」的相關數據,直接透過USB 數據線收集該項數據會有點困難。

所以,針對透過低功耗藍牙收集數據,我們有一個自定義的 Python 腳本,它依靠「 bluepy python 函式庫」,透過低功耗藍牙取得數據,然後直接將資料轉發至 Edge Impulse 平台。

為透過低功耗藍牙收集數據,我們準備了兩個檔案,一個專為收集測試數據;另一個則為了收集訓練數據。只需打開下方兩個檔案,在檔案中加入您的「 API 密鑰」及「 HMAC 密鑰」,便可開始收集數據了。(編按:如需下載本段提到的兩個檔案,請前往原文的「 Step 5: COLLECTING THE DATA (USING BLE): 」最下方,即可下載。)

至於如何運作這兩個 Python 檔案,只需使用您電腦上的終端機( Terminal ),並運用以下命令( Command )即可:

python3 train_collect.py [MAC Address of device] ” Data name” [time period of recording]

詳情請參考圖二:

圖二

需注意的是,「 bluepy python 函式庫 」只能在 LINUX 作業系統上運作,無法在 Windows 作業系統上使用。

有人建議我使用「 BLEAK python 函式庫」,因它支援 Windows 作業系統,且運作速度上快許多。所以,我很快便會測試「 BLEAK python 函式庫」,並修改程式碼,使它能在 LINUX 及 Windows 上運作。

第六步:數據驗證

起初,為測試我的模型,我收集了深蹲、開合跳及休息等三種姿勢的數據,並且它們相當準確。

現在,我將在模型中加入更多的運動項目,包括伏地挺身、跳繩、引體向上……等等,以確認我可在微控制器上部署這個模型的準確性。

下方三張圖片中的數據,分別指的是休息、伏地挺身及開合跳等三種姿勢。

圖三

圖四

圖五

第七步:訓練模型

針對訓練模型, Edge Impulse 提供了易於使用的介面,只需遵循以下步驟,便可開始訓練模型了。

  1. 前往「 Impulse Design 」,然後創建一個 Impulse 。有許多選擇可供您使用,但 Edge Impulse 會根據您所提供的數據,產生出最好的選擇。
  • 選擇「光譜特徵 ( Spectral Features ,暫譯)」,並產生模型的特徵。需注意的是,若在預設情況下並未得到好的結果,您可在此改變訓練參數。
  • 前往「神經網路分類器( Neural Network Classifier ,暫譯)」,並展開模型訓練。需注意的是,若有需要,您可以更改訓練的參數。
  • 前往「模型測試( Model Testing )」,並根據測試數據,測試您的訓練數據,同時檢查模型的準確性。
  • 佈署模型。 Edge Impulse 支援許多平台,所以您可直接下載程式碼,程式碼應可與您所使用的平台相容。而針對此專案,我們選擇 Arduino 。

第八步:在裝置上測試

只需匯入從 Edge Impulse Studio 下載的函式庫,然後在 Arduino IDE 的範例( Examples )中,您將獲得一些可佈署於您的裝置並測試模型的範例,而這些範例只能透過 USB 序列埠進行測試。(編按:在匯入函式庫後,該如何在 Arduino IDE 中找到範例,請參考下方圖六)

函式庫下載連結:

https://drive.google.com/file/d/1mOxGAAqvDcCXva60EFks_9bs4sK0h5a0/view?usp=sharing

圖六

第九步:運用低功耗藍牙進行測試

首先,請下載第八步最下方的程式碼,檔名為「nano_ble33_sense_fitness_band_test.ino」(編按:請前往原文「 Step 8: TESTING ON THE DEVICE: 」最下方,即可下載。),然後將程式碼上載至您已自造好的低功耗藍牙裝置(或稱健身手環)。

之後,針對這個低功耗藍牙裝置(或稱健身手環),請透過手機的 App Store 下載一個名為「 nRF Connect 」的App ,並於「 nRF Connect 」中,連結您的低功耗藍牙裝置(或稱健身手環)。

客戶端部分,只需按壓您藍牙服務(Service)的 UUID (128 位元的 ID,請您參考下方三張圖片的資訊,分別為休息、深蹲及開合跳),然後按下下載按鈕,您的手機將開始顯示當前您正進行的運動。

圖七

圖八

圖九

謝謝您的閱讀,並請隨時提出關於修改的建議!

(感謝原文作者 Sanyam_Arora 開放授權,使我們得以翻譯本篇文章,特此致上謝意!若讀者想進一步閱讀原文,請點擊:閱讀全文。)

 

分享到社群

vMaker編輯部

歡迎各界朋友投稿你的maker故事,不論是個人作品、創客觀點或是創客的經驗分享,我們都十分期待能聽到您的分享。 投稿請至:contact@vmaker.tw

This site or product includes IP2Location LITE data available from https://lite.ip2location.com.