File size: 3,651 Bytes
3adf6e3
9f19e0d
3adf6e3
 
 
 
 
 
7d1312d
3adf6e3
 
7d1312d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
os.makedirs("./checkpoints", exist_ok=True)
os.system("wget https://huggingface.co/wmpscc/StyleGene/resolve/main/e4e_ffhq_encode.pt -o ./checkpoints/e4e_ffhq_encode.pt")
os.system("wget https://huggingface.co/wmpscc/StyleGene/resolve/main/res34_fair_align_multi_7_20190809.pt -o ./checkpoints/res34_fair_align_multi_7_20190809.pt")
os.system("wget https://huggingface.co/wmpscc/StyleGene/resolve/main/shape_predictor_68_face_landmarks.dat.bz2 -o ./checkpoints/shape_predictor_68_face_landmarks.dat.bz2")
os.system("wget https://huggingface.co/wmpscc/StyleGene/resolve/main/stylegan2-ffhq-config-f.pt -o ./checkpoints/stylegan2-ffhq-config-f.pt")
os.system("wget https://huggingface.co/wmpscc/StyleGene/resolve/main/stylegene_N18.ckpt -o ./checkpoints/stylegene_N18.ckpt")
os.system("wget https://huggingface.co/wmpscc/StyleGene/resolve/main/geneFactorPool.pkl -o ./checkpoints/geneFactorPool.pkl")

import gradio as gr
from models.stylegene.api import synthesize_descendant

description = """<p style="text-align: center; font-weight: bold;">
        <span style="font-size: 28px">StyleGene: Crossover and Mutation of Region-Level Facial Genes for Kinship Face Synthesis</span>
        <br>
        <span style="font-size: 18px" id="paper-info">
            [<a href="https://wmpscc.github.io/stylegene/" target="_blank">Project Page</a>]
            [<a href="https://openaccess.thecvf.com/content/CVPR2023/papers/Li_StyleGene_Crossover_and_Mutation_of_Region-Level_Facial_Genes_for_Kinship_CVPR_2023_paper.pdf" target="_blank">Paper</a>]
            [<a href="https://github.com/CVI-SZU/StyleGene" target="_blank">GitHub</a>]
        </span>
        <br> 
        <a> Tips: One picture should have only one face.</a>
    </p>"""

block = gr.Blocks()
with block:
    gr.HTML(description)
    with gr.Row():
        with gr.Column():
            gr.Markdown("### Upload photos of father and mother")
            with gr.Row():
                img1 = gr.Image(label="Father")
                img2 = gr.Image(label="Mother")
            gr.Markdown("### Select the child's age and gender")
            with gr.Row():
                age = gr.Dropdown(label="Age",
                                  choices=["0-2", "3-9", "10-19", "20-29", "30-39",
                                           "40-49", "50-59", "60-69", "70+"], value="3-9")
                gender = gr.Dropdown(label="Gender", choices=["male", "female"], value="female")
            gr.Markdown("### Adjust your child's resemblance to parents")
            bar1 = gr.Slider(label="gamma", minimum=0, maximum=1, value=0.47)
            bar2 = gr.Slider(label="eta", minimum=0, maximum=1, value=0.4)
            bt_run = gr.Button("Run")
            gr.Markdown("""## Disclaimer
                            This method is intended for academic research purposes only and is strictly prohibited for commercial use.
                            Users are required to comply with all local laws and regulations when using this method.""")

        with gr.Column():
            gr.Markdown("### Results")
            img3 = gr.Image(label="Generated child")
            with gr.Row():
                img1_align = gr.Image(label="Father")
                img2_align = gr.Image(label="Mother")


    def run(father, mother, gamma, eta, age, gender):
        attributes = {'age': age, 'gender': gender, 'gamma': float(gamma), 'eta': float(eta)}
        img_F, img_M, img_C = synthesize_descendant(father, mother, attributes)
        return img_F, img_M, img_C


    bt_run.click(run, [img1, img2, bar1, bar2, age, gender], [img1_align, img2_align, img3])

block.launch(show_error=True)