人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

カメラを用いた指認識コントローラーの作り方①リアルタイム同期通信【Unity, Mediapipe, Websocket】

f:id:hiro-htm877:20220129212027j:plain



 

本記事のテーマ

指に連動してキャラクターが動くアプリを制作する。

制作環境

・Unity2020.3.26.f1

・Mediapipe Python

・NodeJs

概要(設計)

カメラで人差し指の位置を認識し、指の動きに連動してアプリ上のキャラクターを動かす。

使用技術

指認識:Mediapipe

データ送信:Websocket

キャラクターを動かすアプリ:Unity

f:id:hiro-htm877:20220129212010p:plain



作り方

今回つくるWebsocket通信と複数アプリ間のキャラクターの位置の同期は以下のサイトを元に作成しました。

ですので基本的には下記サイトを参考に作ってください。

本記事では追加説明を記載いたします。

また、参考サイトには誤字や脱字があったので修正しています。

完成したコードをGithubにおいていますので動かない際はお手数ですが私のGithubのコードと比較しながら作成してください。

■誤字脱字、説明不足パターン

※細かい差分などを覚えていないのでコメント欄でご質問いただけますと幸いです。

・オブジェクトの名前がコードないと異なる。

・オブジェクトの配置位置が記載されていない

・UserLoginDataクラスを作成していない状態で使用するためErrorが発生。

Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ①

Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ②

Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ③

完成コード

github.com

追加説明

③追加するプラグインの配置

参考記事①のWebsocketに関するプラグインの配置です。

・Network.Json.dll

Unity2020からはNetwork.Json.dllと同等の機能のパッケージが入っており、新しく追加しなくても↓のパッケージが使用できます。

using Newtonsoft.Json;
 

・websocket-sharp.dll

Ubuntuでwebsocket-sharp.dllを作成するためにMonodevelopを使用しました。

手順:

1. websocket-sharpのgit repogitoryをダウンロードする。

GitHub - sta/websocket-sharp: A C# implementation of the WebSocket protocol client and server

2. monodevelopをインストールする

下記サイトのUbuntu18.04の手順でUbuntu20.04にダウンロードできました。

Download | MonoDevelop

3. monodevelopをアクティビティから開き,websocket-sharpをBuildする。

手順は下記サイトを参考。ファイル→開く→1でダウウンロードしたファイル内のwebsokcet-sharp.slnを選択する。

Exampleファイルを削除後、Releaseを選択してBuildする。

UnityでWebSocketを使用する - Qiita

Nodejsのインストールと設定

インストールは参考サイトから転載

git clone https://github.com/creationix/nvm.git ~/.nvm

source ~/.nvm/nvm.sh

vi .bashrc(下記を追加)

--------------

# nvm
if -s ~/.nvm/nvm.sh ; then
        source ~/.nvm/nvm.sh ;
fi

-------------

nvm ls-remote

nvm install v16.13.2

nvm use v16.13.2

node -v

npm install ws

この後node ws.jsを実行するとMODULE_NOT_FOUNDとなったので下記サイトを通りにPATHを通してあげると動いた。

Node.jsで、存在するはずのmoduleがrequireでエラーになることについて - Qiita

 

websocketのIPアドレスを指定する

nodejsで立てるサーバーのIPアドレスを確認する。

UbuntuだとIfconfigコマンドで確認できる。

FingerController-Unity-Mediapipe/WebSocketClientManager.cs at main · hiro877/FingerController-Unity-Mediapipe · GitHub

 

残りの手順は次の記事にて記載いたします。

「Mediapipeによる指認識〜Nodejsを通してアプリに位置情報を送信する」

 

www.hiro877.com

 

 

以上、ご参考になると幸いです!

質問などは下のコメント欄でお待ちしております!

分かりにくいなどのクレームもお待ちしております!