2019年3月22日金曜日

【EyeTracking】Tobii Eye Tracker 4Cで視点のヒートマップを作成する



先日、Tobii Eye Tracker 4Cを使う機会があり、車の画像のどの部分を人は重点的に見ているか調べることになりました。

ネット上で参考になる情報を色々調べましたが、もともとゲーム用として販売されている4Cではなかなかヒートマップを作成する事例が少ないみたいですね。

そんななか、唯一ヒットした下記ブログを参考に、ヒートマップを作成することができました。途中、躓いた個所もありますので、忘備録も兼ねて記載します。

ちなみに使用している環境はWindows10です。

Step.1 Visual Studio2017 Comunityのインストール

・公式サイトから最新版をインストール。

Step.2 Tobii Eye Tracking Core Softwareのインストール

・Tobiiの公式サイトから上記ソフトウェアをインストール。
・続けて、ドライバの設定やキャリブレーションを済ませます。
・このあたりのやり方はネット上で情報があるので省略。

Step.3 Python2.7のインストール

・Pythonの公式サイトから2.Xの方の最新版をインストール。
・続けて、easy_installとpipもインストール。
・このあたりのやり方もネット上で情報があるので省略。

Step.4 heatmap.pyのインストール

・下記サイトから、ヒートマップ画像の作成に必要なheatmap.pyをダウンロードしてインストール。


Step.5 Python Imaging Libraryのインストール

・ネットからダウンロードしてインストールします。

Step.6 pyinstaller.pyのインストール

・他のPCに配付するため、exeファイル化する場合はインストール。お好みで。

以上でインストール関係は終了。続いてコード編集に移ります。

Step.7 EyeRecorder.slnの編集

 ・参考にさせて頂いた下記githubサイトから適当なフォルダにダウンロードし、slnファイルをVisual Studioで開きます。


<Nugetパッケージの追加>

・そのままだと参照にある一部のリンクが見つからず、ビルドがエラーになります。そこで、メインウィンドウの「ツール」タブ⇒Nugetパッケージマネージャー⇒ソリューションのNugetパッケージの管理を選択し、表示されたウィンドウ内で下記二つを実行します。

 ・Tobii.EyeX.Clientを検索してインストール
 ・Tobii.EyeX.Frameworkを検索してインストール

※旧バージョンがインストール済の場合は更新を忘れずに。


終わると上記のような画面になり、ビルドが正常終了できるようになります。

<デザインウィンドウの編集>

・視点を計測するとき、車の画像を全画面で表示すると記録/停止を操作するウィンドウが後ろに隠れてしまうので、常に手前に出るようにします。

・ソリューションエクスプローラーからSettingForm.csを選択し、デザイン編集画面を表示します。プロパティウィンドウのTop MostをTrueに変更。

・続けて、TriggerForm.csのデザイン編集画面を表示し、同じくプロパティのTop MostをTrueにします。

<Trigger出力の変更>

・現時点ですでにビルドしたexeファイルを実行して視点計測が可能ですが、ヒートマップを作成するpythonの実行段階でエラーが発生します。

・参考プログラムではTrigger Onで"T"がcsvファイルに出力される仕様ですが、これをTrigger Offで0、Trigger Onで1を出力するように変更します。

ソリューションエクスプローラーからFileIO.csを開き、下記変更を加えます。
27行:
旧:sw.WriteLine("{0:F0},{1:F1},{2:F1}, T", time, x, y);
新:sw.WriteLine("{0:F0},{1:F1},{2:F1}, 1", time, x, y);

同じく31行:
旧:sw.WriteLine("{0:F0},{1:F1},{2:F1}, ", time, x, y);
新:sw.WriteLine("{0:F0},{1:F1},{2:F1}, 0", time, x, y);

以上で、ビルドすれば完成です。

Step.8 ヒートマップの作成

・冒頭のサイトに記載されているpythonコードをお使いのEditorで開きます。

<monitor_sizeの変更>

・参考ブログのコメント欄にあるように、モニターの縦と横の数値が逆になっているため、16行目を下記のように変更します。

旧 : monitor_size = [int(float(row[3])), int(float(row[1]))]
新:monitor_size = [int(float(row[1])), int(float(row[3]))]

<Triggerのon/off設定>

・続けて18行目を下記のように変更します。

旧 : if len(row) > 3 and row[3] == "T":
新 : if len(row) > 3 and int(float(row[3])) == 1:

・27行目以降のdotsizeやopacityはお好みで変更します。

以上が終わったら名前を付けて保存し、コンソール画面で実行するとpngファイルが生成します。

Step.9 ヒートマップと画像の合成

Python Imaging Libraryを使うと画像の合成が可能なようです。
Photoshopがあれば必要はないので省略します。
画像処理ソフトがない場合は使用を推奨。

Step.10 Pythonのexeファイル化

・Step.8で作成した、ヒートマップ生成プログラムをpyinstaller.pyを使ってexeファイル化することで、pythonがインストールされていない端末でも実行させることができます。

・pyinstaller.pyの使い方はネット上にあるので省略しますが、一つのファイルにまとめるオプションを付けるとheatmap.pyが読み込まれない不具合が発生します。

・そこで、Step.4でダウンロードして解凍した中身のデータ(heatmap-2.2.1のフォルダの中身すべて)をdistフォルダ内にコピーします。

・次に、コンソール画面でonefileオプションは付けずにpyinstaller.pyを実行します。

これでdistフォルダ内のexeファイルを実行するとpngファイルが出力されます。

以上で手順の記載は終わります。
もしうまくいかない場合はコメント欄に記載をお願いします。

0 件のコメント:

コメントを投稿

【Grasshopper_105】三角形の中に円を敷き詰める方法

今年もいよいよ残すところあと1カ月を切りました。今年最後の投稿となりますが、三角形の枠の中に円を敷き詰めるサンプルの作り方を書いてみたいと思います。三角形が正三角形に近いほどドットの間隔が一定になります。面積がバラバラだと密度の濃淡が出てしまうので調整が難しいかもしれません。