| 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() |