|
|
""" |
|
|
Gradio demo for facial verification. |
|
|
|
|
|
This script exposes a web interface where users can upload two images and |
|
|
receive immediate feedback about whether the faces match. It utilises |
|
|
MTCNN for face detection and InceptionResnetV1 for feature extraction via |
|
|
the utilities defined in ``src``. |
|
|
""" |
|
|
|
|
|
import gradio as gr |
|
|
from PIL import Image |
|
|
|
|
|
from src.verify_faces import verify_images |
|
|
|
|
|
|
|
|
def verify_fn(img1: Image.Image, img2: Image.Image) -> str: |
|
|
"""Wrap the verification function for Gradio. |
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
img1, img2: PIL.Image.Image |
|
|
Input images from the user interface. |
|
|
|
|
|
Returns |
|
|
------- |
|
|
str |
|
|
A human‑readable message indicating whether the faces match and the |
|
|
similarity score. |
|
|
""" |
|
|
|
|
|
similarity, is_same, message = verify_images(img1, img2, threshold=0.8, device="cpu") |
|
|
if similarity is None: |
|
|
return message |
|
|
return f"{message}\nCosine similarity: {similarity:.3f}" |
|
|
|
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=verify_fn, |
|
|
inputs=[gr.Image(type="pil", label="Image 1"), gr.Image(type="pil", label="Image 2")], |
|
|
outputs=gr.Textbox(label="Result"), |
|
|
title="Facial Recognition Verification", |
|
|
description=( |
|
|
"Upload two face images to verify if they belong to the same person. " |
|
|
"We use a pretrained FaceNet model to extract 512‑dimensional embeddings " |
|
|
"and compute their cosine similarity. A similarity above 0.8 indicates a match." |
|
|
), |
|
|
allow_flagging="never", |
|
|
) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |