|
import os |
|
import cv2 |
|
import numpy as np |
|
import gradio as gr |
|
from inference import Predictor |
|
from utils.image_processing import resize_image |
|
|
|
os.makedirs('output', exist_ok=True) |
|
|
|
|
|
def inference( |
|
image: np.ndarray, |
|
style, |
|
imgsz=None, |
|
retain_color=False, |
|
): |
|
if imgsz is not None: |
|
imgsz = int(imgsz) |
|
|
|
retain_color = retain_color |
|
|
|
weight = { |
|
"AnimeGANv2_Hayao": "GeneratorV2_gldv2_Hayao.pt", |
|
"AnimeGANv2_Shinkai": "GeneratorV2_gldv2_Shinkai.pt", |
|
"AnimeGANv2_Arcane": "GeneratorV2_ffhq_Arcane_210624_e350.pt", |
|
"AnimeGANv2_Test": "GeneratorV2_train_photo_Hayao.pt", |
|
"SummerWar": "GeneratorV2_train_photo_SummerWar.pt", |
|
"Hetalia": "GeneratorV2_train_photo_Hetalia.pt", |
|
}[style] |
|
predictor = Predictor( |
|
weight, |
|
device='cpu', |
|
retain_color=retain_color, |
|
imgsz=imgsz, |
|
) |
|
|
|
save_path = f"output/out.jpg" |
|
image = resize_image(image, width=imgsz) |
|
anime_image = predictor.transform(image)[0] |
|
cv2.imwrite(save_path, anime_image[..., ::-1]) |
|
return anime_image, save_path |
|
|
|
|
|
title = "图片动漫风格转换" |
|
description = r"""将图片转换成动漫风格""" |
|
|
|
gr.Interface( |
|
fn=inference, |
|
inputs=[ |
|
gr.components.Image(label="输入图片"), |
|
gr.Dropdown( |
|
[ |
|
'AnimeGANv2_Hayao', |
|
'AnimeGANv2_Shinkai', |
|
'AnimeGANv2_Arcane', |
|
'AnimeGANv2_Test', |
|
'SummerWar', |
|
'Hetalia', |
|
], |
|
type="value", |
|
value='AnimeGANv2_Hayao', |
|
label='转换风格' |
|
), |
|
gr.Dropdown( |
|
[ |
|
None, |
|
416, |
|
512, |
|
768, |
|
1024, |
|
1536, |
|
], |
|
type="value", |
|
value=None, |
|
label='图片大小' |
|
), |
|
gr.Checkbox(value=False, label="保留原图颜色"), |
|
], |
|
outputs=[ |
|
gr.components.Image(type="numpy", label="转换后图片"), |
|
gr.components.File(label="下载转换图片") |
|
], |
|
title=title, |
|
description=description, |
|
allow_flagging="never", |
|
examples=[ |
|
['example/face/girl4.jpg', 'AnimeGANv2_Arcane', None], |
|
['example/face/leo.jpg', 'AnimeGANv2_Arcane', None], |
|
['example/face/cap.jpg', 'AnimeGANv2_Arcane', None], |
|
['example/face/anne.jpg', 'AnimeGANv2_Arcane', None], |
|
['example/landscape/pexels-camilacarneiro-6318793.jpg', 'AnimeGANv2_Hayao', None], |
|
['example/landscape/pexels-nandhukumar-450441.jpg', 'AnimeGANv2_Hayao', None], |
|
] |
|
).launch() |
|
|