用户可以使用多种输入机制来与计算系统接合。例如,可以利用眼睛视线(gaze)追踪来与图形用户界面进行交互,其中,用户视线与图形用户界面相交的所确定的位置可以用作位置信号以用于与用户界面进行交互。视线追踪技术可以采用一个或多个光源来将光投射到眼睛上,并且采用一个或多个相机来捕获从眼睛反射的所投射的光的闪光的图像。可以利用图像中的闪光和/或瞳孔的位置来确定指示视线方向的瞳孔位置。
技术实现要素:
公开了有关在存在眩光源的情况下执行眼睛视线追踪的实施例,所述眩光源例如位于眼睛追踪相机与被追踪的眼睛之间的眼镜。例如,在一个实施例中,示例眼睛追踪系统包括多个光源以及被配置为捕获从眼睛反射的来自光源的光的图像的相机。眼睛追踪系统还包括逻辑设备和存储设备,所述存储设备存储可以由逻辑设备执行以通过以下方式来获得眼睛追踪数据的帧的指令:迭代地投射来自多个光源的光源的不同组合的光,并且在对每个组合的投射期间捕获眼睛的图像。所述指令可以进一步可执行以基于对在图像中所检测到的遮挡(occlusion)的确定来选择用于眼睛追踪的经选择的光源的组合,并且经由用于眼睛追踪的所选择的光源的组合来投射光,其中所述遮挡是由位于眼睛和相机之间的透明或半透明的光学结构而产生的。
提供了该发明内容以用简化的形式介绍在以下的具体实施方式中所进一步描述的概念的选择。本发明内容不旨在标识所要求保护的主题的关键特征或本质特征,也不旨在用来限制所要求保护的主题的范围。此外,所要求保护的主题不限于解决了在该公开的任何部分中所述的任何或全部缺点的实现。
附图说明
图1示出了示例眼睛追踪环境的实施例。
图2是描绘了对眼睛追踪系统中的光源进行排序的方法的实施例的流程图。
图3是描绘了对来自眼睛追踪系统的图像中的反射进行分类的方法的实施例的流程图。
图4示出了根据本公开的实施例的由眼睛追踪系统所捕获的示例图像。
图5示出了根据本公开的实施例的由眼睛追踪系统所捕获的图像的示例,其中该图像被处理以识别图像的饱和区域。
图6A和6B示出了根据本公开的实施例的针对眼睛追踪系统的示例光源布置的两个视图。
图7是计算系统的实施例的框图。
图8示出了根据本公开的实施例的光源的示例序列。
具体实施方式
在眼睛追踪系统中,相机和/或光源可以位于与用户的眼睛和/或头部分隔的位置。因此,在相机/光源与眼睛之间可以存在诸如眼镜之类的对象,该对象可能产生对由光源投射的光的额外的反射。这些反射可能在图像中表现为眩光,并且可能遮挡闪光和/或瞳孔中的一个或多个。因此,这样的眩光可能干扰眼睛追踪。
由于这样的眩光和其他伪反射对眼睛追踪闪光的遮挡可以随着用户相对于闪光光源和相机的位置和/或朝向而变化,因此不同的光源配置以及不同类型和/或厚度的眼镜可以产生不同的眩光位置。因此,公开了有关投射不同配置的光源以帮助识别这样一种光源配置的实施例,该光源配置允许执行眼睛追踪而没有来自由眼镜等引起的眩光的对眼睛闪光的不可接受的遮挡。
图1示出了示例眼睛追踪环境100,其中,用户在戴眼镜106的同时查看计算设备104。计算设备104被描绘为平板计算机,但应当理解的是,任何其他合适的计算设备都可以利用眼睛追踪。示例包括但不限于:智能电话、膝上型计算机、个人计算机、电视、以及可穿戴计算设备(例如,头戴式显示设备)。
计算设备104包括眼睛追踪系统,该眼睛追踪系统包括多个光源108以及相机110。光源108可以包括例如多个发光二极管(LEDS)、和/或其他合适的发光设备。在一些实施例中,光源108可以发射红外光、可见光、或者可见光与红外光的组合(例如,光源108的一个子集可以投射红外光,而光源108的另一个子集可以投射可见光)。相机110可以包括任何合适的成像设备,包括但不限于深度相机、RGB(彩色成像)相机、灰度相机、立体相机对、和/或任何其他合适的相机或相机的组合。应当理解的是,可以将光源、相机、和/或眼睛追踪系统的任何其他元件中的一个或多个元件集成在单个计算设备内、与计算设备分离地封装、或者以任何其组合来布置。
如在图1中由虚线所示,每个光源108都可以朝着用户102的眼睛发出光。相机110可以捕获用户102的眼睛的图像,该图像包括从光源108投射的光从眼睛的反射。可以基于来自相机110的图像中的所投射的光的反射相对于用户的眼睛的瞳孔(或者虹膜或其他合适的眼睛结构)的位置来确定视线的方向。这可以允许从眼睛投射视线,以使得可以确定所投射的视线与用户界面或真实世界对象相交的位置。这可以允许用户经由视线与计算设备进行交互。此外,视线位置随着时间的变化可以用作针对计算设备的手势输入。
图2示出了描绘了用于追踪眼睛移动的方法200的实施例的流程图,当在用户的眼睛与光源/相机之间存在眼镜或其它这样的结构时,该方法可以有助于实现鲁棒的眼睛追踪性能。可以由计算设备(例如,图1中的计算设备104)中的眼睛追踪系统来执行方法200。
在202处,方法200包括获取眼睛追踪数据。如上所述,可以通过朝着用户的眼睛发出光(例如,红外光)并捕获从用户眼睛反射的光的图像来执行眼睛追踪。然而,由于光也可以从眼镜或者光源与用户的眼睛之间的其他透明或半透明光学结构反射,因此可能会出现遮挡来自用户眼睛的光的反射的眩光。
因此,如在204处所指示的,方法200可以包括迭代地投射来自光源的不同组合的光,并且在206处,在光源的每个不同组合的投射期间捕获眼睛的图像,如在206处所指示的。这些过程可以包含,例如,投射来自在不同组合中的不同数量的光源的光、和/或投射来自具有不同位置/朝向的光源的光。作为更加具体的示例,图8示意性地示出了包括四个光源802a-802d的眼睛追踪系统,其中照明光源由表示光源的框内的斜线示出。迭代地投射来自光源的不同组合的光可以包括投射来自所有光源的光(如在时间T1处所示);并且接着投射来自三个光源的不同组合的光(如在时间T2、T3、T4、和T5处所示);并且接着投射来自两个光源的不同组合的光(如在时间T6和T7处所示)或者投射仅仅一个光源的光(未在图中示出)。应当理解的是,可以以任何合适的顺序来执行光源投射的这样的循环。例如,在需要最精确的视线追踪的情况下,可以在尝试具有更少数量的光源的组合之前尝试具有更多数量的照明光源的组合,而在需要省电的情况下、或者在玻璃表面趋向于产生更多的眩光的情况下,可以在尝试具有更多数量的光源的组合之前尝试那些具有更少数量的光源的组合。
此外,在一些实施例中,可以基于头部/HMD位置和/或光源的朝向/位置而可选地选择进行投射光源的组合的顺序。例如,可以知道当头部位于给定的角度时,特定数量和/或图案(pattern)的光源可以产生较少的遮挡。通过基于上述信息来选择下一组合,可以以智能的方式来迭代地循环光源的不同组合,以增加可以在早期的迭代中利用的光源的合适的组合的可能性,从而减少对光源的不同组合进行循环所花费的时间量。通过该方式,眼睛追踪系统可以估计光源的哪个组合将产生最低量的遮挡,并且以基于该估计的顺序来迭代地投射来自光源的不同组合的光。应当理解的是,在其他实施例中,可以基于图像中的遮挡的量来选择光源的组合,如在下文中所描述的。
在210处,方法200包括针对每个经测试的光源来确定在图像中是否存在不可接受的遮挡,以及在212处选择光源的组合以用于执行眼睛追踪。如在214处所指示的,可以基于在图像中所检测到的遮挡的量来选择光源的组合。在一些实施例中,在识别并选择了合适的组合之后,可以停止对每个组合的迭代测试,而在其他实施例中,在选择一个组合之前可能测试了一整组组合。作为对每个组合进行测试的一部分,对于给定的光源配置,眩光可以与它们的对应的闪光相匹配,或者可以获得眩光与瞳孔或闪光之间的遮挡度量。在高遮挡(例如,遮挡超过阈值)的情况下,可以从序列中选择下一个光源配置。接着可以重复该过程直到获得具有高置信度分数的未遮挡或部分遮挡的瞳孔闪光。接着可以跨未来的帧而利用该配置直到检测到下一个遮挡为止,此时再次循环通过这些配置直到再次确定合适的光源配置为止。
方法200还包括:在216处,经由光源的经选择的组合来投射光,以及在218处,通过检测来自光源的从眼睛反射的光来追踪一个或多个眼睛的视线位置。此外,在220处,方法200包括响应于眼睛追踪而执行动作。可以使用眼睛追踪来执行任何合适的动作。例如,可以利用眼睛追踪来检测眼睛姿态以检测针对图形用户界面的位置信号等。
以任何合适的方式来确定对由眩光造成的眼睛闪光反射的不可接受的遮挡的量。图3示出了描绘了方法300的示例实施例的流程图,该方法300用于对由眼睛追踪系统的相机所捕获的图像中的反射和/或眩光或其他干扰进行分类。应当理解的是,可以由被配置为处理眼睛追踪系统中的图像的计算设备(例如,图1的计算设备104)来执行方法300。
在302处,方法300包括从相机接收图像数据。相机可以被集成在计算设备中或者相对于计算设备外部地/远程地放置。在304处,方法300还包括在所接收的图像中检测饱和区域。例如,可以分析图像以确定图像中具有高于阈值的饱和度值的像素。
由于眩光可以是由来自眼镜或其他平滑结构的镜面反射所引起的,因此眩光可以具有类似于光源本身的强度分布的高度饱和的核心。因此,由从在眼睛追踪系统中所使用的光源投射的光所形成的眩光可以在中心处具有高强度的图案,其在远离中心时该图案突然消失(dissipate),这有时会导致闪耀(flare)的出现。根据这样的特性,由从光源投射的反射所形成的眩光可以区别于从用户的眼睛的光的反射并且区别于由于环境中的其他IR源的存在而引起的其他漫反射。
图4示出了对由眼睛追踪系统的相机所捕获的图像400的示例描绘,并且示出了佩戴眼镜404的用户402的视图。可以由眼镜404以及用户402的眼睛406的瞳孔来反射眼睛追踪系统的光源(以及环境光源)的光。来自眼镜404的这种反射可以产生眩光408,而来自眼睛的反射可以产生闪光410,所述闪光由眼睛406的瞳孔区域中的4个均匀间隔的点所示出。当闪光410表现为小的、大体为圆形的点时,眩光408可以具有喇叭形(flared)、星形的形状。
回到图3,方法300可以包括识别并选择图像的饱和的像素,以及如在306处所指示的执行对图像的饱和像素的前景距离变换,以使得前景距离变换后的像素强度是到反射的边界的距离的函数。这可以有助于基于饱和区域的大小和/或该饱和区域的轮廓来提供对眩光候选者的轮廓的指示。例如,大于阈值大小的饱和区域可以被认为是眩光候选者,而小于阈值大小的饱和区域可以不被认为是眩光候选者。
在308处,方法300包括例如通过移除具有低于距离阈值的距离值的轮廓来移除图像中的噪声。通过该方式,可以对眩光/眩光候选者的喇叭形轮廓进行平滑。此外,在310处,方法300包括确定每个剩余的饱和区域的边界框(例如,在308处所确定的眩光/眩光候选者的核心)。如在312处所指示的,边界框的大小可以被选择为具有使得该框能够包括饱和像素的阈值百分比。例如,可以在眩光/眩光候选者的核心周围形成边界框,并且可以增加该边界框的大小直到边界框中的饱和像素百分比超过某一阈值为止。该重新设置大小可以有助于确保将框置于每个饱和区域周围。在眩光的情况下,框包括饱和的中心,而在假阳性(例如,不反光)的情况下,饱和像素在整个框中随机扩展。短暂地转到图5,示出了图4的图像400的经处理的版本,其中饱和区域502(例如,眩光候选者)由边界框504包围。
回到图3,在314处,方法300包括将统计分布拟合至第一饱和区域。例如,可以将高斯模型或其他统计分布模型拟合至所检测的眩光中心,以形成眩光候选者区域中的饱和像素的标准化分布。接着,可以将每个饱和区域/眩光候选者的统计分布的拟合的参数与阈值条件进行比较。例如,可以针对拟合至该饱和区域的高斯模型来确定高斯模型误差,并且在316处可以确定该误差与阈值误差的比较。如果参数满足阈值(例如,如果模型误差低于阈值),则在318处可以确定该区域是眩光,并且方法可以前进至320,在320处确定是否已经分析了所有饱和区域。例如,由于展示眩光类特征(例如,中心区域的饱和像素的集中度以及在周期性间隔的外围区域处突出的眩光)的相关联的框内的饱和像素的分布,可以将图5中的眩光候选者506a、506b、506c、506d、和506e分类为眩光。在在316处确定的参数不满足阈值的情况下,方法可以前进至320而不将饱和区域分类为眩光(例如,由于缺少饱和核心和/或不存在其他眩光特征,可以不将眩光候选者506f、506g、506h、506i、506j、和506k分类为眩光)。
在320处,如果确定还没有分析所有的饱和区域(例如,在320处为“否”),则方法300包括迭代地执行过程316、318和320直到已经分析了所有饱和区域为止。如果已经分析了所有饱和区域(例如,在320处为“是”),则方法300包括,在324处,基于被分类为眩光的饱和区域的数量和/或位置来确定遮挡等级。例如,遮挡等级可以基于眩光的大小、眩光的数量、和/或眩光多接近眼睛的瞳孔/从眼睛的瞳孔反射的闪光。
在上文中关于方法300所描述的各种阈值(例如,308处的距离阈值、312处的阈值百分比、和316处的阈值条件)可以是预先确定的和/或是基于统计数据来选择的。在额外的或可替代的实施例中,可以经由学习算法(例如,利用分类器)来确定阈值中的一个或多个阈值。例如,经由学习算法来确定阈值可以包括基于针对特定的用户、环境、照明布置、和/或其他合适的条件所测量/记录的数据来随着时间动态地改变阈值。在使用分类器确定了阈值之后,可以添加多个其他功能(例如,二次拟合误差、相对于眼角的位置、消失梯度等)来优化已分析的图像中的眩光与非眩光之间的分隔。
图6A和6B示出了眼睛追踪系统的示例光源布置600的不同的视图。在前视图6A中,个体光源602被示出为布置在外壳结构604周围。在一些实施例中,外壳结构604可以包括眼睛追踪系统的相机、集成在眼睛追踪系统的相机内部、和/或安装到眼睛追踪系统的相机上。在其他实施例中,外壳结构604可以配置为安装到其他元件上。如图所示,每个光源602都可以相对于其他光源而位于不同的位置。通过该方式,从每个光源602投射的光可以被引导至不同的位置和/或以与从光源装置600中的其他光源投射的光不同的角度到达特定的位置。这可以允许使用光源的不同组合来形成从眼睛的反射以避免如在上文中所描述的来自眩光的遮挡。
此外,如在图6B中所示出的光源布置600的斜视图中所示,光源602中的一个或多个光源可以与布置中的其他光源不同地朝向。虚线箭头指示从每个光源602所发出的光的方向。通过该方式,从每个光源602投射的光可以被引导至不同的位置和/或以与从光源装置600的其他光源投射的光不同的角度到达特定的位置。
眼睛追踪图像中的瞳孔闪光的遮挡可以基于根据光学结构的特征,例如位置、大小、强度分布、以及到光源的映射而对光学结构上的反射进行的分类。通过提供包括引导来自不同位置/角度的光的光源在内的光源布置,光源可以迭代地打开/关闭以在眼睛追踪系统中生成光源投射的不同组合。对在光的投射期间从不同光源的每个组合所捕获的图像进行分析可以识别眩光(例如,确定眩光相对于眼睛的位置)和/或将眩光与特定的光源/光源的组合进行匹配。从而,可以选择产生所获得的具有高置信度分数的未遮挡的瞳孔闪光的光源的组合、具有对眼睛/从眼睛反射的闪光的最小数量的遮挡的光源的组合、和/或以其他方式产生合适的眼睛追踪图像的光源的组合以用于执行眼睛追踪。针对给定的用户/环境来选择特定的光源组合可以使得系统能够在更宽泛的范围的条件下操作,所述条件包括在眼睛追踪相机/光源与正在被追踪的眼睛之间存在诸如眼镜之类的光学结构的条件。
在一些实施例中,在本文中所描述的方法和过程可以与一个或多个计算设备的计算系统相联系。特别地,可以将这样的方法和步骤实现为计算机应用程序或服务、应用程序接口(API)、库、和/或其他计算机程序产品。
图7示意性地示出了可以实现在上文中所描述的方法和过程中的一个或多个方法和过程的计算系统700的非限制性实施例。以简化形式示出了计算系统700。计算系统可以采取一个或多个个人计算机、服务器计算机、平板计算机、家庭娱乐计算机、网络计算设备、游戏设备、移动计算设备、移动通信设备(例如,智能电话)、可穿戴计算设备、和/或其他计算设备的形式。例如,计算系统700可以是图1的计算设备104的示例和/或可以执行在图2和图3中所描述的方法。
计算系统700包括逻辑设备702和存储设备704。计算系统700可以可选地包括显示子系统706、输入子系统708、通信子系统710、和/或未在图7中示出的其他组件。
逻辑设备702包括被配置为执行指令的一个或多个物理设备。例如,逻辑设备可以被配置为执行作为一个或多个应用程序、服务、程序、例程、库、对象、组件、数据结构、或其他逻辑构件的一部分的指令。可以实现这样的指令来执行任务、实现数据类型、转换一个或多个组件的状态、实现技术效果、或者以其他方式达到所期望的结果。
逻辑设备702可以包括被配置为执行软件指令的一个或多个处理器。额外地或可替代地,逻辑设备可以包括被配置为执行硬件或固件指令的一个或多个硬件或固件逻辑设备。逻辑设备的处理器可以是单核的或多核的,并且在其上执行的指令可以针对顺序、并行、和/或分布式处理而被配置。逻辑设备的个体组件可以可选地分布在两个或多个分离的设备之间,所述两个或多个分离的设备可以远程定位和/或针对协同处理而被配置。逻辑设备的各种方面可以被虚拟化并且由在云计算配置中所配置的远程可访问的、联网的计算设备来执行。
存储设备704包括一个或多个物理设备,其被配置为保存可以由逻辑设备执行以实现在本文中所描述的方法和过程的指令。当现实了这样的方法和过程时,可以转换存储设备704的状态以例如保存不同的数据。
存储设备704可以包括可移动的和/或内置的设备。存储设备704可以包括光学存储器(例如,CD、DVD、HD-DVD、蓝光盘等)、半导体存储器(例如,RAM、EPROM、EEPROM等)和/或磁存储器(例如,硬盘驱动器、软盘驱动器、磁带驱动器、MRAM等)等。存储设备704可以包括易失性、非易失性、动态、静态、读/写、只读、随机存取、顺序存取、位置可寻址、文件可寻址、和/或内容可寻址的设备。
应当理解的是,存储设备704包括一个或多个物理设备。然而,可以可选地由通信介质(例如,电磁信号、光学信号等)来传播在本文中所描述的没有由物理设备保存了有限的持续时间的指令的方面。
可以将逻辑设备702和存储设备704的方面一起集成到一个或多个硬件逻辑组件中。这样的硬件逻辑组件可以包括例如现场可编程门阵列(FPGS)、程序和应用专用集成电路(PASIC/ASICs)、程序和应用专用标准产品(PSSP/ASSPs)、片上系统(SOC)、以及复杂可编程逻辑设备(CPLDs)。
术语“模块”、“程序”和“引擎”可以用来对被实现为执行特定功能的计算系统700的方面进行描述。在一些情况下,模块、程序、或引擎可以经由执行由存储设备704所保存的指令的逻辑设备702而被实例化。应当理解的是,不同的模块、程序、和/或引擎可以由相同的应用、服务、代码块、对象、库、例程、API、函数等来实例化。同样,相同的模块、程序、和/或引擎可以由不同的应用、服务、代码块、对象、库、例程、API、函数等来实例化。术语“模块”、“程序”、和“引擎”可以包含可执行文件、数据文件、库、驱动程序、脚本、数据库记录等的个体或分组。
应当理解的是,如在本文中所使用的“服务”是跨多个用户会话可执行的应用程序。服务可以对一个或多个系统组件、程序、和/或其他服务是可用的。在一些实现中,服务可以在一个或多个服务器-计算设备上运行。
当被包括时,显示子系统706可以用来呈现由存储设备704所保存的数据的视觉表示。该视觉表示可以采用图形用户界面(GUI)的形式。由于在本文中所描述的方法和过程改变了由存储设备所保存的数据,并且因此转换了存储设备的状态,因此同样可以转换显示子系统706的状态来视觉地表示底层数据的改变。显示子系统706可以包括几乎利用了任何类型的技术的一个或多个显示设备。这样的显示设备可以在共享的封装中与逻辑设备702和/或存储设备704相结合,或者这样的显示设备可以是外围显示设备。
输入子系统708可以包括诸如眼睛追踪系统(例如,图1中的计算设备104的眼睛追踪系统)、键盘、鼠标、触摸屏、手写指向设备、或游戏控制器之类的一个或多个用户输入设备或者与所述一个或多个用户输入接合。在一些实施例中,输入子系统可以包括所选择的自然用户输入(NUI)组件或者与所选择的NUI组件接合。这样的组件可以是集成的或者是外围的,并且输入动作的转换和/或过程可以在板上或板外处理。示例NUI组件可以包括用于话音和/或语音识别的麦克风;用于机器视觉和/或手势识别的红外的、彩色的、立体的、和/或深度相机;头部追踪器,眼睛追踪器,加速度计、和/或用于运动检测和/或意图识别的陀螺仪;以及用于评估大脑活动的电场感应组件。例如,输入子系统可以包括眼睛追踪系统和/或用于执行图2和3的方法200和/或300的眼睛追踪系统的一部分。
当被包括时,通信子系统710可以被配置为将计算系统700与一个或多个其他计算设备通信地进行耦合。通信子系统710可以包括与一个或多个不同的通信协议兼容的有线和/或无线通信设备。作为非限制性示例,通信子系统可以针对经由无线电话网络、或者有线或无线局域网或广域网的通信而被配置。在一些实施例中,通信子系统可以允许计算系统700经由网络(例如,互联网)向其他设备发送消息和/或从其它设备中接收消息。
应当理解的是,在本文中所描述的配置和/或方法本质上是示例性的,并且这些具体实施例和/或示例不应该被理解为限制性意义,这是因为多种变型是可能的。在本文中所描述的具体例程或方法可以表示任意数量的处理策略中的一个或多个处理策略。因此,所示出和/或描述的各种行为可以以所示出和/或描述的顺序来执行、以其他顺序来执行、并行地执行、或者被省略。同样,可以改变上述过程的顺序。
本公开的主题包括各种过程、系统、和配置的全部新颖的和非显而易见的组合和子组合、以及在本文中所公开的其他特征、功能、行为、和/或属性、及其任何和全部等价物。