| """ |
| 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() |