import cv2 import imutils import gradio as gr import numpy as np # ✅ Use OpenCV’s built-in Haar Cascade path (no local folder needed) face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") def detect_faces(img, size, neighbours, scale): frame = np.array(img) frame = frame[:, :, ::-1].copy() frame = imutils.resize(frame, width=500) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ✅ Use slider values safely faceRects = face_detector.detectMultiScale( gray, scaleFactor=float(scale), minNeighbors=int(neighbours), minSize=(int(size), int(size)) ) for (x, y, w, h) in faceRects: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) re_im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) return re_im # ✅ Define Gradio components image = gr.Image(label="Upload an Image") out_im = gr.Image(label="Detected Faces") size_slider = gr.Slider(minimum=5, maximum=50, value=30, step=5, label="Min Face Size (pixels)") neighbour_slider = gr.Slider(minimum=1, maximum=20, value=5, step=1, label="Min Neighbours") scale_slider = gr.Slider(minimum=1.1, maximum=2.0, value=1.3, step=0.1, label="Scale Factor") # ✅ Gradio Interface demo = gr.Interface( fn=detect_faces, inputs=[image, size_slider, neighbour_slider, scale_slider], outputs=out_im, title="Haar Cascade Face Detection", description="Detect faces using OpenCV's Haar Cascade classifier. Adjust parameters to fine-tune detection." ) # ✅ Hugging Face needs this to run the app if __name__ == "__main__": demo.launch()