File size: 2,655 Bytes
9af3c99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import os
import tempfile
from main import process_face

def enhance_face_gradio(input_image, ref_image):
    """
    Wrapper function for process_face that works with Gradio.
    
    Args:
        input_image: Input image from Gradio
        ref_image: Reference face image from Gradio
        
    Returns:
        str: Path to the enhanced image
    """
    # Create temporary files for input, reference, and output
    with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as input_file, \
         tempfile.NamedTemporaryFile(suffix=".png", delete=False) as ref_file, \
         tempfile.NamedTemporaryFile(suffix=".png", delete=False) as output_file:
        
        input_path = input_file.name
        ref_path = ref_file.name
        output_path = output_file.name
    
    # Save uploaded images to temporary files
    input_image.save(input_path)
    ref_image.save(ref_path)
    
    # Process the face
    process_face(
        input_path=input_path,
        ref_path=ref_path,
        crop=False,
        upscale=False,
        output_path=output_path
    )
    
    # Clean up temporary input and reference files
    os.unlink(input_path)
    os.unlink(ref_path)
    
    return output_path

# Create the Gradio interface
with gr.Blocks(title="Face Enhancement Demo") as demo:
    gr.Markdown("# Face Enhancement Demo")
    gr.Markdown("Upload an input image and a reference face image to enhance the input.")
    
    with gr.Row():
        with gr.Column():
            input_image = gr.Image(label="Input Image", type="pil")
            ref_image = gr.Image(label="Reference Face", type="pil")
            enhance_button = gr.Button("Enhance Face")
        
        with gr.Column():
            output_image = gr.Image(label="Enhanced Result")
    
    enhance_button.click(
        fn=enhance_face_gradio,
        inputs=[input_image, ref_image],
        outputs=output_image,
        queue=True  # Enable queue for sequential processing
    )
    
    gr.Markdown("""
    ## Instructions
    1. Upload an image you want to enhance
    2. Upload a reference face image
    3. Click 'Enhance Face' to start the process
    4. Processing takes about 60 seconds
    """)

# Launch the Gradio app with queue
if __name__ == "__main__":
    # Set up queue with max_size=20 and concurrency=1
    demo.queue(max_size=20)  # Configure queue size
    demo.launch(
        share=False,  # Set to True if you want a public link
        server_name="0.0.0.0",  # Make available on all network interfaces
        server_port=7860,  # Default Gradio port
        # concurrency_count=1  # Process one job at a time
    )