APP下载

一种用于智能头显的眼动跟踪系统

2019-06-27李永强

现代计算机 2019年13期
关键词:眼动瞳孔插件

李永强

(广东工业大学计算机学院计算机视觉与交互实验室,广州510006)

0 引言

近年来随着计算机性能的快速发展,人机交互技术[1]逐渐走进了人们的视野,开始在社会的各个领域逐渐普及。很多科研人员在这方面展开了研究,如眼动跟踪[2]、人脸检测、手势识别、语音识别等,这些丰富的研究成果促进了人机交互技术的发展,也给人们的日常生活带来了翻天覆地的变化,极大地提高了人们的生活效率。

而人机交互技术中的眼动跟踪技术是一种依靠摄像头、红外灯珠等辅助设备实时计算人眼注视方向与位置的技术,其简单、新颖、无疲劳的特性给人机交互领域提供了一种更加人性化的交互方式。关于眼动跟踪技术的研究已有上百年历史,目前它已广泛应用于多个领域。例如用于智能头显、图片广告研究[3]、动态分析、可用性测试、商场购物、智能家电、数字游戏等多个领域。

在智能头显设备中,眼动跟踪技术是其最重要的技术之一。在智能头显设备上添加眼动跟踪技术,可以提高VR 世界的视觉宽广性,减轻用户的肢体疲劳,增加社交虚拟人物的逼真性,提高人类与周围环境的互动能力。所以为了提高智能头显的综合性能,眼动跟踪就是智能头显的必备技术。

眼动跟踪对于智能头显的几个主要应用如下。

(1)减轻用户的肢体疲劳

由于技术的限制,目前的智能头显设备大多比较笨重,当用户在佩戴智能头显设备进行交互操作时,需要进行大量的肢体动作,例如用手拿着操作手柄进行虚拟菜单的选择,或者在虚拟射击游戏中用手不断地射击动作,都给身体带来了沉重的疲劳。而使用眼动跟踪技术时,相当部分的疲劳动作都可以用眼神操作代替,从而释放出了大量的肢体动作。如果在使用眼动跟踪技术的同时在配合头动追踪,用户的肢体动作将会更大程度地降低。

(2)基于眼动跟踪的注视点渲染技术[4]

目前智能头显设备不能像电脑一样在生活中普遍普及的一个重要原因就是它高昂的价格,这让普通用户望而止步。而智能头显设备之所以成本非常高的一个主要原因就是高分辨率的屏幕。根据人眼的视觉特性,人眼在看目标对象时,只专注于目标物体很小的视野而忽略周围环境。在智能头显里面,使用基于眼动跟踪的注视点渲染技术,以高分辨率渲染中心区域,以低分辨率渲染周边区域。这样既能降低硬件设备的计算量,又不影响使用者的体验。

(3)数据预取

在智能头显设备中,某些数据操作需要一定的时间才能完成,例如在在线数据库中查找东西,如果一个人在特定方向上扫视,在选择交互之前,数据读取可以在后台开始。数据预取改善了智能头显环境中的感知响应性,对移动数据网络尤为有用。

综上所述,对面向智能头显的眼动跟踪技术的研究,能帮助智能头显实现更好的用户体验。它能为用户提供更多的操作空间和更自然的交互,而未来注视点渲染技术将进一步降低在复杂3D 环境中对处理器性能的要求,这也会在整体上让智能头显变得更加平易近人。因此面向智能头显的眼动跟踪技术有着重要的研究意义。

在目前阶段,无论国内还是国外,眼动跟踪在智能头显上的应用都处于发展的初始阶段,技术不够成熟,还有很多问题亟待解决。基于这种情况,本文基于眼动跟踪技术开发了一款高效、便捷、低成本、可移植的眼动跟踪系统,可以直接运用于智能头显上,加快了眼动跟踪技术在智能头显上的研究与应用。而且科研人员也可以直接应用IVI-GAZE 系统做眼动相关的其他研究,例如心理学研究[5]、图片广告研究等,节约了科研人员对眼动跟踪技术研究的成本投入,避免了前期大量的准备工作,提高了对眼动跟踪技术研究的效率。

1 IVI-GAZE系统描述

IVI-GAZE 系统的目的是实现实时的屏幕注视点检测,为其他基于眼动的开发项目提供一个高效、便捷的注视点检测平台。它的系统结构分为两大模块:IVI-GAZE-CORE 模块和IVI-GAZE-PLUGIN 模块。它的程序设计功能包括模块的线程控制、内部通信与外部通信、指令控制、校准场景的建立、瞳孔检测、求解映射函数、坐标映射等。程序流程逻辑如图1 所示。

IVI-GAZE 系统运行于头戴式设备上,设备需要使用多个850nm 红外光灯珠,以及一个窄带红外光镜片的摄像头,并且设备与头的位置不能有较大的位移。

