Video Generation in TouchDesigner
先日, オープンキャンパスでGANによる動画生成のデモを展示しました。
TouchDesigner使えばリアルタイムで実装できるかな...と思って使ってみました。 他の方のコードをかなり使ってますが、もしよければ試してみてください。
以降では二つのことを共有出来たらと思います。最後にデモについて少し書きます!
- TouchDesignerでPythonの重い処理の実行.
- Pythonライブラリ(PyTorch等)を入れる.
TouchDesignerを初めて数か月なのに, 何故かqiitaの記事に登録してました。qiitaも初めてです。 あまり実用性ありそうなこと書けませんでしたが、よかっ たらご覧ください(;_;)
重い処理の実行について
TouchDesignerは Pythonが中の処理にも使われており、他で重い処理をするとフリーズします。 なので、サブプロセスとして処理をいくつかに分けます。
前のプロセスの終了をchop_exec
で取得し、td_utils.py
で実行するコマンドを渡します。
処理が終わったらsocket通信でudpin
に送り、datexec2
で通知を次の処理に送ります。
import subprocess
arg0 = '{{Python Path}}'
arg1 = '{{Python File}}'
args = ["--%s %s"%(a,b) for a,b in op('opt_test_full').rows() if a]
cmd = ' '.join( [arg0, arg1] + args)
op('udpin2').par.clear.pulse()
subprocess.Popen(['python', 'util/td_utils.py',
'-p',str(op('udpin2').par.port.val),
'-d','%s'%project.folder,'-c',cmd,'-s','15'],
cwd=dir,shell=True)
poseの動画から全身の動画をするベースCOMPです. 前処理が終わったら生成を開始します。 生成が終わったら次の処理に通知させます。
TouchDeisngerでのPythonライブラリについて
venv
でpip install
→ TouchDesinger内でPathを通す or sys.path.append()
- TouchDesingerでは内部にNumpyを含んでおり、しかも結構内部で依存してそうでした。
- PyTorchを入れたとき、一緒にNumpyが入ってきて使えなくなり、環境構築しなおしました。
condaで仮想環境 → TouchDesignerのsite-packages
消す → mlink /d site-packages {{path-to-venv}}/site-packages
- この方法が唯一PyTorchが動いたのですが、デモ当日にGPU周りで謎のエラーが出ました。
(
libiomp5md.dll、libiomp5mmd.pdb libiompstubs5md.dll
を上書きしたら動きました) - 結局最初からプロセスを分ければよかったなと反省してます。結論はまだ出てないですが、自分なりの考えを まとめました。
左上が生成結果です。ボーン検出がうまくできてないので、うまく動画が生成できなかったです。(RealSenseとかを使ったほうが早いし安定してよかったかも)