HW1 / app.py
Howarddddd's picture
Update app.py
9bc40a3 verified
import gradio as gr
import onnxruntime as ort
import cv2
import numpy as np
from PIL import Image
import os
import uuid
# 啟動 ONNX 模型 Session
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] if ort.get_device() == 'GPU' else ['CPUExecutionProvider']
session = ort.InferenceSession('AnimeGANv3_Hayao_STYLE_36.onnx', providers=providers)
# 圖片處理
def process_image(img):
h, w = img.shape[:2]
def to_8s(x): return 256 if x < 256 else x - x % 8
img = cv2.resize(img, (to_8s(w), to_8s(h)))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32) / 127.5 - 1.0
return img
# 圖片轉換 + 下載功能
def cartoonize_image(input_image):
img = np.array(input_image)
h, w = img.shape[:2]
processed = process_image(img)
processed = np.expand_dims(processed, axis=0)
input_name = session.get_inputs()[0].name
output = session.run(None, {input_name: processed})[0]
result = (np.squeeze(output) + 1.) / 2 * 255
result = np.clip(result, 0, 255).astype(np.uint8)
result = cv2.resize(result, (w, h))
result = cv2.cvtColor(result, cv2.COLOR_RGB2BGR)
result_image = Image.fromarray(result)
# 保存下載檔案
os.makedirs("outputs", exist_ok=True)
filename = f"outputs/{uuid.uuid4().hex}.png"
result_image.save(filename)
return result_image, filename
# Gradio UI
interface = gr.Interface(
fn=cartoonize_image,
inputs=gr.Image(type="pil", label="上傳圖片"),
outputs=[
gr.Image(type="pil", label="宮崎駿風格轉換結果"),
gr.File(label="⬇️ 下載圖片")
],
title="🎨 AnimeGANv3 - 宮崎駿風格轉換器",
description="上傳圖片,將自動轉換為宮崎駿動畫風格!",
allow_flagging="never"
)
interface.launch()