【问题标题】:gaze estimation from an image of an eye从眼睛的图像进行凝视估计
【发布时间】:2012-05-09 01:19:12
【问题描述】:

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

Performing stable eye corner detection

这是我到目前为止所做的。 我通过查看 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

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

这是一个测试运行日志:

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 项目——它们基本上跟踪你的脸,并相应地移动鼠标。在校准时,他们只是计算你的脸沿着轴移动了多少。

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

【问题讨论】:

    标签: image-processing opencv computer-vision human-computer-interface eye-tracking


    【解决方案1】:

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

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

    考虑下图:

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

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

    【讨论】:

    • 首先,我使用正面人脸级联进行人脸检测,因此不会检测到 eye_a 眼睛。其次,我通过跟踪瞳孔中心相对于眼角来获得不同的注视点。实际上到目前为止,我只是使用图像原点作为参考点,但确实会出现偏差。用户在从特定位置校准后不应该移动他的头部的限制,不能允许有两个不同的视点,即使它们来自正面(即,类似于 eye_b 但向左或右侧)。用户必须从相同的头部位置注视
    • 伟大的图画!你用的是哪个程序?
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2011-05-02
    • 2023-03-28
    • 2011-10-29
    • 2019-02-26
    • 2012-10-27
    • 2011-08-22
    相关资源
    最近更新 更多