基于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)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
随机推荐
- 添加js,css 版本号?v= hash
node_modules设置 a.打开 node_modules\gulp-rev\index.js 第144行 manifest[originalFile] = revisionedFile; 更新 ...
- 像素鸟 游戏开发教程 FlappyBird Game development tutorial
像素鸟 游戏开发教程 FlappyBird Game development tutorial 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...
- loj#2015. 「SCOI2016」妖怪 凸函数/三分
题目链接 loj#2015. 「SCOI2016」妖怪 题解 对于每一项展开 的到\(atk+\frac{dnf}{b}a + dnf + \frac{atk}{a} b\) 令$T = \frac{ ...
- POJ.3537.Crosses and Crosses(博弈论 Multi-SG)
题目链接 \(Description\) 有一个一行n列的棋盘,每个人每次往上放一个棋子,将三个棋子连在一起的人赢.问是否有必胜策略. \(Solution\) 首先一个人若在\(i\)处放棋子,那么 ...
- BZOJ.3531.旅行(树链剖分 动态开点)
题目链接 无优化版本(170行): /* 首先树剖可以维护树上的链Sum.Max 可以对每个宗教建一棵线段树,那这题就很好做了 不过10^5需要动态开点 (不明白为什么nlogn不需要回收就可以 不是 ...
- 潭州课堂25班:Ph201805201 爬虫基础 第十二课 点触验证码二 (课堂笔记)
为上次代码添加 模拟人操作 的鼠标的移动轨迹 # -*- coding:utf-8 -*- # 斌彬电脑 # @Time : 2018/9/14 0014 上午 8:08 from selenium ...
- 并查集 (Union-Find Sets)及其应用
定义 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.常常在使用中以森林来表示. 集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的 ...
- 配置sonar和jenkins进行代码审查
转自: http://www.cnblogs.com/gao241/p/3190701.html, 版权归原作者所有. 本文以CentOS操作系统为例介绍Sonar的安装配置,以及如何与Jenkin ...
- 状态压缩+矩阵乘法hdu-4332-Constructing Chimney
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4332 题目意思: 用1*1*2的长方体构造一个中间为空的底面3*3的立体烟囱. 解题思路: 实际上就 ...
- 用十条命令在一分钟内检查 Linux 服务器性能
原文地址: http://www.oschina.net/news/69132/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出L ...