女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【tinyML】使用EdgeImpulse讓您的Arduino可以辨識手勢!

jf_cVC5iyAO ? 來源:易心Microbit編程 ? 作者:易心Microbit編程 ? 2022-12-06 11:12 ? 次閱讀

1 認識 wio terminal

Wio Terminal 是一款專門用于 IoTTinyML 的多功能開發板 – 包含了 ATSAMD51P19 芯片并以 ARMCortex-M4F 為核心 (20MHz),已支持多種針對微控制器的 ML推論框架。

本開發板已包含:

?光傳感器(模擬)

?麥克風

?可自定義按鈕 x 3

?4 英吋彩色LCD

?加速度傳感器

?Grove 接頭 x 2,可連接多達300種 Grove 傳感器

就軟件面來說, Arduino IDE 已可用于開發各種支持 Edge Impulse 與 Tensorflow Lite 的微控制器裝置來進行神經網絡訓練與推論,或者您也可以玩玩看另一款熱門的開發環境 platformIO 也可以玩玩看。EdgeImpulse 是一款針對邊緣運算裝置 x 機器學習的簡單易用的 coding free 開發環境。用戶可透過網頁接口就可以完成整個 tinyML 作業流程,從數據收集、數據處理、訓練神經網絡到導出部署,一條龍啊!

本文將示范如何把 wio terminal 所收集到的手勢資料 (光傳感器數值變化) 上傳到 Edge Impulse,完成上述流程之后再放回到 wio terminal 來執行脫機 ML 推論,超好玩又富有學習意義!

如何辨識手勢

在此的假設為,不同的手勢在光傳感器上方晃動時,會產生可區別的時序數據(time series data),我們就是要把這些數據送到 Edge Impulse 網站來處理、學習,并匯出一個 wio terminal 可執行推論的神經網絡模型文件!

可想而知,如果用傳統的做法就很難去定義,怎樣的 pattern 可以一體適用各種不同的手勢都可以有不錯的辨識效果。(后續各位在收數據的時候就知道,同一種手勢的 time series 數據形狀差異很大!)

2 PC端設定

2-1 設定 Arduino IDE 2.0

根據原廠文件,請使用 Arduino IDE 1.9 以上,所以我直接使用 2.0,請根據您的操作系統版本取得對應的 Arduino 2.0 IDE。

注意!編譯 Edge Impulse 匯出檔案才需要用到 Arduino IDE 1.9以上,如果是把 wio terminal 當作一般 arduno 使用的話,經我實測使用 Arudino 1.8.X 沒有問題

請在 File → Preference → Additional Baord url 字段中填入:

9e9e68f6-7473-11ed-8abf-dac502259ad0.png

完成之后就可以透過 Tools → Board → Boardmanager,輸出“Wio”來安裝 wio terminal 相關套件,點選 INSTALL:

9eb5de50-7473-11ed-8abf-dac502259ad0.png

完成就可以看到 Wio Terminal 相關選項

9edc0198-7473-11ed-8abf-dac502259ad0.png

2-2 安裝 node.js 與 edgeimpulse 相關工具

根據您的平臺安裝 Node.js 1.0 以上版本,完成之后開啟 cmd 輸入以下指令來安裝 edge-impulse-cli:

npm install -g edge-impulse-cli

9ef91058-7473-11ed-8abf-dac502259ad0.png

3 透過 edge cli 上傳傳感器數據到 EdgeImpulse

請新增一個 Arduino項目,輸入以下程序代碼上傳到 wio terminal,會透過 serial 把光傳感器數據傳給 edge cli,再上傳到 Edge Impulse 網站的指定項目(當然是您的賬號)

由 FREQUENCY_HZ 40 可知,我們會在 1000 ms (1秒鐘) 的時間長度取得 40 筆光傳感器數據,并以這一段時間中的亮度變化作為指定的手勢,也預設石頭 與 布 的手勢差異是可以被學習出來的。

#define FREQUENCY_HZ 40

#define INTERVAL_MS (1000 / (FREQUENCY_HZ))

void setup() {

Serial.begin(115200);

Serial.println("Started");

}

void loop() {

static unsigned long last_interval_ms = 0;

float light;

if (millis() > last_interval_ms + INTERVAL_MS) {

last_interval_ms = millis();

light = analogRead(WIO_LIGHT); //讀取 wio 光傳感器模擬腳位

Serial.println(light);

}

}

