生活指南——让生活变得更简单

人眼跟踪技术_人眼定位算法

课程:

巴士模拟18的Tobii人眼追踪技术是什么意思?

人眼追踪被长期运用于研究个体的视觉注意力,最常用的眼球跟踪技术是瞳孔中心角膜反射技术(pupil centre corneal reflection简称PCCR)。PCCR技术的原理是,通过物理追踪设备的摄像头捕捉,光源对瞳孔照射形成高度可见反射的图像,这些图像将被用于确定光源在角膜和瞳孔中的反射情况,最后通过对角膜、瞳孔反射形成向量夹角与其他几何特征计算,得出人眼注视的方向。

而在Alienware17 R4上使用的是Tobii人眼追踪技术,该技术是PCCR技术的升级版。它包括照明系统、相机、图像检测处理单元等组件,并采用精确的3 D物理模型与凝视映射算法。主要的工作模式是通过传感器来捕捉近红外在眼角膜和瞳孔反射模式和图像,接着运用算法精确估计出人眼在空间的位置与凝视的点,最后反馈到电脑系统中。

图2 Tobii人眼追踪技术的工作模式

三、Tobii人眼追踪技术在Alienware17 R4上的运用

对于普通的电脑而言,当您不进行任何操作时,机器将继续运转较长一段时间后再进入睡眠模式。而在Alienware17 R4上,Tobii眼球追踪设备能够准确地判断您是否在使用电脑并对机器的状态进行一定的调整。

在屏幕方面:当您看向屏幕时,屏幕将保持唤醒的状态,当视线离开屏幕时,屏幕将被关闭。

键盘灯:您注视屏幕时,键盘的灯将被关闭,看向键盘时,所观看键盘灯区域将会被唤醒。

此外,当机器进入睡眠模式时,您可以通过视线注视外星人logo视线唤醒机器的功能。这些功能将更好的保护计算机用户的隐私,同时达到节能减排的效果。

图3 Tobii设置界面(由XXX工程师提供)

最后,您可以通过在设置中选择激活或者关闭这些功能,需要注意的是,在第一次使用该技术时,需要进行校正配置,已达到最佳的使用效果。

人眼追踪是指通过眼球追踪设备,测量人体眼位与目光凝视点的运动的过程,这种新兴的技术能提高我们和电脑的智能交互性在一定程度上提高游戏玩家操作效率、体验以及更多交互体验的提升。

Tobii中使用的是瞳孔中心角膜反射技术(PCCR),其原理是:通过物理追踪设备的摄像头捕捉,光源对瞳孔照射形成高度可见反射的图像,这些图像将被用于确定光源在角膜和瞳孔中的反射情况,最后通过对角膜、瞳孔反射形成向量夹角与其它几何特征计算,得出人眼注视的方向。

Tobii是目前知名人眼追踪相关技术的公司,本文中,我们通过戴尔最新的Alienware 17来进行体验,Tobii装置位于该机屏幕下方区域,其表面有黑色透明材质覆盖,不影响整体美观。

在Alienware17上使用Tobii人眼追踪技术是上述PCCR技术的升级版,它包括照明系统、相机、图像检测处理单元等组件,并采用精确的3D物理模型与凝视映射算法进行推算。

人眼追踪在游戏中的体现

Tobii Eye Tracking应用程序

Tobii视线追踪演示

前边介绍了这么多,那么Tobii眼球追踪技术应用在游戏中能带来哪些好处呢?经过总结,笔者认为Tobii眼球追踪装置的优势在游戏中主要体现在以下几个方面:

1,自由视角转动

在游戏过程中Tobii会追踪你眼球的运动轨迹方位,根据识别你视线焦点在屏幕中方位,从而实现游戏内对应方向的旋转,在3D游戏中尤为适用,省去了挪动鼠标的步骤。

目光追踪视角转动演示

但是,经过实际体验后笔者认为这个功能并不能代替鼠标进行操作,因为如果眼球在屏幕的四周进行晃动没一会儿眼睛就会很累,而且通过此方式显现眼球转动速度较慢,远没有鼠标移动来的更彻底,在键鼠操作中并没有很好的体验,比较适合通过手柄玩游戏小范围的视角调整。

2,目标辅助锁定

快速切换武器库演示

