File size: 1,636 Bytes
fee9a0e
e8e6842
fee9a0e
e8e6842
 
5fe54c5
9381ccb
e8e6842
 
5fe54c5
e8e6842
 
 
 
5fe54c5
e8e6842
5fe54c5
 
 
 
9381ccb
e8e6842
9381ccb
5fe54c5
e8e6842
9381ccb
e8e6842
9381ccb
5fe54c5
 
 
e8e6842
5fe54c5
 
 
e8e6842
5fe54c5
 
e8e6842
 
 
5fe54c5
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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()