OpenPose(棒人間)を作成したり入手する

2024年7月7日

Stable DiffusionのControlNetで使えるOpenPose画像をあらかじめ用意することを考えます

controlnet_aux

annotator

https://github.com/patrickvonplaten/controlnet_aux

Pythonを使用します。モデルは自動的にダウンロードされます

pip install controlnet-aux
# -*- coding: utf-8 -*-
import requests
from PIL import Image
from io import BytesIO

from controlnet_aux.processor import Processor

# load image
url = "https://huggingface.co/lllyasviel/sd-controlnet-openpose/resolve/main/images/pose.png"

response = requests.get(url)
img = Image.open(BytesIO(response.content)).convert("RGB").resize((512, 512))

# load processor from processor_id
# options are:
# ["canny", "depth_leres", "depth_leres++", "depth_midas", "depth_zoe", "lineart_anime",
#  "lineart_coarse", "lineart_realistic", "mediapipe_face", "mlsd", "normal_bae", "normal_midas",
#  "openpose", "openpose_face", "openpose_faceonly", "openpose_full", "openpose_hand",
#  "scribble_hed, "scribble_pidinet", "shuffle", "softedge_hed", "sof tedge_hedsafe",
#  "softedge_pidinet", "softedge_pidsafe", "dwpose"]
processor_id = 'openpose_face'
processor_id = 'openpose_faceonly'
processor_id = 'openpose_full'
processor_id = 'openpose_hand'
processor_id = 'openpose'
processor = Processor(processor_id)

processed_image = processor(img, to_pil=True)
processed_image.save(f"{processor_id}.png")

DWposeはこちら
https://memo.eightban.com/stable-diffusion/dwpose

バッチ処理で複数のポーズを作りたい場合はこちら
https://memo.eightban.com/stable-diffusion/openposedwpose

pytorch-openpose

https://github.com/Hzzone/pytorch-openpose

body_pose_model.pth
https://huggingface.co/ckpt/ControlNet/blob/main/body_pose_model.pth

hand_pose_model.pth
https://huggingface.co/ckpt/ControlNet/blob/main/hand_pose_model.pth

Pythonを使用します。モデルをダウンロードして配置する必要があります。

import cv2
import matplotlib.pyplot as plt
import copy
import numpy as np

from src import model
from src import util
from src.body import Body
from src.hand import Hand

body_estimation = Body('model/body_pose_model.pth')
hand_estimation = Hand('model/hand_pose_model.pth')

test_image = 'images/demo.jpg'
oriImg = cv2.imread(test_image)  # B,G,R order

candidate, subset = body_estimation(oriImg)
canvas = copy.deepcopy(oriImg)
cv2.rectangle(canvas, (0, 0), (oriImg.shape[1],oriImg.shape[0]), (0, 0, 0), -1)
canvas = util.draw_bodypose(canvas, candidate, subset)
# detect hand
hands_list = util.handDetect(candidate, subset, oriImg)

all_hand_peaks = []
for x, y, w, is_left in hands_list:
    # cv2.rectangle(canvas, (x, y), (x+w, y+w), (0, 255, 0), 2, lineType=cv2.LINE_AA)
    # cv2.putText(canvas, 'left' if is_left else 'right', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

    # if is_left:
        # plt.imshow(oriImg[y:y+w, x:x+w, :][:, :, [2, 1, 0]])
        # plt.show()
    peaks = hand_estimation(oriImg[y:y+w, x:x+w, :])
    peaks[:, 0] = np.where(peaks[:, 0]==0, peaks[:, 0], peaks[:, 0]+x)
    peaks[:, 1] = np.where(peaks[:, 1]==0, peaks[:, 1], peaks[:, 1]+y)
    # else:
    #     peaks = hand_estimation(cv2.flip(oriImg[y:y+w, x:x+w, :], 1))
    #     peaks[:, 0] = np.where(peaks[:, 0]==0, peaks[:, 0], w-peaks[:, 0]-1+x)
    #     peaks[:, 1] = np.where(peaks[:, 1]==0, peaks[:, 1], peaks[:, 1]+y)
    #     print(peaks)
    all_hand_peaks.append(peaks)

canvas = util.draw_handpose(canvas, all_hand_peaks)

plt.imshow(canvas[:, :, [2, 1, 0]])
plt.axis('off')
plt.show()

本家の OpenPoseで棒人間を作成

Pythonをインストールしなくても使用することができます。

PoseMy.Art

アートのポーズリファレンスを作成するのに役立つ巨大なアニメーション/ポーズライブラリを備えたシンプルで強力な3Dモデルポーザー

https://posemy.art/

ライブラリーからポーズを選んでオープンポーズ形式で保存することができます。またポーズを自由に変更することができます

open-pose-editor-dev

https://github.com/ZhUyU1997/open-pose-editor-dev

リリースページからHTMLをダウンロードしてください。棒人間をクリックするとポーズを変更することができます

棒人間のままポーズを変更でき情報をジェイソン形式で保存することができ再利用ができます。画像からポーズ作成したりランダムポーズを利用することができます。ウェブアプリのため機種を問いません。

こちらのURLをクリックするとダウンロードしなくても動かすことができます
https://zhuyu1997.github.io/open-pose-editor/

Posex – Estimated Image Generator for Pose2Image

マウス操作で指定できます。パイソンプログラムです

https://github.com/hnmr293/posex

Openpose Editor – BO-NIN

棒人間エディタ BO-NIN はOpenposeデータを編集することができるエディタです。Windows上でスタンドアロンにて動作します。マウスで操作します

https://nkmr-aw.itch.io/bonin

Blender

openposeのようなモデルをダウンロードし展開します。Blenderから読み込むと使用することができます

Character bones that look like Openpose for blender _ Ver_94 Depth+Canny+Landmark+MediaPipeFace+finger (gumroad.com)

civitai

Civitaiは、Stable Diffusion AIアートモデルのためのプラットフォームです。増え続けるクリエイターの何千ものモデルのコレクションを閲覧できます。

civitai models posesを選びオープンポーズをダウンロードしてください
https://civitai.com/models?tag=poses

18禁のデータは登録すると見ることができます

Poseと入れて検索しても出てきます

オープンポーズ画像に余白を入れたり自動でトリミングするPythonプログラム

余分な余白を取り除いたり頭の部分を全て表示できるように余白を入れたりするプログラムです

https://memo.eightban.com/python/trim_image_with_margins

diffusersで使用する方法

https://memo.eightban.com/stable-diffusion/stable-diffusion-diffusers1

フリー素材

フリー素材の中に色々なポーズがあります

AIピックス

AIが生成した美女のフリー素材

https://ai-pix.net/

ぱくたそ

ぱくたそは、高品質・高解像度の写真を無料でダウンロードできるウェブサービスです。

ぱくたそ (pakutaso.com)

パブリックドメインQ:著作権フリー画像素材集

パブリックドメインQ:著作権フリー画像素材集 (publicdomainq.net)

VRMファイル(モデルデータ)を作って動かす

モデルデータを作るとモーションキャプチャーしたりモーションキャプチャーデータを使って動かすこともできます。もちろん用意されたポーズを使って画像を保存したりすることもできます。

https://memo.eightban.com/etc/vrm

https://memo.eightban.com/etc/bvh

DensePose 

stable-diffusion

Posted by eightban