目光辅助投掷演示

目标辅助射击演示

在部分操作步骤较为繁琐的游戏中,Tobii还会根据你目光锁定的区域自动进行瞄准、射击、寻找掩护等复杂性的操作,简化了游戏操控步骤,使整个游戏的交互体验更为出色。

如何用OPENCV和VC实现人眼识别功能?

给你个代码,人眼睛识别:

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

#include stdio.h

#ifdef _EiC

#define WIN32

#endif

static CvMemStorage* storage = 0;

static CvHaarClassifierCascade* cascade = 0;

void detect_and_draw( IplImage* image );

const char* cascade_name =

"haarcascade_eye.xml";//人脸检测分类器

int main( int argc, char** argv )

{

CvCapture* capture = 0;

IplImage *frame, *frame_copy = 0;

int optlen = strlen("--cascade=");

const char* input_name;

if( argc 1 strncmp( argv[1], "--cascade=", optlen ) == 0 )

{

cascade_name = argv[1] + optlen;

input_name = argc 2 ? argv[2] : 0;

}

else

{

cascade_name = "C:/OpenCV2.0/data/haarcascades/haarcascade_eye.xml";//分类器路径

input_name = argc 1 ? argv[1] : 0;

}

cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

if( !cascade )//如果没有找到分类器,输出以下

{

fprintf( stderr, "ERROR: Could not load classifier cascade\n" );

fprintf( stderr,

"Usage: facedetect --cascade=\"cascade_path\" [filename|camera_index]\n" );

return -1;

}

storage = cvCreateMemStorage(0);

capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );//读取摄像头

if(!capture)//如果没有摄像头读取视频文件

capture = cvCaptureFromAVI("检测.avi");

cvNamedWindow( "result", 1);//创建窗口

if( capture )

{

for(;;)

{

if( !cvGrabFrame( capture ))//从摄像头中抓取帧

break;

frame = cvRetrieveFrame( capture );//读取上边抓取的帧

if( !frame )

break;

if( !frame_copy )

frame_copy = cvCreateImage( cvSize(frame-width,frame-height),

IPL_DEPTH_8U, frame-nChannels );

if( frame-origin == IPL_ORIGIN_TL )

cvCopy( frame, frame_copy, 0 );

else

cvFlip( frame, frame_copy, 0 );

detect_and_draw( frame_copy );

if( cvWaitKey( 10 ) = 0 )

break;

}

cvReleaseImage( frame_copy );

cvReleaseCapture( capture );

}

else//没检测到视频文件或者摄像头

{

const char* filename = (char*)"检测.jpg";//读图片

IplImage* image = cvLoadImage( filename, 1 );

if( image )

{

detect_and_draw( image );

cvWaitKey(0);

cvReleaseImage( image );

}

else

{

FILE* f = fopen( filename, "rt" );

if( f )

{

char buf[1000+1];

while( fgets( buf, 1000, f ) )

{

int len = (int)strlen(buf);

while( len 0 isspace(buf[len-1]) )

len--;

buf[len] = '\0';

image = cvLoadImage( buf, 1 );

if( image )

{

detect_and_draw( image );

cvWaitKey(0);

cvReleaseImage( image );

}

}

fclose(f);

}

}

}

cvDestroyWindow("result");

return 0;

}

void detect_and_draw( IplImage* img )

{

static CvScalar colors[] =

{

{{0,0,255}},

{{0,128,255}},

{{0,255,255}},

{{0,255,0}},

{{255,128,0}},

{{255,255,0}},

{{255,0,0}},

{{255,0,255}}

};

double scale = 1.3;

IplImage* gray = cvCreateImage( cvSize(img-width,img-height), 8, 1 );

IplImage* small_img = cvCreateImage( cvSize( cvRound (img-width/scale),

cvRound (img-height/scale)),

8, 1 );

int i;

cvCvtColor( img, gray, CV_BGR2GRAY );

cvResize( gray, small_img, CV_INTER_LINEAR );

cvEqualizeHist( small_img, small_img );

cvClearMemStorage( storage );

if( cascade )

{

double t = (double)cvGetTickCount();

CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,

1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,

cvSize(30, 30) );//检测人脸返回矩形人脸

t = (double)cvGetTickCount() - t;

printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );

