controlnet-openpose-sdxl-1.0

xinsir
Texto a imagen

Modelo de ControlNet-openpose-sdxl-1.0 de última generación, a continuación se muestran los resultados para midjourney y anime, solo para demostrar.

Como usar

Usa el siguiente código para empezar con el modelo:

from diffusers import ControlNetModel, StableDiffusionXLControlNetPipeline, AutoencoderKL
from diffusers import DDIMScheduler, EulerAncestralDiscreteScheduler
from controlnet_aux import OpenposeDetector
from PIL import Image
import torch
import numpy as np
import cv2

controlnet_conditioning_scale = 1.0
prompt = "tu prompt, cuanto más largo mejor, puedes describirlo tan detallado como sea posible"
negative_prompt = 'cuerpo largo, baja resolución, mala anatomía, malas manos, dedos faltantes, dígito extra, menos dígitos, recortado, peor calidad, baja calidad'

eulera_scheduler = EulerAncestralDiscreteScheduler.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler")

controlnet = ControlNetModel.from_pretrained(
"xinsir/controlnet-openpose-sdxl-1.0",
torch_dtype=torch.float16
)

vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)

pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet,
vae=vae,
safety_checker=None,
torch_dtype=torch.float16,
scheduler=eulera_scheduler,
)

processor = OpenposeDetector.from_pretrained('lllyasviel/ControlNet')

controlnet_img = cv2.imread("tu ruta de imagen")
controlnet_img = processor(controlnet_img, hand_and_face=False, output_type='cv2')

height, width, _  = controlnet_img.shape
ratio = np.sqrt(1024. * 1024. / (width * height))
new_width, new_height = int(width * ratio), int(height * ratio)
controlnet_img = cv2.resize(controlnet_img, (new_width, new_height))
controlnet_img = Image.fromarray(controlnet_img)

images = pipe(
prompt,
negative_prompt=negative_prompt,
image=controlnet_img,
controlnet_conditioning_scale=controlnet_conditioning_scale,
width=new_width,
height=new_height,
num_inference_steps=30,
).images

images[0].save(f"tu ruta de guardado de imágenes, el formato png generalmente es mejor que jpg o webp en términos de calidad de imagen pero tiene un tamaño mayor")

Funcionalidades

Función de pose predeterminada mejorada para obtener mejores resultados.
Capacidad para generar imágenes con anotaciones de pose humana de alta precisión.
Escalabilidad de resolución para obtener mejor rendimiento.

Casos de uso

Generación de imágenes de alta calidad a partir de descripciones textuales.
Mejora en la estabilidad de la pose en imágenes generadas.
Aplicaciones en la creación de contenido artístico y anime.