File size: 4,742 Bytes
c88be80
 
 
 
 
f19a916
4ac0a4f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f19a916
 
 
 
 
 
 
 
b2c192d
 
 
 
 
 
c88be80
b2c192d
 
 
 
 
 
f19a916
ed8443d
 
 
3fe116d
e735dec
 
 
 
 
 
3fe116d
e735dec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f19a916
8878d9b
b791bf5
f19a916
 
 
 
4ac0a4f
f19a916
 
 
4ac0a4f
f19a916
 
 
 
 
5b451b0
b791bf5
 
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
import gradio as gr
import requests
import datadog_api_client
from PIL import Image

def face_crop(image, face_rect):
    x1 = face_rect.get('x1')
    y1 = face_rect.get('y1')
    x2 = face_rect.get('x2')
    y2 = face_rect.get('y2')
    width = x2 - x1 + 1
    height = y2 - y2 + 1


    if x1 < 0:
        x1 = 0
    if y1 < 0:
        y1 = 0
    if x2 >= image.width:
        x2 = image.width - 1
    if y2 >= image.height:
        y2 = image.height - 1

    face_image = image.crop((x1, y1, x2, y2))
    face_image_ratio = face_image.width / float(face_image.height)
    resized_w = int(face_image_ratio * 150)
    resized_h = 150

    face_image = face_image.resize((int(resized_w), int(resized_h)))
    return face_image

def compare_face(image1, image2):
    try:
        img_bytes1 = io.BytesIO()
        image1.save(img_bytes1, format="JPEG")
        img_bytes1.seek(0)
    except:
        return "Failed to open image1"

    try:
        img_bytes2 = io.BytesIO()
        image2.save(img_bytes2, format="JPEG")
        img_bytes2.seek(0)
    except:
        return "Failed to open image2"
    
    # url = "http://127.0.0.1:8080/compare_face"
    # files = {'file1': img_bytes1, 'file2': img_bytes2}
    # result = requests.post(url=url, files=files)

    return "abcdef"

    # print(result)
    # if result.ok:
    #     json_result = result.json()
    #     printf("json_result", json_result)
        
    #     if json_result.get("resultCode") != "Ok":
    #         return [json_result.get("resultCode"), json_result]

    #     html = ""
    #     faces1 = json_result.get("faces1", {})
    #     faces2 = json_result.get("faces2", {})
    #     results = json_result.get("results", {})

    #     for result in results:
    #         score = result.get('score')
    #         face1_idx = result.get('face1')
    #         face2_idx = result.get('face2')

    #         face_image1 = face_crop(image1, faces1[face1_idx])
    #         face_value1 = ('<img src="data:image/png;base64,{base64_image}" style="width: 100px; height: auto; object-fit: contain;"/>').format(base64_image=pil_image_to_base64(face_image1, format="PNG"))

    #         face_image2 = face_crop(image2, faces2[face2_idx])
    #         face_value2 = ('<img src="data:image/png;base64,{base64_image}" style="width: 100px; height: auto; object-fit: contain;"/>').format(base64_image=pil_image_to_base64(face_image2, format="PNG"))

    #         match_icon = '<svg fill="red" width="19" height="32" viewBox="0 0 19 32"><path d="M0 13.92V10.2H19V13.92H0ZM0 21.64V17.92H19V21.64H0Z"></path><path d="M14.08 0H18.08L5.08 32H1.08L14.08 0Z"></path></svg>'
    #         if score > 0.7:
    #             match_icon = '<svg fill="green" width="19" height="32" viewBox="0 0 19 32"><path d="M0 13.9202V10.2002H19V13.9202H0ZM0 21.6402V17.9202H19V21.6402H0Z"></path></svg>'

    #         item_value = ('<div style="align-items: center; gap: 10px; display: flex; flex-direction: column;">'
    #                         '<div style="display: flex; align-items: center; gap: 20px;">'
    #                         '{face_value1}'
    #                         '{match_icon}'
    #                         '{face_value2}'
    #                         '</div>'
    #                         '<div style="text-align: center; margin-top: 10px;">'
    #                         'Score: {score}'
    #                         '</div>'
    #                         '</div>'
    #         ).format(face_value1=face_value1, face_value2=face_value2, match_icon=match_icon, score=f"{score:.2f}")
    #         html += item_value
    #         html += '<hr style="border: 1px solid #C0C0C0; margin: 10px 0;"/>'

    #     return html
    # else:
    #     return result.text
        
with gr.Blocks(css=".gradio-container {background-color: #F4E5E0}") as demo:
    with gr.Row():
        with gr.Column(scale=7):
            with gr.Row():
                with gr.Column():
                    image_input1 = gr.Image(type='pil')
                    gr.Examples(['face_examples/1.jpg', 'face_examples/3.jpg', 'face_examples/7.jpg', 'face_examples/9.jpg'], 
                                inputs=image_input1)
                with gr.Column():
                    image_input2 = gr.Image(type='pil')
                    gr.Examples(['face_examples/2.jpg', 'face_examples/4.jpg', 'face_examples/8.jpg', 'face_examples/10.jpg'], 
                                inputs=image_input2)
            face_recog_button = gr.Button("Face Recognition")
        with gr.Column(scale=3):
            recog_html_output = gr.HTML()

    face_recog_button.click(compare_face, inputs=[image_input1, image_input2], outputs=recog_html_output)

demo.launch(server_name="0.0.0.0", server_port=7860)