刻錄完成之后 wio terminal 就擺著,接著要透過 edge cli 來上傳數據到 edge Impulse 網站

開啟 cmd 之后輸入以下指令,會請您登入 edge Impulse 的賬號密碼并詢問以下事項:

?裝置所連接的 COM port

?命名數據字段:如下圖的 light

由下圖可以看到您的裝置 ID: 01FE…這一段,就是透過這個 ID 來識別您的裝置。

edge-impulse-data-forwarder

9f189c3e-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 登入與設定裝置

這一段最辛苦啦,幾乎所有的設定都是在 Edge Impulse 網站上完成,但說真的已經省很多事情了。

請先建立一個 Edge Impulse 賬號并登入。為了怕各位迷路,我會用顏色來標注現在是在哪一個 tab。以下是登入后的主畫面,也就是畫面左側– Dashboard,可以看到項目相關設定。

9f3f3ee8-7473-11ed-8abf-dac502259ad0.png

左側– Device

裝置基本設定,可以看到本賬號下的所有裝置,可以點選右側… 來編輯裝置設定或刪除裝置

9f6bfe4c-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 收資料

這里要收資料,請確認您的 wio terminal 已經上傳上述 arduino sketch 來準備傳數據,否則數據當然無法上傳到 Edge Impulse網站。

請點選左側– Data acquisition

中間的 collected data 一開始當然不會有東西,因為還沒開始上傳數據。請于畫面右側這樣設定:

?Label: rock (石頭)/ paper (布) -> 要辨識多少種手勢都沒問題,端看您愿意花多少時間去收數據而已。

?Sensor: Sensor with 1 axes (light)

?sample length(ms): 1000

?Frequency (39Hz) 這里自動帶入 arduino sketch 的 FREQUENCY_HZ,不用改

好了之后,按下右下角的 Start sampling,這時候請準備好您的手在 wio terminal 的光傳感器擺好手勢并晃動。取得資料,就會在畫面中間多一筆新的數據出來,點選該筆數據就可以看到他形狀(光傳感器讀數 vs 時間)

9fa1f024-7473-11ed-8abf-dac502259ad0.png

上傳多筆數據之后的畫面如下,在此請讓您所要辨識的 label 的數據筆數盡量相等,反正上傳也不會很麻煩,每一筆數據右側的… 都可以點選來編輯數據屬性或刪除該筆數據。

9fd55414-7473-11ed-8abf-dac502259ad0.png

最后請點選 train / test split 來設定訓練/測試數據的分配比例,完成每一項的必要設定之后,前面會亮起綠色燈,才能進到下一步。

a00a3008-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 訓練模型

左側– impulse design / Create impulse

根據 EdgeImpulse 本身的定義,impulse 是指一個 pipeline,您會在此設定關于 raw data 處理方式、如何處理(processing block)、如何學習(learning block),這樣才算是一個完整的流程。

以我們的手勢辨識范例,在此是長度為一秒鐘的光傳感器數據,所以屬于 time series data。在此請把 window size 與 window increase 分別設為 1000, 50ms,Frequency 會自動帶入 wio terminal Arduino 碼設定中所的頻率 (40Hz),這里就不用動。

a044c95c-7473-11ed-8abf-dac502259ad0.png

點選 [Add a processing block] ,選單中選擇 Raw data,就會新增這個block。

請在其中選擇 Input axes 也就是所要處理的數據,在此只有一筆,就是 light。不同型態的數據可能會用到更多 processing block,之后再慢慢說明。

a0779ada-7473-11ed-8abf-dac502259ad0.png

接著點選 [Add a learningblock] ,選單中選擇 Classification (Keras),就會新增這個 block。fafa Input feature 選擇 Raw data,輸出會自動帶出 2 (paper,rock) 也就是 data acquisition 時所設定的 label 名稱。

a0b5acc6-7473-11ed-8abf-dac502259ad0.png

本區設定完成如下圖,最后點選 Save Impulse 就完成了。

a0d86ba8-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 原始數據產生特征

左側– impulse design / Raw data

在此要針對原始數據產生特征,先看到 Parameters 卷標,到時候要把 Raw feature 這一段復制到最后匯出的 arduino sketch 才能順利執行推論。

