Closed5
SpoutでPython⇔Unity間の通信やってみる
今回やること
バックエンドとしてのPythonとフロントエンドとしてのUnityで制作。
PythonでWebCamの映像を撮影し、SpoutでUnityに送信。
Unityで画像加工し、Pythonへ返す。
Python側で返された画像を表示する。
動作環境
- Windows 11 23H2
- Python 3.11.1
- Unity 6000.0.23f1
Spoutとは
Mac用の Syphon というソフトウェアのWindows版。
GPUメモリを別のアプリケーションと共有することでリアルタイムでの画像共有を実現するもの。
GPUメモリを使って通信するため、同じPCのアプリケーション同士でしか通信できない。
Python
ここにPythonのプロジェクトが列挙されている。
今回はこれを使うことにした。
Git submoduleが使われているので、recursiveをつけてcloneする。
git clone --recursive git@github.com:off-world-live/pyspout.git
Python3.12で使いたいので自分でビルドする。
PySpoutを右クリックして出てくるプロパティから
- C/C++ > 全般 > 追加のインクルードディレクトリ に
{Pythonのパス}\include
- リンカー > 全般 > 追加のライブラリディレクトリ に
{Pythonのパス}\libs
を設定する
今回はuvでインストールしたPythonを使ったので
uv python install 3.12.7
パスはこんな感じ
C:\Users\kota\AppData\Roaming\uv\python\cpython-3.12.7-windows-x86_64-none
あとは ビルド > ソリューションのビルドで成功することを確認する。
成功したらこんな感じにファイル一式が生成される
❯ ls .\pyspout\x64\Debug
Directory: C:\Users\kota\dev\spout-test-python\pyspout\x64\Debug
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2024/10/24 18:24 756 PySpout.exp
-a--- 2024/10/24 17:36 1732 PySpout.lib
-a--- 2024/10/24 18:24 5967872 PySpout.pdb
-a--- 2024/10/24 18:24 619520 PySpout.pyd
-a--- 2024/10/24 17:31 719360 Spout.dll
-a--- 2024/10/24 17:31 105455 Spout.exp
-a--- 2024/10/24 17:31 173606 Spout.lib
-a--- 2024/10/24 17:31 4247552 Spout.pdb
必要なのは Spout.dll
と PySpout.pyd
なので、ソースコードのディレクトリに持ってくる。
公式のサンプルがあるのでやってみる。
OpenGLが必要そうなので、 uv add pyopengl
で追加。
とりあえず動いてそうなので、Unity側で受信画面を作成する。
Unity
これを使う。
インストール方法はREADMEに載っている。
適当にProjectを作成後、Render TextureとObjectを作ってSpout Receiver componentを紐づけたらOK。
このスクラップは29日前にクローズされました