for( i = 0; i (faces ? faces-total : 0); i++ )//找到矩形中心,把矩形转化为圆形

{

CvRect* r = (CvRect*)cvGetSeqElem( faces, i );

CvPoint center;

int radius;

center.x = cvRound((r-x + r-width*0.5)*scale);

center.y = cvRound((r-y + r-height*0.5)*scale);

radius = cvRound((r-width + r-height)*0.25*scale);

cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );

}

}

cvShowImage( "result", img );

cvReleaseImage( gray );

cvReleaseImage( small_img );

}

那个网站有汽车驾驶员技师论文.收费的最好.

驾驶人眼睛定位与跟踪算法的研究

[摘要]通过机器视觉技术对眼睛动作和视线转移特征的分析可实现驾驶人警觉状态的有效估计,但实际行车过程中驾驶人面部姿态的不确定性变化对眼睛定位算法提出了严峻挑战。本文中在采用主动形状模型算法对面部区域进行配准的基础上,提出运用Lucas-Kanade光流进行全局跟踪,并采用基于自商图的Meanshift算法进行局部校准的跟踪策略。实验结果表明,Meanshift算法的局部极值化能力能有效消除Lucas-Kanade光流跟踪中的误差积累,有效提高了人眼定位与跟踪精度。

关键词:行车安全;人眼定位;人眼跟踪;机器视觉

    A Research on the Algorithm for Driver's

Eye Positioning and Tracking

[Abstract]The analysis on eye movement and the feature of sight diversion by means of machine vision technology can achieve effective estimation of driver's vigilance state. However, the uncertainty change of driver's face gesture in real driving poses a severe challenge to eye positioning algorithm. In this paper, based on face alignment by using active shape model, an eye tracking strategy is proposed, which uses Lucas-Kanade optical flow method for global tracking and uses self-quotient-image-based Meanshift algorithm for local alignment. The results of experiment show that the capability of Meanshift algorithm in converging to local extrema can effectively eliminate the error accumulation in Lucas-Kanade optical flow tracking, and hence increase the accuracy of human eye positioning and tracking.

Keywords: driving safety; eye positiorung; eye tracking; machine vision

前言

国内外研究表明,行车时驾驶人的警觉状态与由此引起的跟车过近和车道偏离等危险驾驶行为是导致交通事故的重要原因。利用机器视觉技术对驾驶人眨眼动作、视线方位和注视点分布特征等的识别可实现警觉状态的有效估计。由于该技术具有非侵入、准确和实时的特点而成为世界先进汽车安全技术领域研究的重点。在实际行车过程中,为有效获取驾驶环境信息,保证驾驶行为的安全性,驾驶人一般会不断变换面部姿态来完成视觉搜索任务。姿态变化造成人脸3D形状在2D人脸图像投影的形变,使姿态变化成为人眼定位中的一大难题。

目前,人眼定位算法的研究途径主要包括基于形状的方法、基于表观的方法和基于红外照明的方法。对基于红外照明的方法来讲,太阳的辐射特性相当于6 000K的黑体,其在近红外波段的辐射通量仍然很强,远大于近红外光源的辐射通量,导致近红外照明方式在白天室外环境中应用时效果不佳。基于形状和基于表观的万法目前的研究主要集中在单帧图像中的人眼定位上,而针对图像序列中人眼跟踪算法的研究很少。为此,本文中充分利用驾驶人面部视频相邻帧问的连续性和相关性,提出了一种将人眼检测与人眼跟踪相结合的人眼定位算法,在采用主动形状模型( active shapemodel,ASM)算法对人脸配准和器官区域分割的基础上,设计了一种基于Meanshift校准的Lucas-Kanade光流跟踪算法,可有效消除跟踪误差的积累,实现眼睛的可靠定位。

1 系统结构

实际行车过程中,安装于车体的摄像机实时采集驾驶人面部图像并通过对驾驶人眼睛状态的分析实现驾驶人警觉状态的在线估计,如图1所示。

(中国技师网)

  • 评论列表:
  •  访客
     发布于 2022-07-15 23:21:57  回复该评论
  • assifier cascade\n" );fprintf( stderr,"Usage: facedetect --cascade=\"cascade_path\" [filename|camera_index]\n" )

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright Your WebSite.Some Rights Reserved.