
OpenCV Eye Tracking — Webカメラの映像から瞳の位置を検出し、目がどの方向(上下左右)を向いているかをリアルタイムに推定する、心理学研究向けの視線分析プロトタイプ。
OpenCV
dlib
Python
コンピュータビジョン
個人開発
プラットフォーム
一般的なWebカメラのみ。専用のアイトラッカーは不要
検出手法
dlibの顔器官検出モデル(68点ランドマーク)。追加の学習・キャリブレーションなし
担当領域
個人開発:企画から実装まですべて一人で担当
公開・発表
GitHubで公開(gakutosasabe/OpenCVEyeTracking):5 stars・1 fork
心理学研究において視線分析(どこを見ているか)は重要なデータになるが、専用のアイトラッカーは高価で導入のハードルが高い。そこで、OpenCVとPythonの練習を兼ねて「一般的なWebカメラだけで、簡易的な視線方向の推定ができないか」という個人開発として着手した。
顔認識ライブラリdlibで検出した目の領域から、追加の学習やキャリブレーションなしに瞳の位置を割り出し、それを目の中心と比較して視線方向(上/下/左/右)に変換した。
アプローチ:追加のハードウェアも学習データも使わず、Webカメラとdlibのランドマーク、単純な二値化だけで実現する。
個人開発(GitHub: gakutosasabe/OpenCVEyeTracking)。企画から実装まですべて一人で担当。
顔・目の検出
dlib(顔器官検出用の学習済みモデルshape_predictor_68_face_landmarks.datを使用)で、顔の68点のランドマークから左右の目の座標を取得。
瞳の検出
切り出した目の画像を二値化し、黒目部分(閾値以下のピクセル)の重心を瞳の座標として算出。
可視化
検出結果をOpenCVでカメラ映像にオーバーレイ表示(瞳の位置を青い点、目の中心を水色の点、目の中心に対する瞳の相対座標を画面下に表示)。
視線方向の推定:
目の領域を左右に三分割して「Left / Straight / Right」を、上下に三分割して「Up / Middle / Down」を定義。
瞳の座標がどの区画に入るかを照合し、左右の目それぞれの視線方向を出力。
瞳の検出は「目の画像を二値化し、黒い部分の重心を取る」という単純な手法を採用。追加の学習なしでも一定の精度が出ることを確認した。
一方で、周囲の明るさに二値化の閾値が大きく左右されることが分かり、環境が変わるたびに閾値調整が必要という制約が明らかになった。
実装後に、目の画像にハフ変換をかけて円(瞳)を検出する手法が主流であることを知り、精度向上の余地として認識した(今回は未実装)。
動作するプロトタイプ
Webカメラ映像から瞳の位置検出・視線方向(上下左右)推定までを、追加ハードウェアなしで動作するプロトタイプとして完成。
外部からの反応
GitHubで公開し、5 stars・1 forkの反応を獲得。
得られたスキル
「心理学研究にはかなり有用なツールになりそう」という手応えを得て、以降の研究・開発でのOpenCV活用につながる技術習得の機会となった。
二値化ベースの瞳検出は実装が簡単な一方、照明条件への依存という明確な限界があることを実感した。
より頑健な検出のためには、ハフ変換による円検出や、Mediapipeなど学習済みモデルベースの手法との比較検証が今後の課題。
GitHubで見る