到目前为止我已经能够准确地检测瞳孔和眼角。
您可以在此处看到我在回答自己的问题时上传的一些快照:
执行稳定的眼角检测
这是我到目前为止所做的。
我通过查看 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 坐标值的巨大差异让我很烦恼。
周一是最后的演讲。
在这种方法之后,我推测了另一种方法:
Calibration is done as in the first method. I would detect the motion of the gaze, and its direction. Say, given any two points of pupil center’s location, P and Q, where P is the first gaze point, Q is the second, then we calculate the direction and length of the line PQ.
假设这条线段的长度是L。然后我们将L缩放到屏幕上
比例,假设屏幕比例中的 L 是 D,并且给定凝视移动的方向,我们
将屏幕上的光标从最后一个静止点(即 R、D 距离)移动到新点 S,该点将被计算为长度为 D 的线段的终点和起点 S。图形表示为图中给出。因此,基本上,我不会将任何注视数据映射到屏幕点,我基本上会跟踪注视,并将其转换为“推送”以应用于屏幕上的光标。
但我还没有实现它。因为它实际上没有将视线映射到屏幕坐标,因此可能是错误的。该理论的动机源自 sourceforge 上的 eViacam 项目 - 它们基本上会跟踪您的脸部,并相应地移动鼠标。在校准中,他们只是计算你的脸沿着轴移动了多少。
底线:因此,如果你们中的任何人对如何从完美处理的眼睛图像中检测用户的凝视有任何想法 -检测到瞳孔中心和眼角的一张,请告诉!我只有大约一天的时间,我知道已经晚了,但我只需要任何可以帮助我的神奇想法。