a10d9b3e-7473-11ed-8abf-dac502259ad0.png

接著按下 Generate features 標簽,跑完會看到如右圖的數據特征分布,這一段就完成了。

a13a70e6-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 訓練模型

左側– impulse design / NNclassifier

本段要設定神經網絡架構,可以自己定義神經網絡架構,在此我新增了兩個 Dense 密集連接層,分別使用 20, 10 個神經元,相當小巧。另外兩個參數如下設定:

?Number of training cycles: 看過一遍所有數據稱為一次,在此設定 500

?Learning rate: 神經網絡收斂的速度,這個數值通常非常小,在此設定 0.0001

a1673edc-7473-11ed-8abf-dac502259ad0.png

當然功能不止這樣啦,點選 [Add an extra layer],可以看到以下 keras 層,要加入卷積層也是可以的,別急,之后都可以玩玩看的。

a19c636e-7473-11ed-8abf-dac502259ad0.png

設定好架構之后,點選下方的 [Start training] 就會開始訓練,過程中沒有寫一行程序代碼,真的很方便!右側可以看到訓練過程中的輸出訊息。

a1e4a08e-7473-11ed-8abf-dac502259ad0.png

第一次訓練完的 accuracy / loss 只有 75%, 0.65,差強人意

a20ed1c4-7473-11ed-8abf-dac502259ad0.png

我又上傳了一些手勢數據,用同樣的架構再跑一次,accuracy 就到 100%了!當然 loss 0.62 很高啦,不過這之后可以慢慢調,先繼續下去吧

a23d81f4-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 測試神經網絡模型成效

網站左側,選擇Live Classification

先不急著匯出,先上傳一筆數據玩玩看,可以上傳懸心數據,或是從既有數據來看看

左下角可以看到 PAPERS 0.52, ROCK 0.48,這當然不是一個很好的結果,就需要回頭去調整數據,或是修正更好的神經網絡架構

a26d5654-7473-11ed-8abf-dac502259ad0.png

Edge Impulse – 導出神經網絡模型

網站左側,選擇 Deployment

會列出目前可匯出的平臺,請點選 Arduino,另外也可以看到 NVIDIA tensorRT,各種選項愈來愈完整,非常棒。

a2c2466e-7473-11ed-8abf-dac502259ad0.png

同一個頁面往下拉,使用預設設定 Quantized (int8),接著選擇 Build。

a2ee3bb6-7473-11ed-8abf-dac502259ad0.png

看到這張圖就沒問題了, .zip 檔不用解壓縮,等等直接匯入 Arduino IDE 即可。

a3419b30-7473-11ed-8abf-dac502259ad0.png

Arduino 匯入之后開始使用

開啟 Arduino IDE,選擇 Sketch → Include Library → Add .ZIP library 匯入上一步取得的 .zip

a365cb36-7473-11ed-8abf-dac502259ad0.png

完成之后就可以在File 選到這個范例,請開啟其中的 static buffer

a37b9b50-7473-11ed-8abf-dac502259ad0.png

請到 Edge Impulse 網站,選擇 Impusle design / Raw data,復制 Raw features 到您的樣板項目中,有一個復制符號可以直接按,這里的數據數量就會等于 Frequency,以本范例來說就是 40。

a3afb804-7473-11ed-8abf-dac502259ad0.png

貼到您的 Arduino 范例中的 features[] 數組中,這樣就可以了。

a3e80ed4-7473-11ed-8abf-dac502259ad0.png

接著上傳程序到 wio termnial ,就可以從 serial monitor 看到每一次的推論結果,happy making!!

a40e19b2-7473-11ed-8abf-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2562

    文章

    52524

    瀏覽量

    763532
  • 開發板
    +關注

    關注

    25

    文章

    5499

    瀏覽量

    102134
  • Arduino
    +關注

    關注

    188

    文章

    6490

    瀏覽量

    190072
  • TinyML
    +關注

    關注

    0

    文章

    43

    瀏覽量

    1471

原文標題:【tinyML】使用 EdgeImpulse 讓您的 Arduino 可以辨識手勢!

