本読んでゲームしてたら土日が終わった。 最近そこそこ真面目に働いてるから思ったより疲れちゃってなー。
視線検出デバイスのEyeX開発キットが届いた。 モニターの下に貼り付けてUSB3でつなぐと視線を取れる素敵デバイスだ。 予約したのはだいぶ前なので値段忘れたけど1万円くらいだったかな。
簡単な説明書に従って適当にモニター下辺に貼り付けてからソフトを入れたら、ソフトでここに貼れって言われてせっせと貼り直したりしつつも、その後は簡単なキャリブレーションをするだけであっさりと使えるようになった。
押したいボタンを見ながらキーボードのアプリケーションキーを押すとクリックされたことになるよとか言うんだけど、キー押すならその手でクリックするわ。このソフトは使えねぇな……。
SDKを調べてみると高レベルな物と低レベルな物がある模様。低レベルは.NET用とC用があるんだが、高レベルの物はC++とUnity用。Unity用……?.NET用とは違うのか?
ドキュメントを一通り見てみると、高レベルのEyeX SDKの方は見つめてアプリケーションキーを押すとクリックされたことになるという微妙な機能への対応方法などが書いてある。EyeX用の基本ソフトウェアへ接続して協調動作するAPIなのね。一応画面のどこを見てるのかを取得するだけのAPIもあるんだが、そもそもめんどくさそうだ。
一方低レベルのGaze SDKは、視線の素のデータを取れるだけだが、簡単だし目の位置だとか右目左目を別に取れたりだとか、細かいデータの取得ができるようだ。さらにドキュメントにはちゃんとリファレンス的なのもあってしっかりしているし、使い方も簡単そう。こっちをいじろう。
というわけで低レベルのGaze SDKをいじりはじめたんだが、どうも上手く動いてくれない。接続は上手くいってるんだが、その後よくわからないエラーが出て視線データが取得できない。何が悪いんだ……。と思ったらGaze SDKのサンプルも既にそんな状態だった。なんだかわからないがGaze SDKは使えないようだ1。EyeX SDKの方がおすすめとはドキュメントに書いてあったが、まさか動かないとはな。
仕方ないのでEyeX SDKを使ってみるか。 Unity用のSDKを落としたらMono用のサンプルらしき物が入っていてVisualStudioでビルドしたら普通に動いた。Unity用とは別に.NET用とはっきり書いて欲しかったですね……。 しかしこいつのドキュメントはさっぱり無いのでサンプルをそのままパクる以上のことは全くできない。なんとかしてくれよ……。
サンプルをパクってWPFで見ている位置をとりあえず表示してみようとしたが上手く動かない。しばらく悩んだが、一部写経ミスってたところがあっただけで、直したら動いた。パラメータの意味とかどこにも書いてないからわからんのだし、コピペしろってことですねはい。
EyeX SDKの見ている位置データはスクリーン座標系(うちのモニターだと1920x1200)でのXY座標とタイムスタンプだけが飛んできるようだ。Gaze SDKのように左目右目とかなくて単一の点。ソフトでなんか処理した後の値が取れるだけなのね。 軽いフィルタリングとかはやってくれるけど、あってもなくてもあんまり変わったようには見えない。そのくらいぷるぷる震えまくるし、あちこち飛びまくる。どうも半分より下を見ると全然取れないんだけど、キャリブレーションに失敗しただけかも。 ただ、どのあたり見てるなーというのはなんとなくそれっぽくなってる。たとえばスクリーンを横に5分割してどのあたり見てるかなんてくらいの精度なら十分取れそうだ。縦は下半分がダメだったのでまだよくわからんけど、ワイドモニターだとまあ3分割くらいがせいぜいじゃなかろうか。それで十分だろうし。
とりあえず動作は確認したんだけど、これどうしような。
結構動作が気になるあたりが予想外だった。有効にすると赤色LED群がぺかーっと点灯するのでひっそり視線入力は今のところできない。さらに点灯状態では目に赤外線が当たるからか目が痛くなるのが気になる! 単に意識してるから目が疲れるだけかとも思うんだけど、しかし無効にすると露骨に目が楽になるのが怪しいんだよなぁ。 こういうのに結構弱い方な気がするので、多くの人は大丈夫かもしれない。慣れで大丈夫になるならいいんだけど。 ある程度頭を動かしても大丈夫ではあるんだけど、姿勢崩すと追跡範囲から外れちゃうのもつらい。
常時有効にしててどこを見てるかずっと記録するとか面白いかなーと思ったけど、視線検出をどうしても意識せざるを得ない現状ではそんな使い方は難しそうだなぁ。 視線で何かするにしても補助的な操作になるだろうし、なるべく意識しない使い方をしたいんだが。 さーて何に使えばいいだろなー。
EyeXについてはドキュメントが薄くてだいたいにおいてなんだかわからない ↩
monotone 1.1がリリースされてました。1.0から実に3年振りのリリースですね。
正直もう自分では使ってないんですが、せっかくなんでNEWSの訳を貼っておきます。
2014年 5月4日(日) 09:55:54 UTC
1.1をリリースしました。
変更点
- '_MTN/wanted-testresults'では各行に小文字の16進エンコード
された署名キーハッシュを1つ持つことを要求するようになりま
した。
新機能
- 'automate atttributes'がワークスペース無しでも動くようにな
り、特定のリビジョンにおけるマニフェストから指定したファイ
ルの属性を返すようになりました。
- 入力されたリビジョンから入力の中にある他のリビジョンの後に
あるリビジョンを取り除いて返す'erase_descendants' automate
コマンドを追加しました。
- 新しいセレクタ'min(A)'を追加しました。これはAで選択されたリ
ビジョンのうち、他のリビジョンの後にないものだけを返します。
- 新しいセレクタ'not(A)'を追加しました。これは'A'で選択されな
いリビジョンを全て返します。
- 'mtn log'で出力される各リビジョンのcertにおいて、'suspend'
や'testresult'やその他のカスタムcertは新しい'Other certs'
ヘッダの下に表示されるようになりました。
- 新しい競合状態'dropped/modified'が追加され、マージの片方で
はファイルが削除され、もう一方では変更されてるような状態を
解決できるようになりました。以前は変更は常に失われていまし
たが、マージの競合解決中に変更済みのファイルを再度追加する
ことができるようになりました。
- dropped/modified競合状態において'drop'で解決することを記録
する新しい属性'mtn:resolve_conflict'が追加されました。これ
は将来同じ競合が起きることが予測される場合に便利です。たと
えば、上流ではメンテナンスされ続けているファイルがローカル
ブランチではいらないので削除したような場合です。
バグ修正
- MonotoneがBotan 1.10.xを使ってコンパイルされるようになりま
した。(テストリリースの大部分は1.9.yを使ってますが)
- 新しめのglibcのfcntl.hと衝突するのでfile_handle構造体の名前
を変えました。
- gccの"-Werror=format-security"オプションを使っても問題無く
コンパイルできるようになりました。
- ワークスペースがNFS上にある場合のような、デバイスを跨いだフ
ァイルのリネームを修正しました。
- Solarisでのファイルの再帰削除を修正しました。
- inodeprintsが有効な時にリバートに失敗するファイルがあるのを
修正しました。
- Windowsでのnetsyncで大きなファイルを送ろうとすると途中で中
断されてしまうのを修正しました。
- Mac OS Xのmktimeにおいて1901年以前の日付で64bit関連の問題が
あったのを修正しました。
- ssh_agentのソケットパスにダッシュが入ってても動くようにしま
した。
- 後方互換性無しでコンパイルされたLua 5.2でも使えるようにしま
した。
- boostの新しめのバージョンに対応するため、いろいろ修正を入れ
ました。
- mtn addとmtn listに--recursiveや--unknownオプションを指定し
た場合の一貫性を強化しました。
- ルートをdisapproveしようとした時のエラーメッセージをわかりや
すくしました。
- MAXPATHLENが定義されてないプラットフォーム(GNU/Hurdなど)でも
コンパイルできるようにしました。
- C++11を有効にしたg++やclang++でもコンパイルできるようにしま
した。
- DNSでの名前解決がぶっこわれてて全く名前解決できないような環
境でもテスト群が動くようにしました。
- テストがスペースが含まれるディレクトリ内でも動くようになり、
他にもテスト結果が安定するようにいろいろとテスト群に細工を
入れました。
内部的な変更
- 正規表現の速度とメモリ使用量が全体的に改善しました。これは
".mtn-ignore"ファイルを使う"mtn ls unknown"や"mtm add"など
のコマンドやLuaフックでの"regex.seaech"の呼び出しに効いてき
ます。
その他の変更
- 'mtn diff'に古いリビジョンIDと新しいリビジョンIDの両方を指
定した場合に、diffヘッダにそれらを出力するようになりました。
- contribにVim用のシンタックスファイルと出力に色付けするスク
リプトを追加しました。
見た感じそんなに大きな改善などは無い模様。 今後の開発はどうなんだろうなぁ。MLはC++11に移行するかどうかで盛り上がってたけど、それくらいしか話題ないし……。