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)と設定してあるようなので、実際の画面上の座標に直すには画面の解像度を乗算する必要がある。

今回はここまで。

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

お久しぶりです。

久しぶりにブログを更新したと思ったらけったいなことを言い出したなという感じだが、きっかけは体が動かなくなる病気の患者の方についての記事を読んだことと、それに関連してロボット発明家の吉藤オリィさんの記事を読んだこと。

note.com

自分はゲームが好きで、特に対戦ゲームを好んで遊ぶ。ネット上で知らない誰かと対戦している時、そこには確かに相手の人の性格や意思を感じることができる。自分はこの点にこそ、1人用ゲームとは違う対戦ゲームの魅力があると思っている。

将来もし自分や身近な人が動けなくなるような病気になったとしても、どこにいても人と関わって、自己表現ができる対戦ゲームという娯楽を自由に楽しめるようにしたい。そのためにまずは今手に入る材料を使って自分で作ってみる。
吉藤さんのインタビューや寝たきりになった方達の記事を読んで感じたことを上手く言葉に出来ないが、こんな理由で取り掛かることにした。
仮に完成しなかったとしても、試してみた経験と発想と思いを残すことが出来れば価値がある。それくらいの感覚の方が自分は気負わずに動ける気がする。

まずは将棋、チェス、カードゲームなどの対戦ゲームを遊ぶにあたって最低限必要になりそうな機能を挙げてみる。

webブラウザでのブラウジングに求められるものとほぼ変わらないが、重要なのはドラッグ&ドロップが必要な点。
カードゲームで場にカードをプレイする際に良く用いられる操作方法である。

視線入力装置として何を使用するかだが、これは最も簡単に手に入れることが出来たTobii Eye Tracker 5を利用することにした。Amazonの公式出品で購入可能で25000円ほど。

www.amazon.co.jp

但し、この装置を用いてソフトを開発するとなると少し手間がかかることが分かった。2020年10月まではTobii Eye Tracker 4C(今回購入した5の旧型)に加え、Tobii Proアップグレードキーと呼ばれるものを購入すれば誰でも開発が可能だったようだが、現在は販売が終了している。

「Tobii Proアップグレードキー」販売終了のお知らせ|トビー・テクノロジー

2021年10月末現在は、tobii/developer zone内の以下のフォームからtobii社に申請を出すことで、開発に必要なTobii Stream Engine APIを入手することが可能らしい。

developer.tobii.com

現在個人開発で使ってみたいという内容で申請を行い返答待ちなので、詳しい所はまた別の機会に書こうと思うが、Tobii Eye Tracker 5の利用やAPIの申請で重要な点はライセンスの種類について。

APIの申請を行う際、選ぶことが出来るライセンスは3種類ある。無料で使えるライセンスはGetting Started development licenseで、このライセンスは営利目的の利用が不可かつソフトウェアの配布も行うことが出来ない。さらに視線追跡データを保存または転送することは許可されていない上、医療装置を開発する権利も付与されていない。もし本当に福祉目的で使用したい場合は、tobii proから福祉目的にも利用可能な装置を購入し、専用のライセンスを申請する必要がある。

Licence agreement for developing apps and games with Tobii Engine SDK

今回自分が申請したものはこのGetting Started development licenseのため、申請が通ってAPIを入手できたとしても、個人利用の範囲で進めることになる。

既存の視線入力ソフトで実際にどれくらいゲームを遊べるかどうかも調べてみる。
2021年10月末現在、福祉用の視線入力ソフトはいくつか存在する。
例えばUnicornのmiyasukuシリーズやオリィ研究所のOriHime eye。

www.e-unicorn.co.jp

orihime.orylab.com

お試し版ということでmiyasukuは14日間、OriHime eyeは1か月間無料で利用できたので、実際に自分で使ってみて感触を確かめることにした。
但し、miyasuku ​EyeConMouseについては福祉用アイトラッカー(PCeye5,TM5)しか使えないため、実際に試すことは出来なかった。 マニュアルを読む限りはEyeConLT2の超強化版と言えそうなので、それほど大きくプレイフィールは変わらないだろうと思われる。

プレイするゲームは出来る限り普遍的なゲームであり、かつオンラインに十分な対戦相手が存在するということをまずは第一に考え、世界で最も頻繁にアクセスされるボードゲームWebサイト(wikipediaより)らしいchess.comを利用することにした。

www.chess.com

まずはmiyasuku EyeConLT2でプレイしてみる。 miyasuku EyeConLT2で利用可能な機能は、左クリックと注視点周辺の拡大のみ。

気づいた点は以下の通り。

  • 常に視線入力状態だとゆっくり盤面を眺めることが出来ず集中しづらい。
  • 自分がクリックしたい時だけクリックを行いたい。切り替えをスムーズにしたい。
  • 眺める→クリックモードにする→盤面を動かす→眺める のループでゲームは進む。
  • 操作パネルをゲーム画面のすぐ近くに置きたい。
  • 拡大縮小機能はchess.comで遊ぶ場合に限って不要。盤面が見にくい。
  • 駒をプロモーションする操作や、ルークなどの隣接したマスにいくつも移動できる駒の操作がやや困難で、 意図しない駒にプロモーションしてしまったり、意図しないマスに移動してしまうことがある。いずれも隣接した狭い範囲にいくつも操作可能領域がある場合に起こっている。
  • 一応終局まで操作は可能。

OriHime eyeも含めて実際に自分でプレイを行い、感じた感想を元に進めてみることにする。