プロンプトより簡単にポーズを指定する『OpenPose』の使い方

プロンプトより簡単にポーズを指定する『OpenPose』の使い方 AI/Stable Diffusion

ダンスや運動の最中など躍動感のある絵を描きたい。

でもStableDiffusionで複雑なポーズを試したら、体が捻じれて化け物みたいに…

かと言ってプロンプトだけで複雑な指定を行うのは不可能に近い…

そんな時でも、ControlNetの機能を使えば簡単に解決することができます。

今回はOpenPoseという機能を使って、複雑なポーズの画像を生成する方法について紹介します。

結果

・元絵と同じポーズで画像を生成することが可能

・元絵の顔の大きさや手首から先の状態に合わせてPreprocessorを選ぶと良い。

・商用利用する際には確認と注意が必要

この記事を読むと

画像から生成した棒人間に合わせた絵を、自動で生成する方法が理解できます。

※記事内に広告が含まれています。

ポーズを他画像に合わせる方法

OpenPoseはControlNetで使える代表的な拡張機能の一つです。

写真や絵から骨格を抽出し、その位置情報をもとに絵を再構築する技術です。

人が理解しやすくするために線で繋いで、棒人間として視覚化されています。。

そのため、人物の写真や絵から棒人間は生成可能ですが、風景等の人が描画されていない画像からは生成が不可能となっています。

人間が見つからなかったためか、Openposeを指定したのにLineartのような絵が出力されました。

もし自分で棒人間を弄って、好きなポーズを取らせたい場合は下記を参考にしてください。

Editorを使うことで自由に、さらにこの記事で読み取った棒人間の情報をベースに変更することも可能です。

インストール

ControlNetがインストールされていれば、その中にすでに含まれています。

ただしControlNetをインストールしただけではモデルは古い可能性があるので、専用のモデルをダウンロードする必要があります。

ここでいうモデルは絵の学習モデルではなく、Openpose用のモデルになります。

以下のHuggingFaceから、ダウンロードできます。

https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main

今回は「Openpose」を使いたいので、「control_openpose-fp16.safetensors」をダウンロードします。

これらのモデルは、ControlNetの下の部分で選択するモデルになります。

ダウンロードしたファイルは自身がインストールしたフォルダから、「stable-diffusion-webui > extensions > sd-webui-controlnet > models」のフォルダに保存します。

これでインストールは完了です。

設定 棒人間の画像を自動保存

デフォルトの設定では、『OpenPose』実行時に描画された棒人間の画像は保存されません。

後からポーズ指定で使いたいと思っても、再度棒人間を生成するのは面倒ですよね。

設定を変えるだけで自動保存が可能になるので、是非実行前に設定しておいてください。

1. 「Setting」タブの「ControlNet」を開きます。

2. 「Allow detectmap auto saving」にチェックを付ける。

3. 保存先を変えたい場合は「Directory for detected maps auto saving」を変更します。

4. 設定完了後は、画面上の「Apply setting」をクリックして設定を適用します。

5. 「Reload UI」をクリックして再起動させれば準備完了です。

【検証】実際に連続実行してみた

準備

元となるポーズの画像を用意します。

今回は下記のような右手を上げている画像を元画像とします。

出来るだけ手足がどのようになっているか、どの向きに向いているかが分かる画像の方が良いです。

次にプロンプトを用意します。

まずは簡単に、女性であることを示すプロンプトだけを用意します。

プロンプト

masterpiece, front shot, beautifully painted, girl, young,20 years old, long hair

ネガティブプロンプト

flat color, flat shading, nsfw, retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res 

Control.netは下記のように設定します。

1. imageに棒人間を作りたい(ポーズの元になる)絵を追加します。

2. 「Enable」と「Pixcel Perfect」にチェックを入れる。

3. ControlTypeで「OpenPose」を選択します。

4. Preprocessorで「openpose_full」を選択します。

基本は「openpose_full」で良いですが、後述する商標利用を考えている場合は「dw_openpose_full」を使うことをお勧めします

出力結果

実際に実行すると下記のような棒人間が生成されます。

実際に元となった画像に重ねると下記のようになります。

目の位置や手首から先の位置がしっかりと反映されていますね。

それを元に作成した画像が下記になります。

腕の角度や顔の位置、左手の位置などが棒人間の同じ位置で出力されているのが分かります。

各パラメータ違いによる出力結果比較

