nyanpyou Note

主な目的は調べたり作ったりしたプログラミング備忘録(予定)

視線入力で将棋やチェスやカードゲームを遊べるようにしてみたい その2

いわゆる進捗報告。

1週間かかったが、無事tobii社からTobii Stream Engine APIの使用許可が頂けた。

申請は以下のような内容で送信した。
企業ではなく個人での申請だし、実名ではなくイニシャルで名前を書いているし、申請内容の英語も間違っている(個人開発と書きたかったが多分これだと自己啓発…w)状態でも許可を貰えたので、もし個人で視線入力デバイスを使ったソフトを作ろうと考えている方の参考になれば幸いだ。

f:id:nyanpyou106:20211104194928p:plain
こんな内容でも意外と寛大に許可を貰えた

現在Tobii Stream Engine APIを導入し、マウスの移動をTobii Eye Tracker 5で読み取った視線で行うところまで進めている。
コード諸々はgithubリポジトリに。

github.com

以下には公式のサンプルコードを動かすまでに必要だったことを記載しておく。

developer.tobii.com

まず、サンプルコード「Super simple C# .NET application」をVisualStudioで作成中のWPFアプリケーションに投入しそのまま実行すると

エラー    CS0246  型または名前空間の名前 'tobii_calibration_stimulus_points_t' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)
eye_controller_for_game\検証用\stream_engine_windows_x64_4.1.0.3\bindings\Tobii.StreamEngine.Interop.cs  475 アクティブ

が出る。サンプルコードにはこの関数を使用する部分は無かったため、該当部分をコメントアウトして対処。

次に、Debug.Assertが.NETだとそのままだと使えずコンパイルが通らないので

using System.Diagnostics;

を追加。

さらに、

エラー    CS1503  引数 2: は 'out System.Windows.Documents.List' から 'out System.Collections.Generic.List<string>' へ変換することはできません

がサンプルコード中の

List urls;
result = Interop.tobii_enumerate_local_device_urls(apiContext, out urls);

部分に出るので、Tobii.StreamEngine.Interop.cs内のtobii_enumerate_local_device_urlsの定義に従い

List<String> urls;

に変更。

最後に、

例外がスローされました: 'System.DllNotFoundException' (検証用.dll の中)
型 'System.DllNotFoundException' のハンドルされていない例外が 検証用.dll で発生しました
Unable to load DLL 'tobii_stream_engine' or one of its dependencies: 指定されたモジュールが見つかりません。 (0x8007007E)

のエラーが発生するため、tobii_stream_engine.dllを参照できるようにする。
参照を追加しようとVisualソリューションエクスプローラーでプロジェクトを右クリック→追加→プロジェクト参照→参照からtobii_stream_engine.dllを追加しようとしても、「参照が無効であるか、サポートされていません」と表示されて追加出来ない。

従って、以下を参考にtobii_stream_engine.dllをプロジェクト内のexeファイルと同じディレクトリ(\bin\Debug\net5.0-windows)に直接置くと、無事動作するようになる。

so-zou.jp

このAPIから得られる画面の注視座標は、左上を(0,0)、右下を(1,1)と設定してあるようなので、実際の画面上の座標に直すには画面の解像度を乗算する必要がある。

今回はここまで。