Skip to main content

Video Generation in TouchDesigner

demo

先日, オープンキャンパスでGANによる動画生成のデモを展示しました。

TouchDesigner使えばリアルタイムで実装できるかな...と思って使ってみました。 他の方のコードをかなり使ってますが、もしよければ試してみてください。

以降では二つのことを共有出来たらと思います。最後にデモについて少し書きます!

  1. TouchDesignerでPythonの重い処理の実行.
  2. 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です. 前処理が終わったら生成を開始します。 生成が終わったら次の処理に通知させます。

demo

TouchDeisngerでのPythonライブラリについて

venvpip install → TouchDesinger内でPathを通す or sys.path.append()

  1. TouchDesingerでは内部にNumpyを含んでおり、しかも結構内部で依存してそうでした。
  2. PyTorchを入れたとき、一緒にNumpyが入ってきて使えなくなり、環境構築しなおしました。

condaで仮想環境 → TouchDesignerのsite-packages消す → mlink /d site-packages {{path-to-venv}}/site-packages

  1. この方法が唯一PyTorchが動いたのですが、デモ当日にGPU周りで謎のエラーが出ました。 (libiomp5md.dll、libiomp5mmd.pdb libiompstubs5md.dll を上書きしたら動きました)
  2. 結局最初からプロセスを分ければよかったなと反省してます。結論はまだ出てないですが、自分なりの考えをまとめました。

左上が生成結果です。ボーン検出がうまくできてないので、うまく動画が生成できなかったです。(RealSenseとかを使ったほうが早いし安定してよかったかも)