編譯:江宗諭
前言
最近,我參與一場由 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 )」,它是個很好的安裝工具。以下,讓我們快速執行幾個步驟,以安裝正確內核:
- 在 Arduino IDE 的左邊欄位中,請點擊「開發板管理器( Board Manager )」。
- 運用「開發板管理器( Board Manager )」搜尋功能,請搜尋 Arduino nano 33 BLE sense 。
- 搜尋到「 Arduino Mbed OS Nano Boards」,請點擊「安裝( Install )」。
- 等待一會便安裝完成!

圖一
安裝完畢後,請您上傳程式碼,以透過低功耗藍牙取得加速器的資料。(編按:作者此處所指程式碼,位於原文的「 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 提供了易於使用的介面,只需遵循以下步驟,便可開始訓練模型了。
- 前往「 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 開放授權,使我們得以翻譯本篇文章,特此致上謝意!若讀者想進一步閱讀原文,請點擊:閱讀全文。)