import cv2 import imutils import gradio as gr import numpy as np face_detector = cv2.CascadeClassifier("haar_cascades/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) faceRects = face_detector.detectMultiScale( gray, scaleFactor=scale, minNeighbors=neighbours, minSize=(size, size), flags=cv2.CASCADE_SCALE_IMAGE) box_data = [] class_labels = { 0: "face" } for (x,y,w,h) in faceRects: frame = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2) midX = int(x+w/2) midY = int(y+h/2) box = { "position": { "middle": [midX, midY], "width": float(w), "height": float(h) }, "domain" : "pixel", "class_id" : 0 } box_data.append(box) predictions = {"predictions": { "box_data": box_data, "class_labels": class_labels } } re_im =cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) return re_im image = gr.components.Image() out_im = gr.components.Image() size_slider = gr.components.Slider(minimum=5, maximum=50, value=30, step=5, label="MinSize in Pixel") neighbour_slider = gr.components.Slider(minimum=1, maximum=20, value=5, step=1, label="Min Number of Neighbours") scale_slider = gr.components.Slider(minimum=1.1, maximum=2.0, value=1.3, step=0.1, label="Scale Factor") description = """Face Detection with Haar Cascades using OpenCV""" Iface = gr.Interface( fn=detect_faces, inputs=[image, size_slider, neighbour_slider, scale_slider], outputs=out_im, #examples=[["data/9_Press_Conference_Press_Conference_9_86.jpg"], ["data/12_Group_Group_12_Group_Group_12_39.jpg"], ["data/31_Waiter_Waitress_Waiter_Waitress_31_55.jpg"]], title="Haar Cascade Object Detection", ).launch()