基于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)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
随机推荐
- 【Java】 剑指offer(1) 找出数组中重复的数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字 ...
- PopupWindow下拉列表
效果图 步骤: 1.画出编辑框的布局.popupWindow的布局.popupWindow中listview每行的布局 2.new一个PopupWindow对象,设置其属性 3.定义一个BaseAda ...
- Java设计模式从精通到入门一 责任链模式
一直都想对设计模式有一个深刻的认识,这样对于阅读源码的时候就不会那么吃力了.于是有了想要记录下设计模式的笔记.打算从自己不怎么熟悉的设计模式开始写,里面穿插着一点自己的想法,希望自己写完后,会又一 ...
- web 连接池配置
TOMCAT J2EE项目连接池配置 web 项目的 web.xml <web-app> <resource-ref> <description>DB Connec ...
- C# JSON帮助类(可互转)
public class JsonHelper { public JsonHelper() { // // TODO: Add constructor logic here // } /// < ...
- 洛谷P1144 最短路计数(SPFA)
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
- BZOJ.4553.[HEOI2016&TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)
题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[ ...
- 8.6 正睿暑期集训营 Day3
目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...
- 20172302 《Java软件结构与数据结构》第七周学习总结
2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 教材学习内容总结 第11章 二叉查找树 1.二叉查找树是一种含有附加属性的二叉树,该属性即其左孩子小于父节点,而父 ...
- 命令行方式删除文件 && 文件夹
del File: 删除文件 rmdir Folder : 删除文件夹 [貌似只能删除空目录] rm -rf Folder: 删除非空文件夹 [用windows自带的cmd提示我“rm”不是内部命令 ...