9

到目前为止,我已经能够准确地检测到瞳孔和眼角。您可以在这里看到我在回答我自己的问题时上传的一些快照:

执行稳定的眼角检测

这是我到目前为止所做的。我通过查看 TLCP、TRCP 和 BLCP 来校准用户的视线,其中

CP = calibration point; a screen point used for calibration
B = bottom
T = top
L= left
R = right
gaze_width = TRCP.x - TLCP.x

gaze_height = BLCP.y- TLCP.y

而我通过看那些CP得到的对应凝视点被称为GP

凝视点GP的计算:

我从当前瞳孔中心的位置减去 TLGP 的纵坐标值,因为注视点必须落在我希望你理解的假设矩形中,它真的很简单。

我使用基本缩放系统将从瞳孔中心位置计算的凝视点线性映射到屏幕点,其中比例计算如下:

scaleX = screen_width/gaze_width
scaleY = screen_height/gaze_height

对于任何注视点 P(x,y),我将相应的屏幕点 Q(m,n) 计算为:

m = scaleX*x
n = scaleY*y

但问题是,即使在几乎完美的瞳孔检测之后(几乎是因为在光线不足的情况下它会产生误报。但我打算将其置于限制之下,因为我无法处理它,我没有足够的时间),我' m 的视线宽度和视线高度仍然很差。

这是一个测试运行日志:

DO_CAL= True

Gaze Parameters:

TLGP = (38, 26) | TRGP = (20, 22) | BLGP = (39, 33)
screen height = 768 screen width = 1366

gaze height = 7 gaze width = 18

scales: X = 75.8888888889 | Y = 109.714285714
Thing on = True

Gaze point = (5, 3)
Screen point: (987, 329)

Gaze point = (5, 3)
Screen point: (987, 329)

Gaze point = (7, 5)
Screen point: (835, 549)

Thing on = False

TLGP = (37, 24) | TRGP = (22, 22) | BLGP = (35, 29)
screen height = 768 screen width = 1366

gaze height = 5 gaze width = 15
scales: X = 91.0666666667 | Y = 153.6
Thing on = True

Gaze point = (12, 3)
Screen point: (1093, 461)

Gaze point = (12, 3)
Screen point: (1093, 461)

ESC pressed

只需查看注视点及其对应的注视检测屏幕点(在它们下方)。x,y 坐标值的巨大差异让我抓狂。星期一是最后的演讲。

在这种方法之后,我理论化了另一种方法:

校准与第一种方法相同。我会检测凝视的运动及其方向。假设给定瞳孔中心位置的任意两个点 P 和 Q,其中 P 是第一个注视点,Q 是第二个注视点,然后我们计算线 PQ 的方向和长度。 用于注视估计的推式方法

假设这条线段的长度是 L。然后我们将 L 缩放到屏幕比例,假设 L 是屏幕比例中的 D,并且给定注视移动的方向,我们将屏幕上的光标从其最后一个静止点移动,说R,D距离,到一个新的点S,该点将被计算为长度为D的线段的终点,和起点S。形象化的表示如图所示。因此,基本上,我不会将任何凝视数据映射到屏幕点,我基本上是跟踪凝视,并将其转换为“推送”以应用于屏幕上的光标。但我还没有实现它。因为它实际上并没有将视线映射到屏幕坐标,因此可能是错误的。这个理论的动机来自于 sourceforge 上的 eViacam 项目——它们基本上跟踪你的脸,并相应地移动鼠标。在校准中,他们只是计算你的脸沿着轴移动了多少。

底线:因此,如果你们中的任何人对如何从完美处理的眼睛图像中检测用户的注视有任何想法 -一个检测到瞳孔中心和眼角的图像,请告诉!我只有大约一天的时间,我知道已经很晚了,但我只需要任何可以帮助我的神奇想法。

4

1 回答 1

6

这不是答案,但不可能作为评论发表。你回答后我会删除它。

你确定你有所有必要的参数吗?

考虑下图:

在此处输入图像描述

如果您的相机检测到 {K, J, Q} 处的角和瞳孔,您如何区分另一个三元组 {F, E, O}?请注意,测量值是相同的,但由黑色箭头表示的注视方向完全不同。

注意:两条黑线和红线是从单个相机点绘制的,位于可见区域之外。

于 2012-04-28T22:20:19.197 回答