#!/usr/bin/env python from __future__ import annotations import pathlib import gradio as gr import mediapipe as mp import numpy as np mp_face_detection = mp.solutions.face_detection mp_drawing = mp.solutions.drawing_utils TITLE = "MediaPipe Face Detection" DESCRIPTION = "https://google.github.io/mediapipe/" def run(image: np.ndarray, model_selection: int, min_detection_confidence: float) -> np.ndarray: with mp_face_detection.FaceDetection( model_selection=model_selection, min_detection_confidence=min_detection_confidence ) as face_detection: results = face_detection.process(image) res = image[:, :, ::-1].copy() if results.detections is not None: for detection in results.detections: mp_drawing.draw_detection(res, detection) return res[:, :, ::-1] model_types = [ "Short-range model (best for faces within 2 meters)", "Full-range model (best for faces within 5 meters)", ] image_paths = sorted(pathlib.Path("images").rglob("*.jpg")) examples = [[path, model_types[0], 0.5] for path in image_paths] demo = gr.Interface( fn=run, inputs=[ gr.Image(label="Input", type="numpy"), gr.Radio(label="Model", choices=model_types, type="index", value=model_types[0]), gr.Slider(label="Minimum Detection Confidence", minimum=0, maximum=1, step=0.05, value=0.5), ], outputs=gr.Image(label="Output"), examples=examples, title=TITLE, description=DESCRIPTION, ) if __name__ == "__main__": demo.queue().launch()