File size: 2,922 Bytes
046b3c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
de7b3c0
 
046b3c9
de7b3c0
 
 
 
046b3c9
de7b3c0
046b3c9
de7b3c0
046b3c9
de7b3c0
046b3c9
de7b3c0
046b3c9
de7b3c0
 
 
 
 
 
 
 
 
 
046b3c9
 
de7b3c0
046b3c9
de7b3c0
 
 
 
 
046b3c9
 
 
 
28196c0
046b3c9
 
 
 
 
 
 
 
 
 
 
de7b3c0
046b3c9
 
 
de7b3c0
046b3c9
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import logging
import os

import gradio as gr
import numpy as np
from PIL import Image
from huggingface_hub import hf_hub_url, cached_download

from inference.face_detector import StatRetinaFaceDetector
from inference.model_pipeline import VSNetModelPipeline
from inference.onnx_model import ONNXModel

logging.basicConfig(
    format='%(asctime)s %(levelname)-8s %(message)s',
    level=logging.INFO,
    datefmt='%Y-%m-%d %H:%M:%S')

MODEL_IMG_SIZE = 256
def load_model():
    REPO_ID = "Podtekatel/ARCNEGAN"
    FILENAME_OLD = "arcane_exp_203_ep_399.onnx"
    FILENAME_NEW = "arcane_exp_206_ep_138.onnx"

    global model_old
    global model_new
    global pipeline_old
    global pipeline_new

    # Old model
    model_path = cached_download(
        hf_hub_url(REPO_ID, FILENAME_OLD), use_auth_token=os.getenv('HF_TOKEN')
    )
    model_old = ONNXModel(model_path)

    pipeline_old = VSNetModelPipeline(model_old, StatRetinaFaceDetector(MODEL_IMG_SIZE), background_resize=1024, no_detected_resize=1024)

    # New model
    model_path = cached_download(
        hf_hub_url(REPO_ID, FILENAME_NEW), use_auth_token=os.getenv('HF_TOKEN')
    )
    model_new = ONNXModel(model_path)

    pipeline_new = VSNetModelPipeline(model_new, StatRetinaFaceDetector(MODEL_IMG_SIZE), background_resize=1024,
                                      no_detected_resize=1024)

    return model_old, model_new
load_model()

def inference(img, ver):
    img = np.array(img)
    if ver == 'version 2':
        out_img = pipeline_new(img)
    else:
        out_img = pipeline_old(img)

    out_img = Image.fromarray(out_img)
    return out_img


title = "ARCNStyleTransfer"
description = "Gradio Demo for Arcane Season 1 style transfer. To use it, simply upload your image, or click one of the examples to load them."
article = "This is one of my successful experiments on style transfer. I've built my own pipeline, generator model and private dataset to train this model<br>" \
          "" \
          "" \
          "" \
          "Model pipeline which used in project is improved CartoonGAN.<br>" \
          "This model was trained on RTX 2080 Ti 1.5 days with batch size 7.<br>" \
          "Model weights 64 MB in ONNX fp32 format, infers 25 ms on GPU and 150 ms on CPU at 256x256 resolution.<br>" \
          "If you want to use this app or integrate this model into yours, please contact me at email '[email protected]'."

imgs_folder = 'demo'
examples = [[os.path.join(imgs_folder, img_filename), version] for img_filename in sorted(os.listdir(imgs_folder)) for version in ['version 2']]

demo = gr.Interface(
    fn=inference,
    inputs=[gr.inputs.Image(type="pil"), gr.inputs.Radio(['version 1', 'version 2'], type="value", default='version 2', label='version')],
    outputs=gr.outputs.Image(type="pil"),
    title=title,
    description=description,
    article=article,
    examples=examples)

demo.launch()