文章出處:【微信號:易心Microbit編程,微信公眾號:易心Microbit編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    什么是TinyML?微型機器學習

    神經網絡實例的可視化。另一方面,TinyML 可以被定義為機器學習的一個子領域,該領域致力于在資源和能力受限的設備上實現機器學習應用程序。TinyML 的目標是以一種極端的方式將機器學習帶到邊緣,電池供電
    發表于 04-12 10:20

    基于Arduino創建一個手勢控制車

    描述如何制作手勢控制機器人|| #MadeWithArduino(發射器)嘿,歡迎回到一個新項目。所以今天我們將學習使用Arduino創建一個手勢控制車。這里我將分享項目發射器部分的詳細教程,我還分
    發表于 06-22 06:55

    arduino手勢控制小車

    描述arduino手勢控制車
    發表于 08-09 06:51

    基于arduino設計的手勢控制小車

    基于arduino手勢控制小車
    發表于 09-25 06:06

    使用Arduino和PAJ7620手勢傳感器制作手勢控制機器人

    使用Arduino和PAJ7620手勢傳感器制作手勢控制機器人,簡單程序即可實現。小小的傳感器可以識別各種手勢。它采用內置的空間傳感器,
    發表于 09-27 06:17

    arduino手勢控制車

    電子發燒友網站提供《arduino手勢控制車.zip》資料免費下載
    發表于 07-26 10:29 ?1次下載
    <b class='flag-5'>arduino</b><b class='flag-5'>手勢</b>控制車

    手勢識別:用于8位微控制器的TinyML

    電子發燒友網站提供《手勢識別:用于8位微控制器的TinyML.zip》資料免費下載
    發表于 10-24 10:52 ?4次下載
    <b class='flag-5'>手勢</b>識別:用于8位微控制器的<b class='flag-5'>TinyML</b>

    使用TinyMLArduino Nano 33 BLE計算閱讀時間

    電子發燒友網站提供《使用TinyMLArduino Nano 33 BLE計算閱讀時間.zip》資料免費下載
    發表于 10-28 16:50 ?1次下載
    使用<b class='flag-5'>TinyML</b>和<b class='flag-5'>Arduino</b> Nano 33 BLE計算閱讀時間

    使用Open cv python(手勢)和arduino控制Led

    電子發燒友網站提供《使用Open cv python(手勢)和arduino控制Led.zip》資料免費下載
    發表于 10-28 10:19 ?6次下載
    使用Open cv python(<b class='flag-5'>手勢</b>)和<b class='flag-5'>arduino</b>控制Led

    帶有EdgeImpulse的基于視覺的手勢控制無人機

    電子發燒友網站提供《帶有EdgeImpulse的基于視覺的手勢控制無人機.zip》資料免費下載
    發表于 11-14 10:47 ?0次下載
    帶有<b class='flag-5'>EdgeImpulse</b>的基于視覺的<b class='flag-5'>手勢</b>控制無人機

    什么是TinyML?它可以(也不能)用于什么?

    FPGA一直以低功耗、可重構的特點在各個領域內應用,同時也可以大大增加物聯網應用環境,所以在FPGA上應用TinyML是否是FPGA方便的最佳應用?我們接下來分析一下TinyML的特點再來總結。
    的頭像 發表于 11-28 10:25 ?7982次閱讀

    Arduino手勢手套

    電子發燒友網站提供《Arduino手勢手套.zip》資料免費下載
    發表于 12-21 14:17 ?1次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>手勢</b>手套

    基于Arduino UNO的手勢控制伺服電機

    電機旋轉 180 度。通過跟蹤,伺服器只會在食指抬起而其他手指保持閉合時才會轉動。這可以在具有多個伺服器的許多項目中實現,但在這種情況下,我們堅持使用一個伺服器。伺服電機伺服是一種只能旋轉180度的減速電機。它是通過從Arduin
    發表于 12-21 11:26 ?0次下載

    Arduino手勢控制LED亮度

    電子發燒友網站提供《Arduino手勢控制LED亮度.zip》資料免費下載
    發表于 01-31 14:47 ?2次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>手勢</b>控制LED亮度

    使用Esp32和TinyML進行手勢分類

    電子發燒友網站提供《使用Esp32和TinyML進行手勢分類.zip》資料免費下載
    發表于 06-15 11:43 ?2次下載
    使用Esp32和<b class='flag-5'>TinyML</b>進行<b class='flag-5'>手勢</b>分類