Control Weight

ControlNetの影響力の設定値になります。

そのため0.3という低い数値では、右手の位置が下がってしまっています。

逆に大きくしすぎてしまうと画像が崩壊してきます。

1.8の画像では手首から先がおかしくなっています。

値は棒人間のポーズと離れてれば1から上げていく。

逆にポーズは出来ているが絵として違和感がある場合は下げていきましょう

0.3

1.0

1.8

Starting Control Step

ControlNetの効果をステップ全体のどの範囲から効かせ始めるかの値です。

0からの場合ノイズ除去の初めから効いていますが、1に近づくとほとんどのステップでControlnetの影響がなくなります。

そのため下記の1.0の画像ではOpenposeで指定した棒人間のポーズからかけ離れた画像となっています。

基本的に0から値を変える必要はありません。

どうしてもControlnetの影響が強く出てしまい、絵が破綻する場合は上げていきましょう。

0

0.5

1.0

Ending Control Step

ControlNetの効果をステップ全体のどの範囲まで効かせるかの値です。

1の場合ノイズ除去の最後まで効いていますが、0に近づくとほとんどのステップでControlnetの影響がなくなります。

そのため下記の0の画像ではOpenposeで指定した棒人間のポーズからかけ離れた画像となっています。

基本的に1から値を変える必要はありません。

どうしてもControlnetの影響が強く出てしまい、絵が破綻する場合は下げていきましょう。

1.0

0.5

0

Preprocessor違いによる出力結果比較

none

Openposeでの棒人間を作成していないので、全く関係ない画像が生成されました。

dw_openpose_full

体だけでなく、顔の表情までを取得します。

手足や顔の表情まで、取得した棒人間と同じになっています。

しかし顔が小さい場合など上手く出力されない場合もあるので、キャンパス全体に対して顔の比率を見て使用すると良いでしょう。

openpose

一番スタンダードな棒人間の画像です。

手首から先の情報がないため、画像によって様々な角度になっています。

逆に服装に合わせた手首の位置にしてくれるので、手が破綻した絵は少なくなります。

openpose_face

微妙に分かりにくいですが、スタンダードなopenposeに追加で白い点が打たれています(左上)

顔の位置をより強調するので、より正確に元絵の構図に近くなります。

openpose_faceonly

顔の位置だけを抽出したものになります。

そのため顔の位置は元絵と同じ位置ですが、他の構図はバラバラの画像が出力されました。

openpose_full

デフォルトで使用している「Preprocessor」になります。

手首から先や顔の位置も情報として持っているため、より元絵に近い構図で出力されます。

openpose_hand

スタンダードなOpenposeに手首から先の情報を追加した画像です。

ライセンス・商用利用について

元々OpenPoseの機能はCMU社が公開していた機能を指すことが多く、こちらの機能は商用利用する場合は有償のライセンスを購入する必要がありました。

ですがControlNet内の『OpenPose』のProccerの一つである「dw_openpose_full」

こちらに関してはDW Poseという技術を使用しており、Apache License 2.0(無償・無制限で商用利用可能なライセンス)となっています。

そのため商用利用を考えている方は「dw_openpose_full」を使用するようにしましょう。

ただしApache License 2.0のライセンス条項では、「商標の使用不可」とあり商用利用全てが許されているわけではないので、商用の際は一度自分でご確認ください。

OpenPoseと3D OpenPoseの比較

OpenPoseと3D OpenPoseでどちらを使用するとよいか、結果に差異があるか等は下記ブログにまとめてありますので、良ければご覧ください。

まとめ

今回は「Openpose」の機能を用いて、棒人間から画像を生成する方法について紹介しました。

改めて3行でまとめると…

・元絵と同じポーズで画像を生成することが可能

・元絵の顔の大きさや手首から先の状態に合わせてPreprocessorを選ぶと良い。

・商用利用する際には確認と注意が必要

複雑なポーズ言葉で説明するのは難しいですよね。

言葉にできないとプロンプトにすることはできません。

たとえうまく言葉に表したとしても、それがStableDiffusionで上手く再現できるかは別の問題。

そういった時に1枚の写真か画像があれば、そこから再現が可能なOpenPoseを使うことで、躍動感のある絵を簡単に作ることができます。

是非OpenPoseを利用して躍動感のある絵をたくさん描いてみてください。

コメント

タイトルとURLをコピーしました