ソフトウェア

Apple Vision Proのようなハンドトラッキングによるマウス操作をWindowsで実現する試み


Appleの空間コンピューティングデバイスであるApple Vision Proは、視線トラッキングとハンドトラッキングで操作を行います。エンジニアのReynaldi Chernando氏が、Apple Vision Pro同様のピンチ動作によるカーソル制御やマウス入力の直感的な操作をWindowsで再現するシステムを自身で開発しています。

Hand Tracking for Mouse Input | Reynaldi’s Blog
https://chernando.com/blog/2023/07/23/hand-tracking-for-mouse-input.html

Chernando氏はシステムの目標として、手をコンピューターの入力デバイスとして機能させることを設定。具体的な実装方法として、キーボードの上に手がある通常の使用状態を想定し、下向きにカメラを設置することにしました。Chernando氏は、手と指の位置検出にはGoogleの機械学習向けソリューションセットであるMediaPipeを採用しています。


最初の実装では、PythonバージョンのMediaPipeを使用し、OpenCVでカメラフィードを読み取ってMediaPipeに入力し、検出された手のランドマークを使用してマウスをシミュレートする方法が試みられました。しかし、OpenCVのwaitKey関数に関連する問題により、システムに深刻な遅延が発生。この問題の解決策を見つけることができなかったため、Chernando氏は別のアプローチを検討することになりました。

調査する中で、MediaPipeのウェブデモバージョンが非常にスムーズに動作することが判明。これを活用するため、Chernando氏はウェブフロントエンドで手の検出を行い、Pythonバックエンドでマウス制御を行うハイブリッドなアプローチを考案しました。フロントエンドとバックエンドの通信方式として、HTTPリクエスト、WebSocket、gRPCストリーミングが検討され、最終的にリアルタイム性とシンプルな実装の観点からWebSocketが選択されました。

次に、Chernando氏はWebSocketサーバーを実装し、マウスカーソルの座標を制御するためのJSON形式のメッセージを受け取るシステムを構築しました。これは、親指の先端の座標をトラッキングしてマウスカーソルの位置を制御し、クリック動作は親指と人差し指の間の距離を計算して検出する仕組みです。


カメラからの距離による指先間の距離の変化という問題に対しては、指先と対応する関節との相対的な距離を計算することで解決しました。これにより、手がカメラに近い場合でも遠い場合でも適切に動作するようになりました。


しかし、手が完全に静止していてもカーソルが揺れる問題が発生したとのこと。これはhand landmarkerの検出モデルに起因する問題でしたが、移動平均を実装することで動きを滑らかにすることができました。ただし、移動平均のバッファサイズが大きいほど遅延も大きくなるというトレードオフがあったそうです。また、画面端でのカーソル操作を改善するため、Chernando氏は座標の線形変換を実装。これにより、手が完全にカメラの視界から外れることなく画面の端までカーソルを移動できるようになりました。

さらに「ウェブブラウザのタブがアクティブでなければならない」という制限を解決するため、Chernando氏はTauriフレームワークをRustバックエンドと組み合わせて実装し直しました。Tauriを使用することで、ウェブフロントエンドをスタンドアロンアプリケーションとして実行し、Rustバックエンドとより効率的に通信できるようになりました。ただし、Chernando氏はRustの知識がなかったため、GoogleとChatGPTを活用して実装を行ったとのこと。


Chernando氏はMeta Questのハンドジェスチャー入力も参考にして、前向きカメラモードも追加実装しています。このモードでは、指の向きとカメラからの距離を計算してスクリーン上のカーソル位置を決定します。ジッターの問題に対してはOne Euro Filterを導入し、角度にもしきい値処理を追加することで、ある程度使用可能な精度を実現しました。


Chernando氏によると、最終的に下向きモードは比較的安定して動作するようになりましたが、前向きモードには依然としていくつかの課題が残っているそうで。特に特定の位置や角度での手のランドマークの不安定さや、ピンチ動作時のカーソルのドリフトなどが問題として挙げられています。Chernando氏は、MediaPipe、Tauri、Rust、そして数学的な計算など、プロジェクト全体を通して様々な技術要素を組み合わせて実装する貴重な経験を得ることができたと述べています。

なお、プロジェクトはGitHubで公開され、記事作成時点時点ではWindows環境でのみテストされています。

GitHub - reynaldichernando/pinch: Simulate mouse input using hand tracking
https://github.com/reynaldichernando/pinch

この記事のタイトルとURLをコピーする

・関連記事
約60万円のApple初となる高級MRヘッドセット「Apple Vision Pro」がついに日本で発売されたので開封&セットアップしてみた - GIGAZINE

「Apple Vision Pro」といっしょに旅行するとこんな感じになる - GIGAZINE

Apple Vision ProをPCとワイヤレス接続してPC向けVRゲームを遊べるようにする「ALVR」導入まとめ - GIGAZINE

Apple Vision Proの需要がなさ過ぎて生産縮小へ - GIGAZINE

MicrosoftがMeta Quest 3/3Sで「Windows 11のフル機能アクセス」を可能にすると発表 - GIGAZINE

in ソフトウェア, Posted by log1i_yk

You can read the machine translated English article here.