neu / app.py
drdudddd's picture
Create app.py
19b551e verified
Raw History Blame Contribute Delete
2.1 kB
import gradio as gr
import cv2
import numpy as np
from PIL import Image
import torch
from AnimeGANv2.test import inference, load_model
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
generator = None
def get_generator():
global generator
if generator is None:
generator = load_model(style="Hayao", device=DEVICE)
return generator
def ghibli_transform(image):
if image is None:
return None, "Kein Bild"
try:
gen = get_generator()
img_np = np.array(image)
img_bgr = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
cartoon_bgr = inference.inference(gen, img_bgr, device=DEVICE)
cartoon_rgb = cv2.cvtColor(cartoon_bgr, cv2.COLOR_BGR2RGB)
result = Image.fromarray(cartoon_rgb)
return result, "fertig"
except Exception as e:
return None, str(e)
css = """
.gradio-container { max-width: 1100px; margin: auto; padding: 1rem; }
h1 { color: #4CAF50; text-align: center; }
button { min-height: 50px; font-size: 1.1rem !important; }
"""
with gr.Blocks(css=css, theme=gr.themes.Soft(primary_hue="green")) as demo:
gr.Markdown("# Foto → Studio Ghibli Style (Hayao)")
with gr.Row():
input_image = gr.Image(type="pil", label="Original", sources=["upload", "clipboard"], height=480)
with gr.Column(min_width=280):
btn = gr.Button("In Ghibli-Stil umwandeln", variant="primary")
output_image = gr.Image(label="Ergebnis", height=480)
status = gr.Textbox(label="Status", interactive=False)
gr.Examples(
examples=[
"https://images.unsplash.com/photo-1506905925346-21bda4d32df4",
"https://images.unsplash.com/photo-1543466835-00a7907e9de1",
"https://images.unsplash.com/photo-1501785888041-af3ef285b470",
"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05",
],
inputs=input_image
)
btn.click(
fn=ghibli_transform,
inputs=input_image,
outputs=[output_image, status]
)
if __name__ == "__main__":
demo.launch()