基于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)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
随机推荐
- 052 自动将每日的日志增量导入到hive中
一:大纲介绍 1.导入方式 load data local inpath 'local_file_path' into table tbname partition (date='',hour='') ...
- 自适应阈值二值化之最大类间方差法(大津法,OTSU)
最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间 ...
- windows下端口映射(端口转发)
windows下端口映射(端口转发) 转载: https://blog.csdn.net/i1j2k3/article/details/70228043 本文是对网文的归纳整理,算不上原创,摸索过程亲 ...
- HDU 2639 骨头收集者 II【01背包 】+【第K优决策】
题目链接:https://vjudge.net/contest/103424#problem/H 题目大意:与01背包模板题类似,只不过要我们求第K个最大的总价值. 解题分析: 其基本思想是将每个状态 ...
- 理解 static (深入了解JAVA虚拟机)
谈谈我对static的理解 因为我发现很多同学学到这里都会很困惑 很难理解static到底是个什么 首先 static是个修饰符 被static修饰的变量我们统称为静态变量也叫类变量(为什么叫类变量呢 ...
- struts2动态跳转action,修改和添加共用一个页面
<s:form action="role_%{ id == null ? 'add' : 'edit' }"> <s:hidden name="id&q ...
- php中14中排序方式的实现
<?php if (PHP_SAPI == 'cli') { define('EOL', PHP_EOL); define('T', "\t" ...
- Cocos Creator 的实现拖尾效果
在游戏中,有时会需要在某个游戏对象上加上移动后的轨迹若隐若现的效果.使得游戏的效果较好,比如游戏大招,刀光,法术,流星划痕之类. Cocos Creator提供了一种内置的拖尾渐隐效果的实现方法:组件 ...
- Codeforces Round #408 (Div. 2) 题解【ABCDE】
A - Buying A House 题意:给你n个房间,妹子住在第m个房间,你有k块钱,你想买一个离妹子最近的房间.其中相邻的房间之间距离为10,a[i]=0表示已经被别人买了. 题解:扫一遍更新答 ...
- mongodb通过profile来监控数据
mongodb可以通过profile来监控数据,进行优化.查看当前是否开启profile功能用命令db.getProfilingLevel() 返回level等级,值为0|1|2,分别代表意思:0代表 ...