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.