pintor-de-anime
Este es un modelo controlnet-scribble-sdxl-1.0 que puede generar imágenes de muy alta calidad a partir de un boceto de anime. Puede soportar cualquier tipo y ancho de líneas. Como se puede ver en los ejemplos, el boceto puede ser muy simple e impreciso. Suponemos que solo eres un niño o una persona que no sabe nada de dibujo, puedes simplemente garabatear y escribir algunas etiquetas de danbooru para generar una ilustración de anime hermosa. En nuestra evaluación, el modelo logra un rendimiento de última generación, obviamente mejor que el SDXL1.5 Scribble original entrenado por lvming Zhang. El modelo ha sido entrenado con trucos complejos y un conjunto de datos de alta calidad. Además del puntaje estético, la capacidad de seguir indicaciones y la tasa de deformidad de la imagen también han mejorado mucho. AIGC remodelará la industria de la animación, el modelo que lanzamos puede generar imágenes de anime con una puntuación estética más alta que casi todos los sitios web de anime populares en promedio, así que disfrútalo. Si deseas generar imágenes especialmente atractivas visualmente, debes usar etiquetas de danbooru junto con el lenguaje natural.
Como usar
from diffusers import ControlNetModel, StableDiffusionXLControlNetPipeline, AutoencoderKL
from diffusers import DDIMScheduler, EulerAncestralDiscreteScheduler
from controlnet_aux import PidiNetDetector, HEDdetector
from diffusers.utils import load_image
from huggingface_hub import HfApi
from pathlib import Path
from PIL import Image
import torch
import numpy as np
import cv2
import os
def nms(x, t, s):
x = cv2.GaussianBlur(x.astype(np.float32), (0, 0), s)
f1 = np.array([[0, 0, 0], [1, 1, 1], [0, 0, 0]], dtype=np.uint8)
f2 = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]], dtype=np.uint8)
f3 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.uint8)
f4 = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]], dtype=np.uint8)
y = np.zeros_like(x)
for f in [f1, f2, f3, f4]:
np.putmask(y, cv2.dilate(x, kernel=f) == x, x)
z = np.zeros_like(y, dtype=np.uint8)
z[y > t] = 255
return z
controlnet_conditioning_scale = 1.0
prompt = "your prompt, the longer the better, you can describe it as detail as possible"
negative_prompt = 'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
eulera_scheduler = EulerAncestralDiscreteScheduler.from_pretrained("gsdf/CounterfeitXL", subfolder="scheduler")
controlnet = ControlNetModel.from_pretrained("xinsir/anime-painter", torch_dtype=torch.float16)
vae = AutoencoderKL.from_pretrained("gsdf/CounterfeitXL", subfolder="vae", torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
"gsdf/CounterfeitXL",
controlnet=controlnet,
vae=vae,
safety_checker=None,
torch_dtype=torch.float16,
scheduler=eulera_scheduler,
)
if random.random() > 0.5:
image_path = Image.open("your image path, the image can be real or anime, HED detector will extract its edge boundery")
processor = HEDdetector.from_pretrained('lllyasviel/Annotators')
controlnet_img = processor(image_path, scribble=False)
controlnet_img.save("a hed detect path for an image")
controlnet_img = np.array(controlnet_img)
controlnet_img = nms(controlnet_img, 127, 3)
controlnet_img = cv2.GaussianBlur(controlnet_img, (0, 0), 3)
random_val = int(round(random.uniform(0.01, 0.10), 2) * 255)
controlnet_img[controlnet_img > random_val] = 255
controlnet_img = Image.fromarray(controlnet_img)
else:
control_path = "the sketch image you draw with some tools, like drawing board, the path you save it"
controlnet_img = Image.open(control_path)
width, height = controlnet_img.size
ratio = np.sqrt(1024. * 1024. / (width * height))
new_width, new_height = int(width * ratio), int(height * ratio)
controlnet_img = controlnet_img.resize((new_width, new_height))
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"your image save path, png format is usually better than jpg or webp in terms of image quality but got much bigger")
Funcionalidades
- Soporte de cualquier tipo de boceto de anime
- Generación de imágenes de alta calidad incluso a partir de bocetos simples
- Entrenado con datos complejos y de alta calidad
- Mejora en la puntuación estética y la capacidad de seguir indicaciones
- Reducción de la tasa de deformidad de la imagen
Casos de uso
- Creación de ilustraciones de anime a partir de bocetos simples
- Generación de imágenes de alta calidad para contenido visual
- Facilitación de la creación de arte para personas sin experiencia en dibujo
- Expansión de los límites de la creatividad y la imaginación