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()
|