File size: 5,935 Bytes
e3e4e64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import spaces
import gradio as gr
import subprocess
from PIL import Image,ImageOps,ImageDraw,ImageFilter
import json
import os
import time

from mp_utils import get_pixel_cordinate_list,extract_landmark,get_pixel_cordinate
from glibvision.draw_utils import points_to_box,box_to_xy,plus_point

import numpy as np
from glibvision.pil_utils import fill_points,create_color_image,draw_points,draw_box

from gradio_utils import save_image,save_buffer,clear_old_files ,read_file

from mediapipe_transform import process_landmark_transform_pil


'''
    innner_eyes_blur - inner eyes blur
    iris_mask_blur - final iris edge blur
'''


def process_images(image,transform_target,innner_mouth,innner_eyes,
                   color_matching,transparent_background,add_align_mouth,add_align_eyes,blur_size,
        progress=gr.Progress(track_tqdm=True)):
    clear_old_files()
    if image == None:
        raise gr.Error("Need Image")
    if transform_target == None:
        raise gr.Error("Need one more Target Image")
    
    result = process_landmark_transform_pil(image,transform_target,innner_mouth,innner_eyes,
                                            color_matching,transparent_background,add_align_mouth,add_align_eyes,blur_size)

    return result


css="""
#col-left {
    margin: 0 auto;
    max-width: 640px;
}
#col-right {
    margin: 0 auto;
    max-width: 640px;
}
.grid-container {
  display: flex;
  align-items: center;
  justify-content: center;
  gap:10px
}

.image {
  width: 128px; 
  height: 128px; 
  object-fit: cover; 
}

.text {
  font-size: 16px;
}
"""

#css=css,

def align_check_control(is_transparent):
    if is_transparent:
         return gr.Checkbox(visible=True),gr.Checkbox(visible=True)
    else:
         return gr.Checkbox(visible=False),gr.Checkbox(visible=False)

with gr.Blocks(css=css, elem_id="demo-container") as demo:
    with gr.Column():
        gr.HTML(read_file("demo_header.html"))
        gr.HTML(read_file("demo_tools.html"))
    with gr.Row():
                with gr.Column():
                    image = gr.Image(height=800,sources=['upload','clipboard'],image_mode='RGB',elem_id="image_upload", type="pil", label="Image")
                    align_image = gr.Image(height=800,sources=['upload','clipboard'],image_mode='RGB',elem_id="image_align", type="pil", label="Align Target")
                    
                    with gr.Row(elem_id="prompt-container",  equal_height=False):
                        with gr.Row():
                            btn = gr.Button("Transform landmarks", elem_id="run_button",variant="primary")
                           
                             
                        
                    with gr.Accordion(label="Advanced Settings", open=True):
                        with gr.Row( equal_height=True):
                            innner_mouth = gr.Checkbox(label="Include inner-Mouth",value=True,info="Transform teeesh and tongue") 
                            innner_eyes = gr.Checkbox(label="Include inner Eyes",value=True,info="Transform Iris")
                        with gr.Row( equal_height=True):
                            color_matching = gr.Checkbox(label="color_matching",value=True,info="histgram color matching(not good,when mouth opened)") 
                            transparent_background = gr.Checkbox(label="transparent-background",value=False,info="no background picture")
                        with gr.Row( equal_height=True):
                            add_align_mouth = gr.Checkbox(label="Add Align Mouth",value=True,info="add align-mouth when transparent",visible=False)
                            add_align_eyes = gr.Checkbox(label="Add Align Eyes",value=True,info="add align-eyes when transparent",visible=False)    
                        blur_size = gr.Slider(info="blur-size",
                            label="Blur-Size",
                            minimum=0,
                            maximum=100,
                            step=1,
                            value=50)

                                         
                with gr.Column():
                    result_image = gr.Image(height=760,label="Result", elem_id="output-animation",image_mode='RGBA')
                    
                    
    transparent_background.change(fn=align_check_control,inputs=[transparent_background],outputs=[add_align_mouth,add_align_eyes])
    btn.click(fn=process_images, inputs=[image,align_image,innner_mouth,innner_eyes,
                                         color_matching,transparent_background,add_align_mouth,add_align_eyes,blur_size
                                         ],outputs=[result_image] ,api_name='infer')
    
    example_images = [
                     ["examples/02316230.jpg"],
                    ["examples/00003245_00.jpg"],
                   ["examples/00827009.jpg"],
                     ["examples/00002062.jpg"],
                    ["examples/00824008.jpg"],
                    ["examples/00825000.jpg"],
                    ["examples/00826007.jpg"],
                      ["examples/00824006.jpg"],
                    ["examples/00828003.jpg"],
                    ["examples/01090260.jpg"],
                   
                   
                     ["examples/00002200.jpg"],
                    ["examples/00005259.jpg"],
                    ["examples/00018022.jpg"],
                    ["examples/img-above.jpg"],
                     ["examples/00100265.jpg"],
                      ["examples/02250075.jpg"],
                     
                ]
    example1=gr.Examples(
                examples = example_images,label="Image",
                inputs=[image],examples_per_page=8
    )
    example2=gr.Examples(
                examples =example_images[::-1],label="Align Image",
                inputs=[align_image],examples_per_page=8
    )
    gr.HTML(read_file("demo_footer.html"))

    if __name__ == "__main__":
        demo.launch()