bp神经网络数字识别matlab_【微信小程序+BP神经网络】实现HIIT动作离线识别计数...

项目来源于我们的“实验设计与统计基础”课程的大作业。

主要实现目的是用微信小程序实现至少四个HIIT动作的识别和计数

话不多少,先奉上视频

(视频里已经包括了如何使用以及整个的实现过程,如果看完之后还想了解详细内容可以继续看下面的文字)

知乎视频​www.zhihu.com

----------------------------------------分割线------------------------------------------------

项目是从零开始的,也就是说预先我们没有数据(数据是自己用微信小程序进行采集的)。

本项目功能:用微信小程序实现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

c214a6b00161a38eba46e3ac76f191c6.png

network为:

network

③模型准确率验证

采用十倍交叉验证法对该模型的准确率进行验证,可以看到效果是非常好的。

4b15335fb8614b7f57a1a94a10ea2624.png

三、小程序实现动作识别与计数

利用微信小程序,使用手机自带的加速度传感器,在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

请大家不吝赐教。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值