2023/05/17(水) [n年前の日記]
#1 [cg_tools][blender] blenderでOpenPoseのアニメーションを作ってみたい
無料で利用できる3DCGソフト、blender を使って、OpenPose のアニメーションを作成できないものかなと思いついた。そういうことができれば、画像生成AIに、その OpenPose動画を渡して、動画を生成できるんじゃないのかなと。
ググってみたら、挑戦してる方々が居るらしい。
_ControlNetで使うカラフル棒人間を簡単に作れる Blenderアドオン 導入&使用方法紹介 - 7mm blog
_Blender+ControlNetを用いたアニメーションの作り方
_Blenderで好きなポーズつけてControlNetで出力させる|rockreef|pixivFANBOX
_toyxyz - ControlNet M2M Brief Workflow ... / Twitter
_Stable Diffusion WebUIのControlNetのm2mでショート動画を作ってみた | 鷹の目週末プログラマー
自分も少し試してみたい。環境は、Windows10 x64 22H2。CPU は AMD Ryzen 5 5600X。GPU は NVIDIA GeForce GTX 1060 6GB。
ググってみたら、挑戦してる方々が居るらしい。
_ControlNetで使うカラフル棒人間を簡単に作れる Blenderアドオン 導入&使用方法紹介 - 7mm blog
_Blender+ControlNetを用いたアニメーションの作り方
_Blenderで好きなポーズつけてControlNetで出力させる|rockreef|pixivFANBOX
_toyxyz - ControlNet M2M Brief Workflow ... / Twitter
_Stable Diffusion WebUIのControlNetのm2mでショート動画を作ってみた | 鷹の目週末プログラマー
自分も少し試してみたい。環境は、Windows10 x64 22H2。CPU は AMD Ryzen 5 5600X。GPU は NVIDIA GeForce GTX 1060 6GB。
◎ モデルデータとアドオンを入手 :
以下のページから、こういった作業をするためのモデルデータとアドオンを入手できる模様。入手にはメールアドレスの入力が必要。
_Character bones that look like Openpose for blender _ Ver_9 Depth+Canny+Landmark+MediaPipeFace+finger
0を入力すれば無料でDLできるけど、支援したい方は好きな代金を入力して寄付してほしい、とのこと。
ダウンロードページには、過去バージョンから現行バージョンまで並んでいたけれど、今回は現行バージョンらしい OpenPoseBones_v9.zip というファイルをDLしてみた。
ちなみに、「Blender 3.5 以上じゃないと動かないよ」と書かれていたので…。blender 3.5.1 x64 (blender-3.5.1-windows-x64.zip) を入手して、任意のフォルダに解凍して、blender.exe を実行して、動かせるようにしておいた。できれば blender LTS版で動くバージョンが欲しかった…。自分、手元の環境に、LTS版しかインストールしてなかったので…。
OpenPoseBones_v9.zip を解凍すると、中には2つのファイルが入っている。
blender 3.5.1 x64 を起動して、設定画面を開いて、rig_tools_3.68.12.zip をアドオンとしてインストール。
その後、Openpose_bones_ver_09.blend を開くと、ザ・OpenPose って感じのモデルデータが現れる。
これを別名保存して、作業をしていく。
_Character bones that look like Openpose for blender _ Ver_9 Depth+Canny+Landmark+MediaPipeFace+finger
0を入力すれば無料でDLできるけど、支援したい方は好きな代金を入力して寄付してほしい、とのこと。
ダウンロードページには、過去バージョンから現行バージョンまで並んでいたけれど、今回は現行バージョンらしい OpenPoseBones_v9.zip というファイルをDLしてみた。
ちなみに、「Blender 3.5 以上じゃないと動かないよ」と書かれていたので…。blender 3.5.1 x64 (blender-3.5.1-windows-x64.zip) を入手して、任意のフォルダに解凍して、blender.exe を実行して、動かせるようにしておいた。できれば blender LTS版で動くバージョンが欲しかった…。自分、手元の環境に、LTS版しかインストールしてなかったので…。
OpenPoseBones_v9.zip を解凍すると、中には2つのファイルが入っている。
- Openpose_bones_ver_09.blend : OpenPoseの見た目を再現してるモデルデータ。
- rig_tools_3.68.12.zip : OpenPoseモデルデータをリグで動かすためのアドオン。
blender 3.5.1 x64 を起動して、設定画面を開いて、rig_tools_3.68.12.zip をアドオンとしてインストール。
その後、Openpose_bones_ver_09.blend を開くと、ザ・OpenPose って感じのモデルデータが現れる。
これを別名保存して、作業をしていく。
◎ ポーズをつけてみる :
OpenPoseモデルを左クリックして選択してから、ポーズモードに切り替える。ウインドウ左上の選択メニューから選んでもいいし、Ctrl + TABキーを押して切り替えてもいい。
関節をクリックしても回転させることができなくて、どうやってポーズをつけていけばいいのか分らなくてちょっと悩んだけれど。どうやら既にIKが指定してあって、手足の先の箱や、腰や頭の周りにある輪っかを左クリックで選択してから、移動したり回転させたりすることで、ポーズをつけていけるようだと分かった。
アニメーションにしたいので、画面の下のほうのウインドウを、タイムラインにする。各ウインドウの、左上隅のアイコンをクリックすれば、ウインドウの種類を変更できる。
タイムラインウインドウの真ん中あたりにある丸アイコンをクリックして有効にすれば、自動キー挿入が有効になって、ポーズを変更する度に、自動でキーフレームを挿入/上書きしてくれる。
そんな感じで、8FPSを前提にして、アニメーションをつけてみたのだけど…。試しにプレビュー再生してみたら、左上に出ている表示FPSが…。
8FPSで設定してあるのに、6FPSしか出てない…。blender、重い…。これではどんなアニメになったのか、よく分からない…。いや、自分の環境が非力なのかもしれんけど。AMD Ryzen 5 5600X + NVIDIA GeForce GTX 1060 ではこんなものなのか…。
でもまあ、ワイヤーフレーム表示にしたら8FPSが出てくれたので、どうにかなりそう。
何にせよ、アニメーションをプレビュー再生する時は、左上に出ている表示FPSをチェックして、本来のFPSが出てるのかどうか気にしながら作業していきたい。
関節をクリックしても回転させることができなくて、どうやってポーズをつけていけばいいのか分らなくてちょっと悩んだけれど。どうやら既にIKが指定してあって、手足の先の箱や、腰や頭の周りにある輪っかを左クリックで選択してから、移動したり回転させたりすることで、ポーズをつけていけるようだと分かった。
アニメーションにしたいので、画面の下のほうのウインドウを、タイムラインにする。各ウインドウの、左上隅のアイコンをクリックすれば、ウインドウの種類を変更できる。
タイムラインウインドウの真ん中あたりにある丸アイコンをクリックして有効にすれば、自動キー挿入が有効になって、ポーズを変更する度に、自動でキーフレームを挿入/上書きしてくれる。
そんな感じで、8FPSを前提にして、アニメーションをつけてみたのだけど…。試しにプレビュー再生してみたら、左上に出ている表示FPSが…。
8FPSで設定してあるのに、6FPSしか出てない…。blender、重い…。これではどんなアニメになったのか、よく分からない…。いや、自分の環境が非力なのかもしれんけど。AMD Ryzen 5 5600X + NVIDIA GeForce GTX 1060 ではこんなものなのか…。
でもまあ、ワイヤーフレーム表示にしたら8FPSが出てくれたので、どうにかなりそう。
何にせよ、アニメーションをプレビュー再生する時は、左上に出ている表示FPSをチェックして、本来のFPSが出てるのかどうか気にしながら作業していきたい。
◎ レンダリングしてみる :
F12キーを押して、レンダリングしてみる。
なんだか変な画像がレンダリングされた…。ナニコレ…。
右上のほうで、出力画像の種類を選ぶことができるらしい。最初に出ていたのは canny 用で、OpenPose を見たかったら、種類を選べ直せばいい。
これらのレンダリング画像は、.blend ファイルの保存場所に、MultiControlnet というフォルダが作られて、その中に種類別フォルダも作成されて、それら各フォルダ内に画像が保存されていく模様。
ちなみに、MultiControlnet\ フォルダの中には、以下のフォルダが作られていた。
つまり、OpenPose画像が欲しかったら、MultiControlnet 内の openposeフォルダの中を探せばいい。
なんだか変な画像がレンダリングされた…。ナニコレ…。
右上のほうで、出力画像の種類を選ぶことができるらしい。最初に出ていたのは canny 用で、OpenPose を見たかったら、種類を選べ直せばいい。
これらのレンダリング画像は、.blend ファイルの保存場所に、MultiControlnet というフォルダが作られて、その中に種類別フォルダも作成されて、それら各フォルダ内に画像が保存されていく模様。
ちなみに、MultiControlnet\ フォルダの中には、以下のフォルダが作られていた。
canny depth keypose Lineart MediaPipe_face openpose openpose_face openpose_full openpose_full_Extra_Limb openpose_hand
つまり、OpenPose画像が欲しかったら、MultiControlnet 内の openposeフォルダの中を探せばいい。
◎ 動画でレンダリングしてみる :
blender の上のほうのメニューの中から、レンダリング → アニメーション、を選んで、動画をレンダリングしてみる。
.blend の保存場所に、canny用の連番画像が大量に生成されてしまった…。これは…要らないなあ…。
一応、MultiControlnet\openpose\ 以下に、OpenPoseの連番画像も出力された。これを使って動画を作ればいいか…。
ffmpeg を利用して、連番画像から動画を生成する。
8fps、40フレームのmp4動画が得られた。
.blend の保存場所に、canny用の連番画像が大量に生成されてしまった…。これは…要らないなあ…。
一応、MultiControlnet\openpose\ 以下に、OpenPoseの連番画像も出力された。これを使って動画を作ればいいか…。
ffmpeg を利用して、連番画像から動画を生成する。
ffmpeg -framerate 8 -i MultiControlnet\openpose\Image%04d.png -vcodec libx264 -pix_fmt yuv420p -r 8 out_openpose.mp4 -y
- -framerate 8 : 入力する連番画像のフレームレートを指定。ここでは 8FPS を指定している。
- -i hoge%04d.png : hoge0000.png - hogeXXXX.png を入力画像として渡す。%04d と書けば、0000 - 9999 まで対応できる。
- -vcodec libx264 -pix_fmt yuv420p : Webブラウザでも再生できるmp4動画を指定。
- -r 8 : 出力動画のフレームレートを指定。8FPSにしている。
- out_openpose.mp4 : 出力ファイル名。
- -y : 既に出力ファイルが存在していたら上書きする。
8fps、40フレームのmp4動画が得られた。
◎ Stable Diffusion web UIに渡してみる :
得られた OpenPose動画を、画像生成AI Stable Diffusion web UIに渡して、動画を生成してみたい。
ControlNet には、ControlNet m2m というスクリプトが付属している。このスクリプトを選んで動画を渡してやれば、動画の1フレームを取り出して、ControlNet に転送して、画像生成して ―― これを動画の全フレーム分繰り返してくれる。
ただ、Stable Diffusion web UIの設定画面 → ControlNet で、スクリプトからの操作を許可しておかないといけない。この設定が必要なことを知らなくて、実行してみたら「ControlNetに画像が指定されてないぞ」とエラーが出て悩んでしまった。
設定については以下が参考になった。ありがたや。
_【ControlNet m2m】動画を直接Aiに渡す!【Stable Diffusion】 | 謎の技術研究部
_ControlNet - としあきdiffusion Wiki*
"Allow other script to control this extension" にチェックを入れておくらしい。
他に、ググって分かったことをメモ。
そんな感じで、txt2img で試してみたのだけど…。1枚生成するのに58秒 = 約1分。それが40フレームあるので、フツーに40分ぐらいかかった。
生成された画像は、以下の場所に保存されていた。
そんなわけで、連番画像からmp4動画を生成してみたけれど…。
うーん。予想通りではあるけれど、各フレームの連続性というか、一貫性が皆無…。元のOpenPose動画の動きがビミョーすぎて、こういう実験に不向きなせいもありそうだけど、現状ではまだまだ色々と厳しいものがあるなと…。
それはそれとして、これを書いてる段階でトホホなミスをしていることに気が付いた。
アニメを作りたいなら、24コマ/秒で3コマベース、8fpsでOpenPose動画を作っておけばいいのかなと安易に思って作業してしまったけれど。だったら最後に、アニメ系と言うか、手描きに見える学習モデルデータを使って画像生成しないと…。実写系の学習モデルデータ、ChilloutMix系で生成しちゃダメじゃん…。実写系の画像を、ジャパニメーションのリミテッドアニメ風フレームレートで動かすとか、自分、何をやってるんだか…。
ControlNet には、ControlNet m2m というスクリプトが付属している。このスクリプトを選んで動画を渡してやれば、動画の1フレームを取り出して、ControlNet に転送して、画像生成して ―― これを動画の全フレーム分繰り返してくれる。
ただ、Stable Diffusion web UIの設定画面 → ControlNet で、スクリプトからの操作を許可しておかないといけない。この設定が必要なことを知らなくて、実行してみたら「ControlNetに画像が指定されてないぞ」とエラーが出て悩んでしまった。
設定については以下が参考になった。ありがたや。
_【ControlNet m2m】動画を直接Aiに渡す!【Stable Diffusion】 | 謎の技術研究部
_ControlNet - としあきdiffusion Wiki*
"Allow other script to control this extension" にチェックを入れておくらしい。
他に、ググって分かったことをメモ。
- txt2img, img2img のどちらでも、ControlNet m2m を使って動画を作れる。
- img2imgで出力したほうが背景が崩れにくい、らしい。
- 出力する時は、seed を固定して、似た画像が出やすい状態にする。
- プロンプトにも、服装や背景等、固定しやすくなるワードを多々打ち込んでおく。
- ControlNet m2m を使う時は、ControlNet の画像指定欄は空欄にしておく。そこは m2m から各フレームが入力されるので。
- ControlNet m2m の Duration という設定項目は、1フレームあたりの表示時間をミリ秒で指定する。らしい。8fpsなら125ms。12fpsなら83〜84ms。24fpsなら41〜42ms。おそらくアニメgifを生成する際に使われる値ではなかろうか。
- ControlNet の Control Weight は大き目の数値にしておくといいらしい。1.6とか。
そんな感じで、txt2img で試してみたのだけど…。1枚生成するのに58秒 = 約1分。それが40フレームあるので、フツーに40分ぐらいかかった。
生成された画像は、以下の場所に保存されていた。
- outputs\txt2img-images\日付\ : いつもの保存場所。
- outputs\txt2img-images\controlnet-m2m\ : アニメgifファイルが保存されている。
- outputs\txt2img-images\tmp\ : 生成画像が連番画像として保存されていた。もしかするとアニメgifを作るための仮保存場所…?
そんなわけで、連番画像からmp4動画を生成してみたけれど…。
うーん。予想通りではあるけれど、各フレームの連続性というか、一貫性が皆無…。元のOpenPose動画の動きがビミョーすぎて、こういう実験に不向きなせいもありそうだけど、現状ではまだまだ色々と厳しいものがあるなと…。
それはそれとして、これを書いてる段階でトホホなミスをしていることに気が付いた。
アニメを作りたいなら、24コマ/秒で3コマベース、8fpsでOpenPose動画を作っておけばいいのかなと安易に思って作業してしまったけれど。だったら最後に、アニメ系と言うか、手描きに見える学習モデルデータを使って画像生成しないと…。実写系の学習モデルデータ、ChilloutMix系で生成しちゃダメじゃん…。実写系の画像を、ジャパニメーションのリミテッドアニメ風フレームレートで動かすとか、自分、何をやってるんだか…。
◎ 2023/05/18追記 :
せっかくだから、アニメ系の学習モデルデータ、MeinaMix を使って試してみた。更に今回は、txt2imgではなくて、img2imgで生成してみた。
うーん。これは…どうなんだ…。まあ、色々と厳しいのは間違いない…。
うーん。これは…どうなんだ…。まあ、色々と厳しいのは間違いない…。
[ ツッコむ ]
以上です。