天天看點

bp神經網絡數字識别matlab_【微信小程式+BP神經網絡】實作HIIT動作離線識别計數...

項目來源于我們的“實驗設計與統計基礎”課程的大作業。

主要實作目的是

用微信小程式實作至少四個HIIT動作的識别和計數

話不多少,先

奉上視訊

(視訊裡已經包括了

如何使用以及整個的實作過程

,如果看完之後還想了解詳細内容可以繼續看下面的文字)

知乎視訊​www.zhihu.com

bp神經網絡數字識别matlab_【微信小程式+BP神經網絡】實作HIIT動作離線識别計數...

----------------------------------------分割線------------------------------------------------

項目是從零開始的,也就是說預先我們沒有資料(

資料是自己用微信小程式進行采集

的)。

本項目功能:

用微信小程式實作HIIT動作(深蹲、開合跳、高擡腿、滑雪跳)的識别與計數,可将資料存儲進雲資料庫。

具體使用方法:
  • 進入小程式。點選“姿态識别”,進入“個人資訊填寫”頁面,測試者可以填寫姓名、年齡、身高、體重、測試環境等資訊,以便于更好地在資料庫中進行記錄。
  • 資訊填寫完畢後,進入“姿态識别”界面。
  • 點選“開始識别”按鈕後,開始進行姿态識别。說明:點選“開始識别”按鈕後,會聽到一段提示音——“3,12,1開始”提示音結束後開始做動作,一直做到聽到語音播報,之後再進行下一個動作。
  • 30s 時間到後,會響起“時間到,識别結束”提示音,此時識别結束。界面顯示每個動作的個數。
  • 點選“存儲資料”,會将個人填寫的資訊以及識别的動作及個數存入資料庫對應的集合——“accelerometer”中。
整個項目分三部分: 資料采集

:使用手機三軸傳感器;

模型搭建

:以BP神經網絡為基礎,使用python進行訓練,最終訓練準确率為97%;

微信小程式實作

:JS重寫模型結構,實作HIIT動作的離線識别。

一、資料收集

利用微信小程式,使用手機自帶的加速度傳感器,采集10s 動作資料,每個動作重複采集50次。

小程式的資料采集頁面:squat、jumpingJack、highStep、skiJump

1.小程式使用方法

  • 點選“開始讀取”,程式開始計時,進度條進入10s 程序。使用者開始重複做對應的動作。
  • 10s 時間到時,手機會發出“滴滴——”聲進行提示。
  • 點選“存儲資料”,對應動作10s 内采集的資料會被存入對應名稱的collection裡面。

2.JS頁面代碼講解

四個采集頁面的代碼類似,下面以 squat 頁面為例進行介紹。

1)調用手機的加速度傳感器

//在 onload 函數裡 打開加速度傳感器監聽
           

2)存儲采集的資料到雲資料庫

//配置雲資料庫以及存儲到的collection
           

3)“時間到”聲音的配置

//配置音頻
           

二、資料處理與模型訓練

将存儲進雲資料庫的四個動作的資料導出為“csv”格式檔案。使用python進行資料處理和模型訓練。

1.資料處理

1)資料預處理思路

參考文獻:

[WISDM:Cell Phone-Based Biometric Identification]​www.cis.fordham.edu

基于原始加速度計讀數,總共生成了40個次元的feature。下面介紹這40個要素,并在方括号中注明了每種要素類型生成的要素數量:

  • 平均值[3] :平均加速度值(每個軸)
  • 标準偏差[3] :标準偏差(每個軸)
  • 平均絕對差[3] :在200個讀數中,每個絕對值之間的平均絕對差 ED和這200個值的平均值(每個軸)
  • 平均結果加速度[1] :ED的每個軸上值的平方和的平方根為√(xi2 + yi2 + zi2 )
  • Bined Distribution [30] :我們确定每個軸的值範圍(最大-最小),除以将該範圍分為10個大小相等的容器,然後記錄落入每個容器中的200個值的分數。

2)資料預處理部分的python代碼講解

①導入必要的包

#導入必要的包
           

②加載csv資料,并将每行的資料轉化為一個數組

# Load a CSV file
           

③将資料轉化為40個feature

#平均值
           

③将資料進行處理,轉化為40個feature,并存儲為一個新的csv檔案

output 
           

2.模型訓練

使用BP神經網絡對模型進行訓練,目的是輸出訓練好的神經網絡,

可以直接用在小程式“姿态識别”界面的的JS頁面中,當做一個參數來做離線識别。

1)資料标準化

①導入必要的包

import 
           

②加載CSV檔案,并将資料轉化成浮點數,标簽值轉化為整數

# Load a CSV file
           

③擷取每一維資料的最大最小值,進行資料的标準化處理,将标準化後的資料存儲為一個新的CSV檔案

注:每一維資料的最大最小值需要存儲下來,以便于後期可以直接用在小程式“姿态識别”界面的的JS頁面中,當做一個參數來對實時收集的三軸加速度進行标準化處理。
# Find the min and max values for each column
           

④運作程式

# Test Backprop on Seeds dataset
           
得到的最大最小值集合(minmax_set)為:
minmax_set
           

2)BP神經網絡 模型訓練

①導入必要的包

import 
           

②模型訓練

# Initialize a network
           
學習率為0.05,循環500次,選取隐藏層14個進行訓練

error下降至:0.060

bp神經網絡數字識别matlab_【微信小程式+BP神經網絡】實作HIIT動作離線識别計數...

network為:

network
           

③模型準确率驗證

采用十倍交叉驗證法對該模型的準确率進行驗證,可以看到效果是非常好的。

bp神經網絡數字識别matlab_【微信小程式+BP神經網絡】實作HIIT動作離線識别計數...

三、小程式實作動作識别與計數

利用微信小程式,使用手機自帶的加速度傳感器,在30s 内随機做上述四個動作,小程式會自動進行識别并進行識别動作的語音播報;30s 結束後,小程式頁面顯示每個動作的個數,并可以将資料存入雲資料庫。

小程式的姿态識别頁面:recog

1.小程式使用方法

  • 點選“姿态識别”,進入“個人資訊填寫”頁面,測試者可以填寫姓名、年齡、身高、體重、測試環境等資訊,以便于更好地在資料庫中進行記錄。
  • 資訊填寫完畢後,進入“姿态識别”界面。
  • 點選“開始識别”按鈕後,開始進行姿态識别。

說明:

點選“開始識别”按鈕後,會聽到一段提示音——“3,12,1開始”

提示音結束後開始做動作,一直做到聽到語音播報,之後再進行下一個動作。

  • 30s 時間到後,會響起“時間到,識别結束”提示音,此時識别結束。界面顯示每個動作的個數。
  • 點選“存儲資料”,會将個人填寫的資訊以及識别的動作及個數存入資料庫“accelerometer”中。

2.JS頁面代碼講解

1)資料準備

放入預先在python中訓練得到的 minmax_set 和 network

2)手機三軸加速度計的調用

打開和停止加速度傳感器監聽代碼 同上。

//設定一個定時器,每6s打開一次加速度計的監聽
           

3)提示音配置

同上。

4)動作識别——Judgement、Try、Predict函數

主要思路為将python模型訓練中的“資料标準化”部分代碼進行JS重寫,使其能在小程式中直接運作。

Judgement
           

5)動作計數——count函數

采用差分法選擇峰值,利用峰值進行動作計數。

//傳入參數(原始的三軸加速度資料)
           

整體的介紹就這麼多,主要的實作代碼也都在上面列出。

附上github連結:https://github.com/Liu-Rundi-SDUWH/HIIT_HAR

請大家不吝賜教。

繼續閱讀