Spaces:
Sleeping
Sleeping
| 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() | |