IVI-GAZE 系统在实时性上要求瞳孔检测及映射的运行速率至少要达到60 帧/秒,通信速率至少达到300 帧/秒,需要使用多线程以及其他加速算法进行加速。另外IVI-GAZE 系统在异常处理方面,能够自动检测设备,及时返回设备的出错信息。通信模块使用UDP 协议,自动丢弃超时的数据。对于用户使用错误的情况,系统会给予其相应的引导操作。在接口方面,以Unity 插件的形式为其他系统或模块使用。

图1 程序流程逻辑

2 IVI-GAZE-CORE

IVI-GAZE-CORE 是一个Windows 程序,用于眼动仪的校准与瞳孔检测,与IVI-GAZE-PLUGIN 一起运行。在该部分,用户需要进行的操作是将设备连接到电脑,启动IVI-GAZE-CORE 程序,选择相关设备,接下来启动Unity,打开IVI-GAZE-PLUGIN 插件,并按照其引导进行操作。

在功能组成方面,它的模块主要分为:管理模块、设备模块、校准模块、检测模块、映射模块、通信模块。

具体每个模块的功能如下:

(1)管理模块。主要功能包括程序的入口,线程的管理,以及对来自Unity 插件的指令进行处理。

(2)设备模块。主要功能包括获取UVC 设备信息,修改UVC 设备参数,从UVC 设备获取帧据。

(3)校准模块。主要功能包括校准操作,以及返回拟合的映射多项式。

(4)检测模块。主要功能为接收帧数据,从而获得瞳孔的归一化的绝对位置。

(5)映射模块。主要功能为利用映射多项式计算出注视点位置

(6)通信模块。主要功能是与Unity 插件进行通信。

IVI-GAZE-CORE 程序的功能组成如图2 所示。

图2 IVI-GAZE-CORE功能组成

2.1 与Unity插件的通信

IVI-GAZE-CORE 程序与IVI-GAZE-PLUGIN 插件需要进行通信,其内容如图3 所示。

图3 IVI-GAZE-CORE程序与IVI-GAZE-PLUGIN插件通信图

(1)从Unity 插件获得编码的指令

发送的指令有:初始化并启动校准进程;初始化并启动检测进程;关闭设备;关闭校准进程;关闭检测进程。

(2)向Unity 发送相应的数据

①校准。发送的数据为:校准是否成功的标识。

②检测。发送的数据为:时间戳;图像尺寸;归一化的注视点坐标;置信度;其他相关信息。

2.2 瞳孔检测的算法流程

瞳孔检测算法的主要流程有:图像预处理[6]、瞳孔选区[7];动态直方图阈值[8]、选取瞳孔暗区与亮区[9];Canny 运算去除暗区与亮区[10];轮廓检测;轮廓筛选;椭圆拟合[11-12];椭圆筛选;产生结果。

首先,对图像进行预处理,选择初始区域,保存为待处理图像pupil-image,如图4 所示。

图4 待处理图像pupil-image

然后计算待处理图像的直方图,根据计算的峰值来确定动态阈值,获得暗区与亮区,并分别对其做形态学操作。图像暗区与亮区的计算流程如图5 所示。

图5 图像暗区与亮区的计算流程

接下来对待处理图像进行去噪,执行Canny 运算获得边界图像,去掉边界图像中与暗区/亮区重叠的部分。图像边界的获取流程图如图6 所示。

图6 图像边界获取的流程图

最后,对边界图像执行findContours 操作,获得轮廓集,对其进行筛选。对筛选好的轮廓做fitEllipse 操作,获得椭圆,在筛选椭圆。若轮廓或椭圆数量为零,则使置信度为零,即代表查找失败;否则,计算出相应数值,存为结果。最后将所有结果传送给插件。对边界图像执行findContours 操作流程图如图7 所示。

图7 对边界图像执行findCountours的流程图

3 IVI-GAZE-PLUGIN

IVI-GAZE-PLUGIN 为Unity 程序开发的插件。Unity 是一款轻型的图形游戏开发引擎,由于其简单易学的特点,吸引了大量游戏开发人员,具有良好的软件生态环境,因而在开发过程中将IVI-GAZE-PLUGIN作为Unity 的插件来扩展其对眼动设备的使用功能。

开发Unity 插件主要是为了扩展Unity 对眼动交互设备的支持,利用该插件实现IVI-GAZE 的可移植性,在该插件上开发人员可以很方便地使用眼动信息来进行交互,以实现Unity 程序中利用用户的注视点信息进行渲染、交互或分析等功能。

3.1 功能组成

IVI-GAZE-PLUGIN 的程序功能如图8 所示。

图8 IVI-GAZE-PLUGIN功能模块

(1)管理模块。管理线程,控制程序流程,对来自IVI-GAZE-CORE 的指令进行处理。

(2)交互模块。校准时提示用户注视校准点,模拟注视点位置等。

