先週の学会で発表(といってもデモですが)したときに「視線追跡装置(EyeTribeね)の伝送遅延はないのか?」という質問が多数あり、確かに「一瞬で」くらいしか認識しておらず、こりゃ調べておかないとまずいな。。。と思い調べてみたことです。
EyeTribeはもう買えないデバイスなので書いたところで誰得?なわけですが、購入済みの方もいらっしゃるでしょうし、せっかく調べたのでメモしておきたいと思います。
EyeTribeは軽量小型ですが、装置単体で画面上の視線位置を計測し、さらにそのデータをUSB3.0を介してPC上で稼働するクライアントソフトに通信する仕事をしてくれます。
Developers Guide | eyetribe-docs
受信した1つ1つの視線データは以下のようなJSON形式で送られてきます。
その中にtimestampという項目があるでしょう?これはEyeTribeが視線データを作成?した日時(ミリ秒まで)を表しています。
このtimestampの日時と、PC側のクライアントソフトで受信した日時がどれだけ差があるのか?を調べてみようというのが本エントリーの趣旨なんです。
わかったようなわからないような話かもしれませんが。。。
まず、timestampを採取して、日時に変換してみると、普通に採取した日時を表していました。EyeTribe側で時計を持っていて、その時計でつけたtimestampのはずですが、ほぼPCの時刻と同じでした。
次に、PCで受信したときの時刻と比較してみました。。。。結果的にはPCの方が5ミリ秒くらい遅い感じでした。
いつどうやってEyeTribeとPCの時計をあわせているのかわかりませんが、この採取したデータだけみれば「1ミリ秒以下でEyeTrbieとPCの時計が同期していて、採取したデータが送られてくるまでの伝送処理(遅延)で5msかかっている」という仮説が想像できます。
ほんまかいな。。。?
EyeTribeが視線データにどういう仕組みでtimestampをつけるのかはわからないので、その正確性をどうやって調べればいいんだろう。。。と考えました。
上記の仮説が正しいとすれば「他のEyeTribeでも同じ時刻差になるはず」です。もし、PCとEyeTribeで時計が同期していなければ時刻差には差がでるはずと考えたのです。
幸いなことに研究室にEyeTribeが4台ありますので、このうち開封済みの3台を使って視線データを採取しました。
1台につき1000個の視線データを採取しました。そして、1つずつの視線データについてクライアントソフトで受信したPCの時刻との差を記録しました。
3台のデータに対して正規性、等分散性を確認すると、正規性なし、等分散でもありませんでした(5%水準)。
仕上げに、等分散を仮定しない(ウェルチの方法の拡張)で分散分析をした結果、5%水準で統計的に群間に差がないことが確認できました。
なんのこっちゃ?という感じと思いますが、この3つのEyeTribe(標本データ)だけでなく、他の装置(母集団)についても「
EyeTribeのtimestampとPCの時刻の差」には差がない、つまり他の装置も同様に5ミリ秒程度の遅延になる(←ここまでは言いすぎとは思いますが)ということがわかった次第です。
ちなみに、3台の「EyeTribeのtimestampとPCの時刻の差」の中央値はすべて5.000ミリ秒で、平均値は5.417から5.579ミリ秒でした。
今回、発表した研究では5ミリ秒は無視できる数値なので、ほぼ同時と考えていいという結果になりました。
ただ、下記はある装置の「EyeTribeのtimestampとPCの時刻の差」の箱ひげ図なのですが、数は少ないですが外れ値が広く分布しているのがわかると思います。この差が問題になるような場合は、PC側の時刻ではなくEyeTribeのtimestampを使うなり、PCの時刻を補正するなりしないといけないだろうな。。。とは思いました。
以上、メモでした。