bad*_*nts 9 opencv image-processing human-computer-interface computer-vision eye-tracking
到目前为止,我已经能够准确地检测出瞳孔和眼角.您可以在我的回答中看到我上传的一些快照:
这是我到目前为止所做的.我通过查看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
Run Code Online (Sandbox Code Playgroud)
通过查看这些CP得到的相应凝视点称为GP
计算凝视点GP:
我从当前瞳孔中心的位置减去TLGP的纵坐标值,因为凝视点必须落在假设的矩形中,我希望你理解它,它真的非常简单.
我已经使用基本缩放系统将从瞳孔中心位置计算的凝视点线性映射到屏幕点,其中比例计算如下:
scaleX = screen_width/gaze_width
scaleY = screen_height/gaze_height
Run Code Online (Sandbox Code Playgroud)
并且对于任何凝视点P(x,y),我将相应的屏幕点Q(m,n)计算为:
m = scaleX*x
n = scaleY*y
Run Code Online (Sandbox Code Playgroud)
但问题是,即使几乎完美的瞳孔检测(几乎是因为在光线不足的情况下,它会产生误报.但我打算将其置于限制之下,因为我无法使用它,我没有足够的时间),我仍然会得到较差的注视宽度和注视高度.
这是一个测试运行日志:
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
Run Code Online (Sandbox Code Playgroud)
只需看一下凝视点及其相应的凝视检测屏幕点(在它们下面).x,y坐标值的巨大差异让我感到困惑.星期一是最后的演讲.
在这种方法之后,我将另一个理论化为:
校准按照第一种方法完成.我会发现凝视的动作及其方向.假设,给定瞳孔中心位置的任意两点P和Q,其中P是第一个凝视点,Q是第二个,然后我们计算线PQ的方向和长度.

让我们假设这个线段的长度是L.然后我们将L缩放到屏幕比例,比如L在屏幕比例中是D,并且给定注视移动的方向,我们将光标从其最后的休息点移动到屏幕上,将R,D距离称为新点S,其将被计算为长度为D的线段的终点,以及起点S.图中给出了图形表示.因此,基本上,我没有将任何凝视数据映射到屏幕点,我基本上跟踪凝视,并将其转换为"推"以应用于屏幕上的光标.但我还没有实现它.因为它实际上没有将凝视映射到屏幕坐标,因此可能是错误的.这个理论的动机来源于eforkforam sourceforge项目 - 它们基本上跟踪你的脸部,并相应地移动鼠标.在校准中,它们只计算您的脸部沿轴移动的程度.
结论:如果你们中的任何一个人对如何从完美处理过的眼睛图像中检测到用户的注视有任何想法 - 一个检测到瞳孔中心和眼角,请告诉我们!我已经有一天了,我知道它已经很晚了,但我只需要任何可以帮助我的神奇想法.
这不是答案,但不可能发表评论.我会在你回答后删除它.
你确定你有所有必要的参数吗?
请考虑以下图表:

如果您的相机在{K,J,Q}处检测到角落和瞳孔,您如何区分另一个三倍{F,E,O}?请注意,这些措施是相同的,但由黑色箭头表示的凝视方向完全不同.
注意:两条黑线和红线是从单个摄像机点绘制的,位于可见区域之外.