基于mindwave脑电波进行疲劳检测算法的设计(2)
上文讲到的是保证硬件的接通。接下来是用C语言在它提供的API接口进行连接。
在网盘中下载MindSet Development Tools这个开发包。这个目录下MindSet Development Tools\ThinkGear Communications Driver\win32有一些文件是要用到的。
我采用的MinGW这个库。这个库的好处是绿色版,一般情况下在没有开发环境的电脑,都可以运行。(我们都知道一个VS安装要一个多小时)。MinGW各个开发库基本没有版本要求。好了我们先在MinGW这个目录下创建一个ThinkGear目录,这个目录跟bin目录是同级的。然后进入ThinkGear目录复制上面提到的win32目录下的thinkgear_testapp.c thinkgear.h和thinkgear.dll,然后还要复制thinkgear.dll文件到MinGW\bin目录用作动态库。现在文件就都准备好了,现在我们先写一个Makefile。
LDFLAGS= -L ..\bin
LIBS= -lthinkgear
main:thinkgear.h thinkgear_testapp.c
gcc $(LDFLAGS) $(LIBS) thinkgear_testapp.c -o main.exe
然后命令行执行make , main.exe执行程序
现在目录下的文件有
\ThinkGear
main.exe makefile thinkgear.dll thinkgear.h thinkgear_testapp.c
下面将对源代码进行部分注解
#include <stdlib.h>
#include <stdio.h> #include "thinkgear.h" void wait()
{
printf( "\n" );
printf( "Press the ENTER key...\n" );
fflush( stdout );
getc( stdin );
} /**
* Program which prints ThinkGear EEG_POWERS values to stdout.
*/
int main( void ) { char *comPortName = NULL;
int dllVersion = ; //动态库版本
int connectionId = ;//连接ID
int packetsRead = ; //包数量
int errCode = ; //错误码 /* Print driver version number */
dllVersion = TG_GetDriverVersion();
printf( "ThinkGear DLL version: %d\n", dllVersion ); //打印当前动态库版本 /* Get a connection ID handle to ThinkGear */
connectionId = TG_GetNewConnectionId(); //获取连接ID 跟文件描述符类似的功能
if( connectionId < ) {
fprintf( stderr, "ERROR: TG_GetNewConnectionId() returned %d.\n",
connectionId );
wait();
exit( EXIT_FAILURE );
} /* Set/open stream (raw bytes) log file for connection */
// 原始数据日志 用于高级分析
errCode = TG_SetStreamLog( connectionId, "streamLog.txt" );
if( errCode < ) {
fprintf( stderr, "ERROR: TG_SetStreamLog() returned %d.\n", errCode );
wait();
exit( EXIT_FAILURE );
} /* Set/open data (ThinkGear values) log file for connection */
//ThinkGear数据日志 一种动态库已经封装好的数据
errCode = TG_SetDataLog( connectionId, "dataLog.txt" );
if( errCode < ) {
fprintf( stderr, "ERROR: TG_SetDataLog() returned %d.\n", errCode );
wait();
exit( EXIT_FAILURE );
} /* Attempt to connect the connection ID handle to serial port "COM5" */
comPortName = "\\\\.\\COM3"; //这个是要连接的COM端口 这个在那个计算机管理工具里面看 里面的COM端口多少这里就多少
errCode = TG_Connect( connectionId,
comPortName,
TG_BAUD_9600,
TG_STREAM_PACKETS );
if( errCode < ) {
fprintf( stderr, "ERROR: TG_Connect() returned %d.\n", errCode );
wait();
exit( EXIT_FAILURE );
} if( ==TG_EnableBlinkDetection(connectionId,)) //启动眨眼检测
{
printf("Success enable blink\n");
} /* 不停的读取数据 */
packetsRead = ;
while()
{
/* 读一个报文 */
errCode = TG_ReadPackets( connectionId, );
/* 如果这个报文读取成功 */
if( errCode == )
{
int att, det, sig;
if(( errCode = TG_GetValueStatus(connectionId, TG_DATA_ATTENTION)) != )
{
att = TG_GetValue(connectionId, TG_DATA_ATTENTION) ;
det = TG_GetValue(connectionId, TG_DATA_MEDITATION);
sig = TG_GetValue(connectionId, TG_DATA_POOR_SIGNAL);
printf("attentin = %d, meditation=%d, signal=%d\n", att, det, sig);
}
}
else
{
printf("ReadPackets:errcode=%d\n", errCode);
}
}
//关闭连接
TG_FreeConnection( connectionId );
wait();
return( EXIT_SUCCESS );
}
先编译连接,运行一下这个程序,至此软硬件的环境都弄好了。剩下的就是算法设计了。
========================我是分割线=========================
接下来的一段时间我都会更新关于这个基于脑电波疲劳检测的博客,在看博客的你,如果有更好的检测算法,可以在评论下给出一些想法。并能给出一定的实现思路。我现在的想法是在它提供的那几个波段(上面提到的)中对强度进行判断。然后还有一个就是统计几个波段,然后计算对应的方差。还有就是通过里面有一个判断眨眼的函数来判断眨眼。我们可以根据眨眼的时间差来判断。不过不同的人眨眼的时间是不同的。所以还有让系统先预处理一下,保存当前这个人的眨眼时间差。现在我就想到了这些。具体怎么做还有一段时间。
===========================================================
参考资料:
http://www.neurosky.com.cn/news_ny.aspx?NewsID=58
基于mindwave脑电波进行疲劳检测算法的设计(2)的更多相关文章
- 基于mindwave脑电波进行疲劳检测算法的设计(5)
		