(3)通信模块。与IVI-GAZE-CORE 进行通信。

3.2 注视点位置计算的算法原理

在注视点位置与瞳孔中心之间有一定的函数映射关系,我们通过多项式拟合[13]的方法建立二者之间的数学关系模型。这种基于多项式拟合的实现估计算法属于一种2D 映射算法,可以根据瞳孔中心的位置计算出注视点的位置。

算法主要流程如下:

(1)用户把目光移向计算机屏幕上七个预先设定好的位置。首先用户要依次注视计算机屏幕上的已知位置,用于拟合出注视点计算的多项式。在这一阶段可以拟合不同阶数的多项式,而且系统精度与阶数成正比,但系统的复杂度也会随着变高。同时阶数越高意味着用户需要在屏幕上注视更多的点,长时间停留在该阶段,进而会影响系统使用的便捷性。因而需要保证注视点的精准度在可正常使用的情况下,尽可能地降低由于校准点而带来的不便。

(2)获取有效的瞳孔中心位置。对单个校准点注视期间所采集到的瞳孔中心位置进行求解均值和方差操作,筛选掉异常点,求得七组瞳孔中心位置。

(3)多项式系数求解。由于注视点与瞳孔中心之间呈现非线性关系,所以拟合出的多项式至少是二阶的。拟合的多项式如式(1)和式(2)所示。

其中,(Px,Py)指屏幕上预先设定好的七个注视点位置,(x,y)指人眼图像中的瞳孔中心位置,cx0,...,cx6以及cy0,…,cy6是待定的未知系数,需根据不同的(Px,Py)和(x,y)建立的方程组来确定。每组(Px,Py)和(x,y)可确立两个方程,故至少需要在屏幕上设立七个需要注视的校准点,才能确定cx0,…,cx6以及cy0,…,cy6的值。

为了确保多项式映射关系与实际注视点关系的准确率,选取的校准点应该尽可能的分布在显示屏的边缘。当多项式的系数确定之后,便可以计算出不同的瞳孔中心位置依次对应的注视点位置。

3.3 校准算法流程

校准对应流程如图9 所示。

图9 校准流程

4 实验结果

系统经过多次测试,运行良好,实现了完整的工作流程。IVI-GAZE-CORE 的瞳孔检测图如图10 所示。

图10 瞳孔检测图

在Unity 中运行校准场景。场景中有一个校准按钮,点击校准按钮,开始校准。初始场景如图11 所示。启动IVI-GAZE-CORE,检测瞳孔位置,同时场景中会出现一个小球,小球会依次在屏幕左上角、右上角、右下角、左下角、正中心、正下方、正上方这7 个位置闪动,提示用户注视小球,小球的位置则可视为注视点的位置。小球的七个位置示意图如图12 所示。

当用户注视小球时,IVI-GAZE-CORE 会采集瞳孔中心的位置数据,采集完成后,会利用通信模块通知校准场景,使小球移动下一次的位置,开始下一次采集。7 次采集完成后,IVI-GAZE-CORE 通过采集的7 组用户瞳孔中心的位置和小球的屏幕位置数据,计算出用户瞳孔中心的位置和小球的屏幕位置的映射多项式,至此校准完成。

校准完成后,点击测试按钮,根据已算出的映射多项式,当用户的注视点位置发生变化时,小球的屏幕位置也会跟随其变化,如图13 所示。

图11 初始场景

图12 小球七个位置示意图

图13 校准完成后小球随着瞳孔位置移动

5 结语

开发IVI-GAZE 系统主要是为了促进眼动跟踪技术在智能头显上的应用,使其可以运用于各大头显厂商生产的智能头显设备上,降低智能头显成本,增加智能头显用户的体验性,方便科研人员利用用户的注视点信息进行渲染、交互或分析等方面的研究。

截止到目前,我们已经利用IVI-GAZE 系统获得的注视点信息,取得了注视点渲染方面的相关研究成果[14],并且已经将该系统试运行于国内某著名智能头显生产商。

虽然IVI-GAZE 系统现在已经取得了很好的运用,但是还有一些不足之处。例如IVI-GAZE-CORE的检测模块在采集瞳孔中心数据时,由于人眨眼的特性,导致IVI-GAZE 系统的鲁棒性较差。所以我们下一步的工作重点将在眨眼情况下系统的鲁棒性问题上展开研究。

猜你喜欢

眼动瞳孔插件
基于眼动的驾驶员危险认知
基于ssVEP与眼动追踪的混合型并行脑机接口研究
用好插件浏览器标签页管理更轻松
海豹的睡眠:只有一半大脑在睡觉
瞳孔
请个浏览器插件全能管家
基于jQUerY的自定义插件开发
静止眼动和动作表现关系的心理学机制
瞳孔大,决策力差
屠岸的散文诗(两章)