2023/05/19(金) [n年前の日記]
#1 [cg_tools] OpenPose動画を作りたい。その2
_昨日
の続き。OpenPoseの静止画像を作成することはできたので、今度は動画を生成したい。
環境は、Windows10 x64 22H2。CPU : AMD Ryzen 5 5600X。GPU : NVIDIA GeForce GTX 1060 6GB。
OpenPoseDemo.exe は、CPU使用版。
環境は、Windows10 x64 22H2。CPU : AMD Ryzen 5 5600X。GPU : NVIDIA GeForce GTX 1060 6GB。
OpenPoseDemo.exe は、CPU使用版。
◎ サンプル動画を入手 :
OpenPose のバイナリと一緒に、examples\media\video.avi というサンプル動画も入っているけれど。今回は、ソレとは別の動画を渡して処理してみたい。
今回は、以下の動画を使わせてもらうことにした。25fpsの動画。1920x1080版をDL。
_Video Of Person Running In The Park Free Stock Video Footage, Royalty-Free 4K & HD Video Clip
ちなみに、以下のサイトで検索して探したのだけど…。何故にどの動画もスローモーションなのか…。
_Running Videos, Download The BEST Free 4k Stock Video Footage & Running HD Video Clips
今回は、以下の動画を使わせてもらうことにした。25fpsの動画。1920x1080版をDL。
_Video Of Person Running In The Park Free Stock Video Footage, Royalty-Free 4K & HD Video Clip
ちなみに、以下のサイトで検索して探したのだけど…。何故にどの動画もスローモーションなのか…。
_Running Videos, Download The BEST Free 4k Stock Video Footage & Running HD Video Clips
◎ 512x512に加工 :
後々、画像生成AI Stable Diffusion web UI に渡したいので、元動画を、512x512の動画に加工したい。
今回は、Avidemux 2.7.8 を使って作業した。ちなみに、現行版は 2.8.1 の模様。
_Avidemux のダウンロードと使い方 - k本的に無料ソフト・フリーソフト
フィルターを設定。1:1にトリミングしてから、512x512に拡大縮小。人物が出ていない時間(?)ができてしまったので、動画の前後を削除。
大体以下のような雰囲気の動画になった。これは256x256に縮小してるけど…。
今回は、Avidemux 2.7.8 を使って作業した。ちなみに、現行版は 2.8.1 の模様。
_Avidemux のダウンロードと使い方 - k本的に無料ソフト・フリーソフト
フィルターを設定。1:1にトリミングしてから、512x512に拡大縮小。人物が出ていない時間(?)ができてしまったので、動画の前後を削除。
大体以下のような雰囲気の動画になった。これは256x256に縮小してるけど…。
◎ OpenPose動画を作成 :
動画を解析して、OpenPose動画を出力する。
このままだと、MotionJPEG の avi なので、Webブラウザでも再生できるように、ffmpeg 6.0 を使ってmp4に変換した。
こんな感じの動画になった。動きをバッチリ抽出できてる。
bin\OpenPoseDemo.exe --video test\src.mp4 --write_video outputs\dst.avi --disable_blending
- --video IN.avi : 入力動画。一般的には .avi を渡すようだけど、.mp4 もイケた。
- --write_video OUT.avi : 出力動画。MotionJPEGで保存されるっぽい。
- --disable_blending : OpenPose部分のみを出力。
このままだと、MotionJPEG の avi なので、Webブラウザでも再生できるように、ffmpeg 6.0 を使ってmp4に変換した。
ffmpeg -i dst.avi -vcodec libx264 -pix_fmt yuv420p dst.mp4
こんな感じの動画になった。動きをバッチリ抽出できてる。
◎ 連番画像として出力 :
後々、Stable Diffusion web UI で作業をする際に、OpenPose の静止画像があったほうが調整しやすいはずなので、ffmpeg を使って、動画を連番画像として出力。
ffmpeg -i results.avi seq\%04d.png or ffmpeg -i results.avi -vcodec png -r 25 %04d.png
- -i IN.avi : 入力動画
- -vcodec png : 出力フォーマットをpngにする
- -r N : フレームレート
- %04d.png : 4桁の数字で示された連番画像として保存
◎ 形が違うことに気づいた :
今頃になって気づいたけれど、Stable Diffusion web UI で指定する OpenPose と、OpenPoseDemo.exe が生成する OpenPose は、形がちょっと違う…。
_Windows への OpenPose導入手順【2018/12/30追記】 - Qiita
_Windows10にてGPU版OpenPoseを動かしてみた - Qiita
どうやら、1.3.0 から 1.4.0 になった時点で、形が変わったように見える。
であれば、OpenPose 1.3.0 のバイナリを入手すれば、Stable Diffusion web UI のソレに一致させることができるのだろうか。しかし、そう上手くはいかないようで。
_Releases - CMU-Perceptual-Computing-Lab/openpose - GitHub
1.3.0までは、GPU版しかなくて、1.4.0からCPU版のバイナリも公開されるようになったっぽい。CPU版を使いたいのだけど、困った…。
GPU版 OpenPose 1.3.0 を動かすためには、CUDA 8.0、cuDNN 5.1 が必要になるようで…。自分の環境は、Stable Diffusion web UI を動かすために、CUDA 11.8 をインストール済みなんだよな…。異なるバージョンをインストールすることってできるのかな…。
前述のページを書いた方が、コメント欄でCPU版を公開してくれているので、DLして実行してみたけれど、以下の .dll が無いと言われてしまった…。
どうやら CUDA の複数バージョンを共存させる方法を実現して、GPU版を使うしかないようだなと…。
- Stable Diffusion web UI + ControlNet : 首から足の根元まで2本の線が出てる。
- OpenPose 1.7.0 : 首から腰まで1本の線になっている。
_Windows への OpenPose導入手順【2018/12/30追記】 - Qiita
_Windows10にてGPU版OpenPoseを動かしてみた - Qiita
どうやら、1.3.0 から 1.4.0 になった時点で、形が変わったように見える。
であれば、OpenPose 1.3.0 のバイナリを入手すれば、Stable Diffusion web UI のソレに一致させることができるのだろうか。しかし、そう上手くはいかないようで。
_Releases - CMU-Perceptual-Computing-Lab/openpose - GitHub
1.3.0までは、GPU版しかなくて、1.4.0からCPU版のバイナリも公開されるようになったっぽい。CPU版を使いたいのだけど、困った…。
GPU版 OpenPose 1.3.0 を動かすためには、CUDA 8.0、cuDNN 5.1 が必要になるようで…。自分の環境は、Stable Diffusion web UI を動かすために、CUDA 11.8 をインストール済みなんだよな…。異なるバージョンをインストールすることってできるのかな…。
前述のページを書いた方が、コメント欄でCPU版を公開してくれているので、DLして実行してみたけれど、以下の .dll が無いと言われてしまった…。
cublas64_80.dll cudart64_80.dll curand64_80.dll
どうやら CUDA の複数バージョンを共存させる方法を実現して、GPU版を使うしかないようだなと…。
◎ COCOモデルを使えばいいらしい :
調べてみたら、現行版の OpenPose 1.7.0 でも、COCOモデルなるものを使えば、Stable Diffusion web UI + ControlNet と同じ形状で OpenPose を出力できそうだと分かった。
COCOモデルを使うには、OpenPoseインストールフォルダ\models\ 内で、getCOCO_and_MPII_optional.bat を実行して、モデルデータを追加ダウンロードする必要がある。
また、OpnePoseDemo.exe には、--model_pose COCO を渡してやる。
Stable Diffusion web UI + ControlNet + OpenPose で利用できる形状のソレを得ることができた。
しかし、そもそも、Stable Diffusion web UI で、動画に基づいて各ポーズを指定したいだけなら、ControlNet のプリプロセッサで OpenPose を通せば良いのではないか。わざわざ別途、OpenPoseDemo.exe を動かす必要も無いのでは…。
COCOモデルを使うには、OpenPoseインストールフォルダ\models\ 内で、getCOCO_and_MPII_optional.bat を実行して、モデルデータを追加ダウンロードする必要がある。
また、OpnePoseDemo.exe には、--model_pose COCO を渡してやる。
bin\OpenPoseDemo.exe --image_dir test --write_images outputs --model_pose COCO
bin\OpenPoseDemo.exe --video src.mp4 --write_video dst.avi --model_pose COCO --disable_blending
Stable Diffusion web UI + ControlNet + OpenPose で利用できる形状のソレを得ることができた。
しかし、そもそも、Stable Diffusion web UI で、動画に基づいて各ポーズを指定したいだけなら、ControlNet のプリプロセッサで OpenPose を通せば良いのではないか。わざわざ別途、OpenPoseDemo.exe を動かす必要も無いのでは…。
この記事へのツッコミ
[ ツッコミを読む(1) | ツッコむ ]
以上です。
>>COCOモデルを使えばいいらしい
最近、ブログ主さんと同様にアニメを試そうとしており、
調べ周っていたところこちらに行き着きました。
おかげさまでモデルの違いに気づくことができました。
ありがとうございます。
>>動画に基づいて各ポーズを指定したいだけなら、ControlNet のプリプロセッサで OpenPose を通せば良いのではないか。わざわざ別途、OpenPoseDemo.exe を動かす必要も無いのでは…。
一度、ポーズだけの動画を作ってしまえば都度の前処理が軽くなって
長期的には時間の節約になるのではないかと考えています。
なにかと試行錯誤が多くなりがちので......