Img_test / app.py
Kingoteam's picture
Update app.py
4a0c367 verified
import os
import sys
import types
import cv2
import gradio as gr
import numpy as np
from gfpgan import GFPGANer
from huggingface_hub import hf_hub_download
# -------- Patch برای جلوگیری از ارور torchvision.transforms.functional_tensor --------
try:
import torchvision.transforms.functional_tensor
except ModuleNotFoundError:
# ساخت یک ماژول خالی به جای functional_tensor
sys.modules['torchvision.transforms.functional_tensor'] = types.ModuleType('functional_tensor')
# -------- کش مدل‌ها --------
loaded_models = {}
def load_model(version):
if version not in loaded_models:
if version == "v1.4 (original)":
model_path = hf_hub_download("leonelhs/gfpgan", "GFPGANv1.4.pth")
loaded_models[version] = GFPGANer(
model_path=model_path,
upscale=1,
arch='original',
channel_multiplier=2,
bg_upsampler=None
)
elif version == "v1.3 (clean)":
model_path = hf_hub_download("leonelhs/gfpgan", "GFPGANv1.3.pth")
loaded_models[version] = GFPGANer(
model_path=model_path,
upscale=1,
arch='clean',
channel_multiplier=2,
bg_upsampler=None
)
return loaded_models[version]
# -------- تابع اصلی پردازش تصویر --------
def enhance_face(image, version):
restorer = load_model(version)
if isinstance(image, np.ndarray):
img = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
else:
raise ValueError("Invalid image format")
_, _, restored_img = restorer.enhance(
img, has_aligned=False, only_center_face=False, paste_back=True
)
restored_img = cv2.cvtColor(restored_img, cv2.COLOR_BGR2RGB)
return restored_img
# -------- رابط کاربری Gradio --------
iface = gr.Interface(
fn=enhance_face,
inputs=[
gr.Image(type="numpy", label="Upload your Anime/Cartoon image"),
gr.Radio(["v1.3 (clean)", "v1.4 (original)"], value="v1.4 (original)", label="Choose GFPGAN Version")
],
outputs=gr.Image(type="numpy", label="Restored Cartoon Face"),
title="Cartoon Face Restoration with GFPGAN",
description="Upload a cartoonized image (e.g. from AnimeGAN) and restore it with GFPGAN."
)
if __name__ == "__main__":
iface.launch()