/eyetrack

Primary LanguagePythonMIT LicenseMIT

Webカメラでeye tracking(アイトラッキング・視線計測)をする【Windows10】

https://github.com/sassa4771/eyetrack/tree/main/Eye_Tracking_Program_by_dlib
ここのファイルの中身説明↑

Qiita

https://qiita.com/sassa4771/items/fbfb0012744350cf4d93

このGitHubでできること

・webカメラを利用した視線計測(以下の動画のイメージ)

アイトラッキング完成イメージ

目次

①eyetracking(アイトラッキング・視線計測)とは?
②必要なライブラリ・動作環境(※とりあえず動かしたい人はここから)
③dlibを使った顔ランドマーク検出
④瞳の区画切り出し
⑤機械学習で検出(失敗)
⑥画像処理で検出(成功)
⑦その他試したこと(Docker接続など)
⑧完成

①eyetracking(アイトラッキング・視線計測)とは?

【eye trackingとは】 eye trackingとは、ユーザーの視線の動きを計測し分析するアイトラッキング(視線計測)技術のこと。

ヒトの眼球**を分析し、視覚的注意などを明らかにする生体計測手法です。
ヒトの視線の場所(注視点)や動きを、アイトラッカーと呼ばれる専門の機械で計測。
取得したデータを分析し、よく見られていた場所や、見る順序、反対に全く見られてい
なかった場所などを明らかにします。

心理学や認知科学などの学術領域のほか、マーケティング領域、観光分野、医療・教育・
スポーツの研究など、さまざまな分野で利活用されているほか、近年ではVR空間内での計測や
AIによる視線推定などの研究も盛んに行われており、今後も成長が期待されている技術です。
(参考:https://neu-brains.co.jp/information/case-study/2020/09/25/1489.html)

要するに

視線がどこにあるかわかる!


【製品】
製品は、Tobiが有名
https://www.tobiipro.com/ja/
https://www.tobiipro.com/ja/service-support/learning-center/eye-tracking-essentials/what-is-dark-and-bright-pupil-tracking/

【瞳孔検出方法】
赤外線を利用した検出方法が主流
・file:///C:/Users/sasat/Downloads/IPSJ-Z69-5P-08.pdf
https://www.tobiipro.com/ja/service-support/learning-center/eye-tracking-essentials/what-is-dark-and-bright-pupil-tracking/

②必要なライブラリ・動作環境

【動作環境:(Let's Note)】
OS:windows10 Pro
CPU:Corei7
メモリ:12GB

【必要なライブラリ】
・dlib ・opencv ・numpy

【Anaconda環境インストールコマンド】
使用した環境はeyetrack.yamlにあります。

cd 【eyetrack.yamlがあるとディレクトリ】
conda env create -n eyetrack -f eyetrack.yaml

環境をインストールしたらmainファイルのrun.batを起動するとソフトが起動できる。

③dlibを使った顔ランドマーク検出

【dlibのインストール】
dlibの顔ランドマーク検出
※インストールが若干めんどくさい(windowsの場合)
windowsでdlibを利用するにはPowerShellからCMakeをインストールしないといけない。

参考にしたサイト:https://rikoubou.hatenablog.com/entry/2019/06/17/160248
【CMakeダウンロードサイト】:https://cmake.org/download/

【opencvのダウンロード】
参考サイト:https://qiita.com/fiftystorm36/items/1a285b5fbf99f8ac82eb
よくコマンドを忘れるので、注意。

④瞳の区画切り出し

【瞳の区画切り出し】
瞳の区画切り出し

【opencvで画像の切り出し方法】
参考サイト:https://qiita.com/mo256man/items/e36797f9f44a64caf81c

【opencvで画像サイズの拡大方法】
参考サイト:https://qiita.com/kenfukaya/items/dfa548309c301c7087c4

【opencvウィンドウの変更】
参考サイト:https://qiita.com/Kazuhito/items/b2ebd9f9010f1ffcac5b
ウィンドウが表示される場所を固定するため。

【int型をstring型に変更する方法】
参考サイト:https://www.javadrive.jp/python/string/index9.html

【opencv画像を指定して保存】
参考サイト:https://www.it-swarm-ja.tech/ja/python/opencv%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%81%AB%E7%94%BB%E5%83%8F%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B/830422001/

【画像の二値化】
参考サイト:https://qiita.com/tokkuri/items/ad5e858cbff8159829e9

⑤機械学習で検出(失敗)

https://github.com/sassa4771/eyetrack/tree/main/tensorflow_pictures
↑ここのファイルの中身においてある。

GoogleのTeachable Machineを利用としたが、dlibに使うnumpyと機械学習で使うTensorflowのnumpyが合わなかったため断念。
Teachable Machine:https://teachablemachine.withgoogle.com/

keras==2.2.4,tensorflow==1.15.0,pillow==7.0.0 をダウンロードしないと動かないらしい。

⑥画像処理で検出(成功)

【画像処理で検出】
画像処理で検出

【平滑化、二値化、輪郭の抽出】
参考サイト:https://qiita.com/ankomotch/items/74884b0ca24b739159c0

【抽出した座標に長方形・円を表示】
参考サイト:https://note.nkmk.me/python-opencv-draw-function/

画像処理で検出

⑦その他試したこと(Docker接続など)

【Docker】
opencvとnumpyのインストールで苦戦したので、環境のリセットが容易なDockerをしようと試みた。
Windows版のDockerでは、カメラデバイスを検出できないため断念。
(一応VirtualBoxを使えばできるらしいが、せっかくのコンテナなのにホスト型の仮想環境を使うのはナンセンスと思った。)

【opencvのインポートでエラー】

ImportError: numpy.core.multiarray failed to import

がでる。

opencvとnumpyのバージョンを合わせると解決する。


・pip uninstall opencv-python
・pip uninstall numpy

・conda uninstall opencv-python
・conda uninstall numpy

でアンインストールしてから、

・pip install opencv-python==3.4.2.17 numpy==1.14.5
をする。
※↑python=3.6じゃないとインストールできない

⑧完成

画像処理で検出

次は、web版でopencvとか使いたい。

追記

【瞬きの判定を入れた】 瞬き判定