|
import gradio as gr |
|
import cv2 |
|
import dlib |
|
import numpy as np |
|
from skimage import feature |
|
|
|
|
|
class AntiSpoofingSystem: |
|
def __init__(self): |
|
self.detector = dlib.get_frontal_face_detector() |
|
self.predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") |
|
self.EAR_THRESHOLD = 0.25 |
|
|
|
def calculate_ear(self, eye): |
|
A = np.linalg.norm(eye[1] - eye[5]) |
|
B = np.linalg.norm(eye[2] - eye[4]) |
|
C = np.linalg.norm(eye[0] - eye[3]) |
|
return (A + B) / (2.0 * C) |
|
|
|
def analyze_texture(self, face_region): |
|
gray_face = cv2.cvtColor(face_region, cv2.COLOR_BGR2GRAY) |
|
lbp = feature.local_binary_pattern(gray_face, P=8, R=1, method="uniform") |
|
lbp_hist, _ = np.histogram(lbp.ravel(), bins=np.arange(0, 58), range=(0, 58)) |
|
lbp_hist = lbp_hist.astype("float") |
|
lbp_hist /= (lbp_hist.sum() + 1e-5) |
|
return np.sum(lbp_hist[:10]) > 0.3 |
|
|
|
def process_image(self, image): |
|
|
|
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
|
faces = self.detector(gray) |
|
|
|
|
|
if len(faces) == 0: |
|
return "No face detected. Please try again." |
|
|
|
|
|
face = faces[0] |
|
landmarks = self.predictor(gray, face) |
|
leftEye = np.array([(landmarks.part(n).x, landmarks.part(n).y) for n in range(36, 42)]) |
|
rightEye = np.array([(landmarks.part(n).x, landmarks.part(n).y) for n in range(42, 48)]) |
|
|
|
ear_left = self.calculate_ear(leftEye) |
|
ear_right = self.calculate_ear(rightEye) |
|
|
|
|
|
blink_detected = (ear_left < self.EAR_THRESHOLD and ear_right < self.EAR_THRESHOLD) |
|
return "Blink detected!" if blink_detected else "No blink detected." |
|
|
|
|
|
anti_spoofing_system = AntiSpoofingSystem() |
|
|
|
def detect_blink(image): |
|
result = anti_spoofing_system.process_image(image) |
|
return result |
|
|
|
iface = gr.Interface( |
|
fn=detect_blink, |
|
inputs=gr.Image(shape=(720, 1280)), |
|
outputs="text", |
|
title="Anti-Spoofing Detection System", |
|
description="Upload an image with a face to detect if a blink is detected." |
|
) |
|
|
|
|
|
iface.launch() |
|
|