`
wangpengfei360
  • 浏览: 1064870 次
文章分类
社区版块
存档分类
最新评论

用鼠标模拟视线跟踪技术

 
阅读更多

用鼠标模拟视线跟踪技术

1  引言

随着计算机技术的迅猛发展,可用性工程作为一门跨计算机科学、心理学、人类工效学和工业设计等多门学科的应用领域,越来越受到人们的重视。目前网站可用性的研究已经成为可用性研究领域的一个热点。为提高和改进网站的可用性提出了诸多实用的可用性方法和技术,并且已经得到了广泛的应用。以用户为中心是可用性工程的灵魂,所以怎样获取用户的数据,以及怎样对这些数据进行分析,成为网站可用性方法中最重要的环节之一。而对用户在访问过程中的视线轨迹的研究是对网站可用性研究中必不可少的一个重要方法。但目前视线跟踪技术一方面价格不菲,另一方面技术还不是趋于成熟。怎样能尽快将视线跟踪技术运用于网站可用性的研究,让更多的用户受益呢?作者在做可用性测试时发现很多用户在读到某些内容特别是重要的内容时经常使用鼠标引导视线进行阅读。当然在用户访问网页时,鼠标点击的地方一般可认为是用户视线到过的地方。(排除一些喜欢在网页上乱点鼠标的用户)根据这一发现作者 考虑是否可以使用鼠标来模拟用户视线跟踪仪?经过简单编程实现了对用户视线的跟踪并在对这一工具进行了实验性应用。得到了预期的结果。本文介绍视线跟踪的基本原理、技术及其在人机交互技术中的应用。

2  视线运动的特点[1 ]

视线(visual line) 反映人的注意方向,这是将其用作计算机输入的前提。视觉交互兼顾了输入输出双向性特点,视线所指通常反映用户感兴趣的对象,而传统手动输入装置是根据视觉指导进行操作的。可以想象,直接检测视线输入方向和位置来进行交互具有直接性和自然性特点。眼睛看物体的过程是转动眼球使物体出现在视网膜的中央凹中,因此眼球的位置指示了我们注视场景中的特定区域。视线运动通常表现为点到点的跳跃式扫描(saccade) ,而并非平滑移动(这只在追踪运动物体时才会发生) 。例如,阅读时人眼在一行中通常包含47 个跳动—定位(jump2fixation) 的动作,注视一般持续200600ms ,只是我们通常并未在意。但是我们的眼球为看清物体总是需要不停地做轻微的抖动(jitter) ,其幅度一般小于1°。只有在追随视野中移动的物体时才会出现平滑的眼动而不是突然的扫视。因此,利用视线进行书写和画图这样精细的动作是不可行的,换言之,我们不能利用眼动产生的轨迹。另一类眼动如眼球震颤(nystagmus) 、会聚(convergence) 、扭转( torsionalrotation) 对人机对话没有显著意义。

3  视线跟踪与处理技术

视线跟踪技术早期主要应用于心理学研究(如阅读研究) [5 ,6 ] 、助残[7 ,8 ]等领域,后来才被应用于图像压缩及人机交互和可用性工程[9 ] 。视线跟踪技术及装置有强迫(int rusiveness)与非强迫(non2int rusiveness) 、穿戴与非穿戴式、接触式(eyeglass2mounted) 与非接触式( remote)之分;有的系统要求用户的头静止不动,用于人机交互的视线跟踪技术必须突破这个限制。识别精度可从0. 1°~1°或2°不等,制造成本也有巨大差异。在价格、精度与方便性等因素之间作出权衡是一件困难的事情,例如视线跟踪精度与对用户的限制和干扰就是一对尖锐的矛盾[1 ] 。而且视线跟踪仪的价格令普通用户无法承受。而从视线跟踪仪中可以得到的信息都是很有研究价值的信息,如:从用户注视信息中: (1) 可以推断人们感兴趣或引起注意的内容; (2) 在自言自语测试中通过所注视的对象可得到其指代对象; (3) 暗示人与人之间的关系(如是友还是敌). 将来的计算机会利用获取的有关用户注视信息, 来了解用户的内部状态、意图、认知负荷紧张程度, 并自动调整对用户的反应.另外视线跟踪技术的一个诱人的应用领域就是虚拟现实和游戏, 根据用户当前的注视状态, 提供给用户相应注视方位的场景信息, 这样用户在不同的方位就会看到不同的场景, 达到身临其境的效果. 一方面使人与计算机间的交互与现实世界中的交互方式趋于一致, 更为简单、自然、高效; 另一方面又提高计算机图形、图像、动画的绘制、渲染速度.

4  用鼠标模拟视线跟踪技术

1)关键技术

Hook Windows 最具威力的特性之一,它提供给程序一个拦截事件的能力——不论是针对一个个别的线程,还是针对整个Windows系统而言。事实上,不只是当某一个事件发生时程序可以获得通告,甚至对大部份挂钩而言,程序还可以告诉Windows 停止处理这个事件。例如,金山词霸的屏幕取词功能,一些木马病毒,都是靠钩子来实现的。

钩子的安装

Windows提供给应用程序安装钩子的唯一一个函数是:

HHOOK SetWindowsHookEx(int idHook,

HOOKPROC hkprc,

HINSTANCE hmod,

DWORD dwThreadID);

这个函数一旦被调用,Windows 会配置一块内存,存放一个内部数据结构,描述的是即将被安装的这个新的钩子。所有这些数据结构都会被链接在一起,成为一个链。每当有新的加入,就会被系统放在链的前端。节点被加上去之后,

SetWindowsHookEx 传回此节点的一个句柄。

第一个参数idHook,用来表示要挂上哪一种钩子。

第二个参数hkprc,是过滤函数的地址,用来处理所指定类型的钩子的消息。如果挂上的是一个系统钩子,hkprc 必须位于一个DLL之中。

第三个参数hmod,是DLL的模块句柄,此DLL 是存放过滤函数之处。

最后一个参数dwThreadID,表示为此ID线程挂上这个钩子。

每当事件发生,并且与所挂上的钩子类型一致时,Windows就会调用在

SetWindowsHookEX 函数中指定的过滤函数(钩子函数)。

钩子的卸载

当程序不再需要钩子时,可以利用UnhookWindowsHookEx 函数来卸载。

BOOL UnhookWindowsHookEx(HHOOK hhook);

Windows 并不要求钩子函数的卸载顺序一定得和安装次序相反。每当有一个钩子被卸除,Windows 便释放出相应内存,并更新整个钩子链。如果有一个线程挂上了一个钩子,但是在尚未卸除钩子之前就结束了,那么系统会自动为它做卸载的操作。

捕获鼠标轨迹

要捕获鼠标的轨迹,一种有效的办法就是安装鼠标类型的挂钩。WH_KEYBOARDWH_MOUSE WH_HARDWARE三种类型的钩子用来拦截硬件的事件。WH_MOUSE 表示每当GetMessage PeekMessage两函数从已挂上钩子的线程的消息队列中取出鼠标消息时,钩子处理函数将被该线程调用。下面给出安装钩子和钩子函数代码(已删减)。

//安装鼠标钩子

HHOOK CMoseHook::Start()

{

gHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,gHinstance,NULL);

return gHook;

}

//钩子函数

MouseHookProc(int nCode, WPARAM wParam,LPARAM lParam)

{

LPMOUSEHOOKSTRUCT pMouseHook =

einterpret_cast<LPMOUSEHOOKSTRUCT>(lParam);

gPt = pMouseHook->pt;//鼠标位置信息。

CallNextHookEx(gHook,nCode,wParam,lParam);//继续呼叫下一个钩子

return <chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l">0L</chmetcnv>;

}

在安装完系统钩子之后,无论鼠标在什么进程上活动,钩子都能够被调用进而捕捉到某一特定时刻的鼠标座标。将这些鼠标的轨迹数据记录在文件或数据库中。用连线的办法就可以得到鼠标的轨迹。

2)基本的轨迹图

下图是对搜狐网站首页中最普遍的视线移动的简化描述,是会集了几十个浏览都视线按惯拟合而成的。

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1026" style="WIDTH: 431.25pt; HEIGHT: 324pt" type="#_x0000_t75"><imagedata o:title="ssdd" src="file:///C:/DOCUME~1/henry/LOCALS~1/Temp/msohtml1/06/clip_image001.jpg"></imagedata></shape>

<shape id="_x0000_i1025" style="WIDTH: 6in; HEIGHT: 345.75pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:/DOCUME~1/henry/LOCALS~1/Temp/msohtml1/06/clip_image003.jpg" o:href="视线跟踪/网站设计必读:读者阅读重点都在哪里?%20-%20傲石之BLOG体验__http--www_21msn_com.files/o_视觉重点.jpg"></imagedata></shape>

这一结果和由Poynter InstituteEstlow Center for Journalism & New MediEyetools共同组织的Eyetrack III研究得到的结果很相似。在他们的研究结果中指出上图是在观察参与者在阅读数个新闻首页的眼部运动时,Eyetrack III注意到一个普遍模式:视线多数时候常常首先在页面左上角停留,然后在该区域稍作浏览,跟着移动到页面右方。在对页面上方进行一段时间的仔细阅读后,眼球才会开始浏览下方内容。那么由这一结果可以初步说明用鼠标模拟视线跟踪的可能性。当然,无论是视觉输入, 还是自然语言、语音和手势输入,或是使用价格昂贵的视线跟踪仪都存在固有的非精确性, 难以达到100% 的识别率、准确率。

5  视线跟踪技术的应用前景

视线跟踪技术也作为一种研究手段, 通过分析用户的视线扫描路径, 来研究人机交互中人的信息加工的一些内在机制, 使界面的概念模型与人的心理模型相吻合. 如用户在菜单搜索过程中, 是顺序搜索还是随机搜索, 菜单的结构如何组织, 才能使用户的搜索绩效最高等.由于视线输入和识别技术存在固有的非精确性, 难以达到100% 的识别, 视线在人机交互中应用的精髓不在于用来独立地利用其指点功能, 而是与其它通道相结合提供空间的或其它的约束信

, 消除在单通道输入时存在的歧义. 即使视线跟踪系统的精度很高, 在界面设计中, 单纯依靠视觉信息进行交互的可靠性较低. 比如, 当用户在计算机屏幕前时, 推断其注视点在屏幕上的一个窗口上, 而其真正的注视点可能在屏幕之外, 解决方法是把它与其它输入通道相结合, 发挥优势互补, 增强其应用可靠性.视线跟踪技术使人机交互中的认知负荷大大降低, 视觉输入通道的引入就是为其它通道提供空间的或其它的约束信息, 以消除在单通道输入时的歧义性, 与其它通道相结合, 视线跟踪在人机交互领域有着广阔的应用前景.

6 用鼠标模拟视线跟踪技术几点不足

1) 为了得到更加准确的数据,在邀请用户做测试前最好先指导用户有意识的使用让视线跟随鼠标的移动。

2) 本工具目前还不能对用户在某点的停留时间,点到点的距离和时间等相对重要的数据进行捕捉。

3) 对数据的分析还只限于人工分析和统计,其实对数据的分析完全可以借助于强大的数据库、数据仓库和数据挖掘技术,并有可能得到更多的有益的分析结果。

7 结束语

视线觉跟踪技术因其在人机交互中的重要性, 成为当前国外研究的热点之一. 有关在人机交互中的应用的研究, 在国外也是刚刚起步, 并且是由心理学、认知科学、软件工程、图形学等组成的交叉。利用强大的计算机软件技术完全可以部分模拟出视线跟踪仪,从而迅速展开研究,以极少的成本进行热点研究。

分享到:
评论

相关推荐

    鼠标模拟。鼠标模拟鼠标模拟鼠标模拟鼠标模拟

    鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟鼠标模拟

    windows鼠标模拟触屏操作

    鼠标模拟触屏操作,开发触屏软件时,屏幕不具备要求时,使用。可以与触屏效果一样。

    模拟鼠标移动轨迹

    模拟鼠标移动轨迹模拟鼠标移动轨迹模拟鼠标移动轨迹模拟鼠标移动轨迹

    鼠标跟踪球技术的简单类实现

    鼠标跟踪球技术的简单类实现

    通过hook技术,模拟鼠标的操作

    通过hook windows的鼠标消息,实现拦截以及模拟鼠标动作

    鼠标键盘模拟程序源码

    用键盘模拟鼠标,但当鼠标出问题时,可以实用这个程序! 一个简单的键盘模拟程序! 此程序没有显示界面,后台运行,没有结束快捷键(使用的鼠标有问题,此程序代替鼠标),只能使用任务管理器结束! F12是启动鼠标...

    模拟鼠标点击工具

    这个软件可以模拟鼠标自动点击,获取鼠标在屏幕上的位置

    TC实现鼠标模拟人工移动.rar

    tc实现鼠标模拟人工移动,人工操作鼠标移动时会产生轨迹,切鼠标移动轨迹由-直线-上曲线-下曲线组成,每次移动距离不同速度不同,靠近目标点会减速移动,360度无死角,此源码做到了以上几点。有需要的粉丝欢迎下载...

    Qt模拟鼠标点击

    Qt模拟鼠标点击,用来自己备忘的。如有需要可以下载。

    后台 模拟 键盘 鼠标

    后台 模拟 键盘 鼠标 前台 模拟 键盘 鼠标

    易语言源码鼠标模拟点击器易语言源码.rar

    易语言源码鼠标模拟点击器易语言源码.rar 易语言源码鼠标模拟点击器易语言源码.rar 易语言源码鼠标模拟点击器易语言源码.rar 易语言源码鼠标模拟点击器易语言源码.rar 易语言源码鼠标模拟点击器易语言源码.rar ...

    易语言源码易语言鼠标跟踪模拟者源码.rar

    易语言源码易语言鼠标跟踪模拟者源码.rar 易语言源码易语言鼠标跟踪模拟者源码.rar 易语言源码易语言鼠标跟踪模拟者源码.rar 易语言源码易语言鼠标跟踪模拟者源码.rar 易语言源码易语言鼠标跟踪模拟者源码.rar ...

    windows鼠标键盘万能模拟精灵.zip

    windows鼠标键盘万能模拟精灵,windows鼠标键盘万能模拟精灵,windows鼠标键盘万能模拟精灵,windows鼠标键盘万能模拟精灵

    android_模拟鼠标指针demo

    android_模拟鼠标指针demo,可模拟鼠标在手机上移动

    鼠标实时位置跟踪

    C++实现鼠标跟踪实时显示图像坐标,获取鼠标位置(在屏幕的位置) CPoint m_mouse; GetCursorPos(&m_mouse); 2、 屏幕转化为客户端(控件的相对位置)& 客户端位置转化为屏幕位置 ClientToScreen(this-&gt;m_...

    MFC 模拟鼠标按键

    MFC 模拟鼠标按键程序,简单易懂,新手必备!

    ppjoy鼠标模拟控制器

    ppjoy鼠标模拟控制器,赛车游戏可用鼠标控制方向

    智能键盘鼠标模拟精灵v8.2中文安装免费版

    智能键盘鼠标模拟精灵是一款非常好用且功能强大的模拟软件,有了这款软件就可以在使用电脑时的重复动作交给软件来自动完成,一般游戏玩家应该会用到这款工具,通过这款软件用户可以事选录制好动作,然后就可以进行...

    python模拟鼠标操作

    python模拟鼠标操作

    Linux中模拟鼠标.pdf

    Linux操作系统中,模拟鼠标是指在系统中模拟鼠标的操作,例如在没有鼠标的情况下,可以使用数字小键盘来模拟鼠标的操作。这种方法可以在XFree86和Xorg的XKB扩展特性中实现。 在Linux系统中,模拟鼠标的实现步骤如下...

Global site tag (gtag.js) - Google Analytics