基于mindwave脑电波进行疲劳检测算法的设计(5)
时隔两个多月了,前段时间在弄Socket,就没有弄这个了。现在好了,花了几天的时间,终于又完成了一小部分了。这一小节主要讲α,β,δ,θ等等波段之间的关系。废话不多说,直接给出这几天的成果。
上一次,我们分析了attention(专注度)和meditation(冥想度)与疲劳之间的关系。如下图
上面的曲线上一小节已经简单说明了,现在要说明的是曲线的前半部分是普通测试,后面一小段两对线有点分离的部分是模拟闭眼休息状态,全身放轻松。从图中可以看出是否精神集中从专注度和冥想度是可以简单的看出来了。
接下来就是那另外的波段了。这里只列举有影响的几个波段组合。
alpha/beta
low-alpha/theta
alpha% (alpha波段占全部波段的百分比)
attention/meditation
我们以第一个alpha/beta为例,我们可以看出里面有一些点是噪点。差不多就是在601处。我们去除大于20的点,结果得到下面的图。
现在这样就差不多了,对上面的其他两个都进行这样的处理,除噪后。得到的这样的图像,这种图像是不是以前见过呢?没错就是在第四小节,那一节已经讲了怎么处理了,这个还是使用同样的办法进行处理。就会得到一条曲线。得到曲线后我们可以分析上面提供的关系图像。在这里说明一下,上面的所有图像都是采用同一组测试数据进行绘图的。都可以看出在570秒处,所有的数值都会有一点点的上升趋势。而在那段上升的时间刚好是我们处于休息放松的状态呢!
从这几个波段关系还有专注度冥想度都分析完了,接下来就是从这些数据得到一个具体的疲劳值。下面这些都是自己定义的。可能根据不同的硬件获取到的比值会有些许的不一样。具体应用还要修改一些参数。我的硬件得到的数据参数是如下:
double FatigueDetection::FD_getValue()
{
//经测试 alpha% low-a/theta low-a/beta 的取值区间为0~100 0:清醒 100:疲劳 20:一般
//meditation/attention 的取值大约在 0.6~1.8之间 0.6表示清醒
//meditation冥想度越高表示越疲劳
//attention专注度越高表示越专注,越清醒
double result=0.0;
result=(avg.alpha+avg.alphatheta+avg.alphabeta)/*(((avg.meddivatt-)/)+);
fatiguevalue=result;
return result;
}
什么的那个公式没有什么具体的含义,就是简单的加权求值而已。最后得到的疲劳值画图如下:
我们可以看到我使用的硬件产生后的数值都落在中间一部分,区分度不是很大,我这里想到的解决方案是采用图像处理中增强对比度的指数变换的方法来增强数值的区分度。
还有另外的一个方法是使用KNN算法。大概的思路是采用上面提到的几个指标来进行分类显示的。(这两个处理办法不知道下次是什么时候讲解了)
这几天还对以前的代码进行封装,成为一个类,方便调用。
class FatigueDetection
{
public:
FatigueDetection(int vsize);
void FD_setValue(int at,int me,int de,int th,int al1,int al2,int be1,int be2,int ga1,int ga2);
void FD_setValue(struct FD_DATA);
void FD_setValue(int array[]);
void FD_ActiveWindow(struct FD_DATA data);
void FD_Compensation(struct FD_DATA data);
void FD_Pretreatment(struct FD_DATA data);//预处理
void FD_PrintDebugMessage(FILE * fd);
//int FD_KNN();//对几个指标进行KNN处理
//如果getvalue的值的曲线分布过于集中的话,可以使用图像处理中的增强对比度方法
double FD_getValue();//返回一个0-100的整数
private:
struct FD_DATA_DO avg;//用于滑动窗口
struct FD_DATA_DO sum;//用于滑动窗口
double attention;
double meditation;
int size;//滑动窗口的长度,也即个数
int window;//当前可用的滑动窗口个数
vector<struct FD_DATA_DO> vdatado;
int id;//表示已经处理数据的总个数
double fatiguevalue;//最后得到的疲劳值
};
不知道以前有没有说过,我这个算法目前是想解决这样的一个问题---检测驾驶员的疲劳状态,我们知道驾驶员有时候会疲劳驾驶,而这样是极其危险的。而我们又不能清楚的知道该人是否是疲劳的。当然连续的打哈欠我们是知道的。而脑电波这种数据是很难自己控制的。所以用来检测驾驶员是否疲劳还是很有用的。但处于疲劳时可以给出提醒。我现在在做的这个是有其他人负责android端的。然后使用者是带着前面给出的那种耳机。通过蓝牙发送信息,一旦检测到疲劳,根据不同的程度,手机给出不同的提示。我做的这个是一方面,如果加个现在流行的什么智能手环。得到心跳血压等等其他的生理特征的数据,然后加以分析,计算疲劳值,多个指标进行互补,提高准确性。我觉得对于预防疲劳驾驶而导致的危害有很大的帮助。
本文地址:http://www.cnblogs.com/wunaozai/p/3923649.html
各小节传送门:
基于mindwave脑电波进行疲劳检测算法的设计(1)
http://www.cnblogs.com/wunaozai/p/3677501.html
基于mindwave脑电波进行疲劳检测算法的设计(2)
http://www.cnblogs.com/wunaozai/p/3677554.html
基于mindwave脑电波进行疲劳检测算法的设计(3)
http://www.cnblogs.com/wunaozai/p/3678125.html
基于mindwave脑电波进行疲劳检测算法的设计(4)
http://www.cnblogs.com/wunaozai/p/3766779.html
基于mindwave脑电波进行疲劳检测算法的设计(5)
http://www.cnblogs.com/wunaozai/p/3923649.html
基于mindwave脑电波进行疲劳检测算法的设计(5)的更多相关文章
- 基于mindwave脑电波进行疲劳检测算法的设计(1)
一.简介 脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测.人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释 (1 ...
- 基于mindwave脑电波进行疲劳检测算法的设计(2)
上文讲到的是保证硬件的接通.接下来是用C语言在它提供的API接口进行连接. 在网盘中下载MindSet Development Tools这个开发包.这个目录下MindSet Development ...
- 基于mindwave脑电波进行疲劳检测算法的设计(4)
上一次的实验做到可以从pc端读取到MindWave传输过来的脑电波原始数据了. 我是先定义一个结构体,该结构体对应保存所有能从硬件中取到的原始数据. struct FD_DATA { int batt ...
- 基于mindwave脑电波进行疲劳检测算法的设计(3)
这一节我将讲解thinkgear.h 里面的函数和宏定义.这一些都可以在MindSet Development Tools\ThinkGear Communications Driver\docs\h ...
- 基于深度学习的目标检测算法:SSD——常见的目标检测算法
from:https://blog.csdn.net/u013989576/article/details/73439202 问题引入: 目前,常见的目标检测算法,如Faster R-CNN,存在着速 ...
- 基于Shading Model(对光照变化一定不变性)的运动目标检测算法
光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...
- 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN
参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...
- 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法
光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...
- 【计算机视觉】基于样本一致性的背景减除运动目标检测算法(SACON)
SACON(SAmple CONsensus)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
随机推荐
- 036 关于网站的UV分析
一:准备 1.统计的维度 guid tracktime provice 2.key与value的设定 key:date+provice_guid value:NullWritable 3.案例分析 表 ...
- 032 HDFS中高可用性HA的讲解
HDFS Using QJM HA使用的是分布式的日志管理方式 一:概述 1.背景 如果namenode出现问题,整个HDFS集群将不能使用. 是不是可以有两个namenode呢 一个为对外服务-&g ...
- html5 选择多张图片在页面内预览并上传到后台
版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/huangxin112/article/details/74956462 需求:点击选择图片(可选多张) ...
- Python - 经典程序示例
列表排序 def que6(): # 6.输入三个整数x, y, z,形成一个列表,请把这n个数由小到大输出. # 程序分析:列表有sort方法,所以把他们组成列表即可. li = np.random ...
- P2246 SAC#1 - Hello World(升级版)
P2246 SAC#1 - Hello World(升级版)典型的字符串dpf[i][j]表示a串匹配到i,b串匹配到j的方案数.if(a[i]==b[j])f[i][j]=f[i-1][j-1]+f ...
- 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)
提示:文章最下方有仓库地址 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒.因此为了保证连接的可持续性和稳定性,websocket ...
- js实现移动端图片预览:手势缩放, 手势拖动,双击放大...
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- js时间戳转换时间、距当前时间
// 1.时间戳转化成时间格式 function getTime(times) { return new Date(parseInt(times) * 1000).toLocaleString().r ...
- C# VideoAPI
using System; using System.Runtime.InteropServices; public class VideoAPI //视频API类 { // 视频API调用 [Dll ...
- ARM总线架构
S3C2440集成了丰富了外设控制器(LCD控制器.USB Device控制器.USB Host控制器.NAND FLASH控制器.I2C控制器.SPI控制器等).要控制这些外设就要设置相应控制器的寄 ...