これまでのところ、瞳孔と目尻を正確に検出できました。ここで、私自身の質問への回答でアップロードしたスナップをいくつか見ることができます。
これが私がこれまでに行ったことです。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
しかし、問題は、ほぼ完璧な瞳孔検出の後でも (ほとんどの場合、照明が不十分な場合に誤検知が発生するためです。しかし、作業できないため、十分な時間がないため、制限の下に置くつもりです)、i' 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 縦座標の値の大きな違いは、私を悩ませています。月曜日は最終発表会です。
このアプローチの後、次の別のアプローチを理論化しました。
キャリブレーションは、最初の方法と同様に行われます。視線の動きとその方向を検出します。たとえば、瞳孔中心の任意の 2 点 P と Q (P は最初の注視点、Q は 2 番目の注視点) が与えられた場合、線 PQ の方向と長さを計算します。
この線分の長さを L と仮定します。次に、L を画面の縦横比に合わせてスケーリングします。たとえば、L を画面スケールで D とします。視線の移動方向を考慮して、画面上のカーソルを最後の静止点から移動します。長さ D の線分の終点として計算される新しい点 S と始点 S までの距離を R、D とします。比喩的な表現を図に示します。したがって、基本的に、視線データをスクリーン ポイントにマッピングしません。基本的に視線を追跡し、それを「プッシュ」に変換して画面上のカーソルに適用します。しかし、私はまだそれを実装していません。実際には視線を画面座標にマッピングしていないため、誤っている可能性があります。この理論の動機は、sourceforge の eViacam プロジェクトから得られました。それに応じてマウスを動かします。キャリブレーションでは、軸に沿って顔がどれだけ動くかを計算するだけです。
結論: したがって、完全に処理された目の画像 (瞳孔の中心と目尻が検出された画像) からユーザーの視線を検出する方法についてアイデアをお持ちの方がいらっしゃいましたら、教えてください。私はちょうど約 1 日を持っています、そして私はそれが遅いことを知っていますが、私を助けることができる魔法のアイデアが必要です.