dc086989's picture
Update app.py
51b0e83 verified
import gradio as gr
import os
import requests
from PIL import Image
def face_compare(frame1, frame2):
url = "https://face.miniai.live/api/face_match"
files = {'image1': open(frame1, 'rb'), 'image2': open(frame2, 'rb')}
r = requests.post(url=url, files=files)
response = r.json()
detections = response.get("detections", [])
matches = response.get("match", [])
detection_rows = ""
match_rows = ""
# Process detections
for detection in detections:
face_image = detection.get("face", "")
face_img_tag = f"<img src='data:image/png;base64,{face_image}' width='100' />" if face_image else "N/A"
first_face_index = detection.get("firstFaceIndex", "N/A")
second_face_index = detection.get("secondFaceIndex", "N/A")
detection_rows += f"""
<tr>
<td>{first_face_index}</td>
<td>{second_face_index}</td>
<td>{face_img_tag}</td>
</tr>
"""
# Process matches
for match in matches:
first_face_index = match.get("firstFaceIndex", "N/A")
second_face_index = match.get("secondFaceIndex", "N/A")
similarity = match.get("similarity", "N/A")
match_rows += f"""
<tr>
<td>{first_face_index}</td>
<td>{second_face_index}</td>
<td>{similarity:.6f}</td>
</tr>
"""
# Create HTML tables
detections_table = f"""
<h3>Face Detection</h3>
<table border="1" style="border-collapse: collapse; width: 100%;">
<tr>
<th>First Face Index</th>
<th>Second Face Index</th>
<th>Face Image</th>
</tr>
{detection_rows}
</table>
"""
matches_table = f"""
<h3>Matching Results</h3>
<table border="1" style="border-collapse: collapse; width: 100%;">
<tr>
<th>First Face Index</th>
<th>Second Face Index</th>
<th>Similarity</th>
</tr>
{match_rows}
</table>
"""
return detections_table + matches_table
def check_liveness(frame):
url = "https://facelive.miniai.live/api/check_liveness"
files = {'image': open(frame, 'rb')}
r = requests.post(url=url, files=files)
html = None
table_value = ""
for key, value in r.json().items():
row_value = ("<tr>"
"<td>{key}</td>"
"<td>{value}</td>"
"</tr>".format(key=key, value=value))
table_value = table_value + row_value
html = ("<table>"
"<tr>"
"<th style=""width:30%"">Field</th>"
"<th style=""width:50%"">Value</th>"
"</tr>"
"{table_value}"
"</table>".format(table_value=table_value))
return html
# APP Interface
with gr.Blocks() as MiniAIdemo:
gr.Markdown(
"""
<a href="https://miniai.live" style="display: flex; align-items: center;">
<img src="https://miniai.live/wp-content/uploads/2024/02/logo_name-1-768x426-1.png" style="width: 18%; margin-right: 15px;"/>
<div>
<p style="font-size: 40px; font-weight: bold; margin-right: 20px;">FaceRecognition-LivenessDetection SDK Demo</p>
<p style="font-size: 20px; margin-right: 0;">Experience our NIST FRVT Top Ranked FaceRecognition, iBeta 2 Certified Face Liveness Detection Engine</p>
</div>
</a>
<br/>
<div style="display: flex; justify-content: center; align-items: center;">
<table style="text-align: center;">
<tr>
<td style="text-align: center; vertical-align: middle;"><a href="https://github.com/MiniAiLive"><img src="https://miniai.live/wp-content/uploads/2024/10/new_git-1-300x67.png" style="height: 50px; margin-right: 5px;" title="GITHUB"/></a></td>
<td style="text-align: center; vertical-align: middle;"><a href="https://huggingface.co/MiniAiLive"><img src="https://miniai.live/wp-content/uploads/2024/10/new_hugging-1-300x67.png" style="height: 50px; margin-right: 5px;" title="HuggingFace"/></a></td>
<td style="text-align: center; vertical-align: middle;"><a href="https://demo.miniai.live"><img src="https://miniai.live/wp-content/uploads/2024/10/new_gradio-300x67.png" style="height: 50px; margin-right: 5px;" title="Gradio"/></a></td>
</tr>
<tr>
<td style="text-align: center; vertical-align: middle;"><a href="https://docs.miniai.live/"><img src="https://miniai.live/wp-content/uploads/2024/10/a-300x70.png" style="height: 50px; margin-right: 5px;" title="Documentation"/></a></td>
<td style="text-align: center; vertical-align: middle;"><a href="https://www.youtube.com/@miniailive"><img src="https://miniai.live/wp-content/uploads/2024/10/Untitled-1-300x70.png" style="height: 50px; margin-right: 5px;" title="Youtube"/></a></td>
<td style="text-align: center; vertical-align: middle;"><a href="https://play.google.com/store/apps/dev?id=5831076207730531667"><img src="https://miniai.live/wp-content/uploads/2024/10/googleplay-300x62.png" style="height: 50px; margin-right: 5px;" title="Google Play"/></a></td>
</tr>
</table>
</div>
<br/>
"""
)
with gr.Tabs():
with gr.Tab("Face Recognition"):
with gr.Row():
with gr.Column():
im_match_in1 = gr.Image(type='filepath', height=300)
gr.Examples(
[
"images/compare/demo-pic22.jpg",
"images/compare/demo-pic60.jpg",
"images/compare/demo-pic35.jpg",
"images/compare/demo-pic33.jpg",
"images/compare/demo-pic34.jpg",
],
inputs=im_match_in1
)
with gr.Column():
im_match_in2 = gr.Image(type='filepath', height=300)
gr.Examples(
[
"images/compare/demo-pic41.jpg",
"images/compare/demo-pic32.jpg",
"images/compare/demo-pic39.jpg",
"images/compare/demo-pic61.jpg",
"images/compare/demo-pic40.jpg",
],
inputs=im_match_in2
)
with gr.Column():
txt_compare_out = gr.HTML()
btn_f_match = gr.Button("Check Comparing!", variant='primary')
btn_f_match.click(face_compare, inputs=[im_match_in1, im_match_in2], outputs=txt_compare_out)
with gr.Tab("Face Liveness Detection"):
with gr.Row():
with gr.Column():
im_liveness_in = gr.Image(type='filepath', height=300)
gr.Examples(
[
"images/liveness/f_real_andr.jpg",
"images/liveness/f_fake_andr_mask3d.jpg",
"images/liveness/f_fake_andr_monitor.jpg",
"images/liveness/f_fake_andr_outline.jpg",
"images/liveness/f_fake_andr_outline3d.jpg",
"images/liveness/1.jpg",
"images/liveness/3.png",
"images/liveness/4.jpg",
],
inputs=im_liveness_in
)
btn_f_liveness = gr.Button("Check Liveness!", variant='primary')
with gr.Column():
livness_result_output = gr.HTML()
btn_f_liveness.click(check_liveness, inputs=im_liveness_in, outputs=livness_result_output)
gr.HTML('<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2FMiniAiLive%2FFaceRecognition-LivenessDetection-Demo"><img src="https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2FMiniAiLive%2FFaceRecognition-LivenessDetection-Demo&label=VISITORS&labelColor=%2337d67a&countColor=%23ff8a65&style=plastic&labelStyle=none" /></a>')
if __name__ == "__main__":
MiniAIdemo.launch()