时隔两个多月了,前段时间在弄Socket,就没有弄这个了.现在好了,花了几天的时间,终于又完成了一小部分了.这一小节主要讲α,β,δ,θ等等波段之间的关系.废话不多说,直接给出这几天的成果. 上一次, ...
 - 基于mindwave脑电波进行疲劳检测算法的设计(1)
		
一.简介 脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测.人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释 (1 ...
 - 基于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)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
 
随机推荐
- 6-2 铁轨 uva 514
			
较为简单的stack题目 但是还是犯了一些错误: 1. 要想清空栈,直接重新定义较为方便! 2.在if(s.top()==x)时 加上 !s.empty() 否则程序会崩溃 3. 必须要加上i- ...
 - Unity 之 中文乱码
			
更改 C#脚本的编码格式: 文件 -> 高级保存选项 -> Unicode
 - 版本控制系统 git 之基础讲解
			
很久之前就用起了git,但都是用在从github上clone项目上,或者hexo的博客提交上,直到前段时间加入了学校的技术中心,需要用git进行文件管理,才去了解了下git的具体使用方式. 什么是gi ...
 - win10 修改 无线名 无线网络属性 名称 修改
			
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha win10 修改 管理无线网络 无线网络属性 名称 修改 注册表 修改 ======== ...
 - android studio java工程 报错
			
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com android studio java工程 ...
 - Nowcoder 提高 Day1
			
比赛链接 A 中位数(前缀和 二分) 额,确实没想到逼近... 然后写了n^2log的暴力,还CE了 只需要判断是否能有大于当前mid的中位数就好 这显然是可以二分的 代码 #include<b ...
 - LOJ.6284.数列分块入门8(分块)
			
题目链接 \(Description\) 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c. \(Solution\) 模拟一些数据可以发现,询问后 ...
 - PHP文本处理 中文汉字字符串 转换为数组
			
在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen — 获取字符串的长度 functi ...
 - Java并发程序设计(五)JDK并发包之线程复用:线程池
			
线程复用:线程池 一.为什么需要线程池 为了避免系统频繁地创建和销毁线程,使用线程池让线程进行复用.(即创建线程变成了从线程池中获取空闲线程,销毁线程变成了把线程放回线程池中.) 二.JDK对线程池的 ...
 - Pycharm中实现多个项目共存的方式
			
一.背景 在Python学习中,使用pycharm只能打开一个项目,如果想在一个pycharm中同时打开多个项目,该怎么办呢?由于学习中遇到需要打开多个项目,所以就百度查询了一下方法. 二.解决办法 ...