Spaces:
Runtime error
Runtime error
from keras.models import load_model | |
import cv2 | |
import numpy as np | |
import gradio as gr | |
# Load the pre-trained model | |
model = load_model('keras_model.h5') | |
# Load the class labels | |
with open('labels.txt', 'r') as f: | |
class_names = [line.strip() for line in f.readlines()] | |
# Load the Haar cascade classifier for face detection | |
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') | |
font = cv2.FONT_HERSHEY_SIMPLEX | |
# Define a function to detect faces in a given frame | |
def detect_faces(frame): | |
# Detect faces in the frame | |
faces = face_cascade.detectMultiScale(frame, scaleFactor=1.3, minNeighbors=5) | |
# You can process the frame here if needed | |
# e.g., apply filters, transformations, or object detection | |
for (x, y, w, h) in faces: | |
# Extract the face region | |
face_img = frame[y:y+h, x:x+w] | |
# Preprocess the face image | |
face_img = cv2.resize(face_img, (224, 224)) | |
face_img = np.expand_dims(face_img, axis=0) | |
face_img = face_img / 255.0 | |
# Predict the class probabilities | |
pred_probs = model.predict(face_img)[0] | |
class_idx = np.argmax(pred_probs) | |
class_prob = pred_probs[class_idx] | |
# Get the class name and display it on the image | |
class_name = class_names[class_idx] | |
if class_prob*100 < 70: | |
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2) | |
text = '{}: {:.2f}%'.format('Unknown', class_prob * 100) | |
cv2.putText(frame, text, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2) | |
else: | |
cv2.putText(frame, class_name, (x, y - 10), font, 1, (0, 255, 0), 2) | |
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) | |
text = '{}: {:.2f}%'.format(class_name, class_prob * 100) | |
cv2.putText(frame, text, (x, y + h + 30), font, 0.5, (0, 255, 0), 1) | |
return frame[:, :, ::-1] | |
# Create a Gradio interface for face detection with webcam input | |
face_detection = gr.Interface(fn=detect_faces, | |
inputs=gr.inputs.Video(type="webcam"), | |
outputs="image", | |
title="Face Detection with OpenCV", | |
live=True) | |
# Launch the interface | |
face_detection.launch() | |