| import cv2 | |
| import numpy as np | |
| import gradio as gr | |
| net = cv2.dnn.readNetFromCaffe( | |
| "MobileNetSSD_deploy.prototxt", "MobileNetSSD_deploy.caffemodel" | |
| ) | |
| class_names = [ | |
| "background", | |
| "aeroplane", | |
| "bicycle", | |
| "bird", | |
| "boat", | |
| "bottle", | |
| "bus", | |
| "car", | |
| "cat", | |
| "chair", | |
| "cow", | |
| "diningtable", | |
| "dog", | |
| "horse", | |
| "motorbike", | |
| "person", | |
| "pottedplant", | |
| "sheep", | |
| "sofa", | |
| "train", | |
| "tvmonitor", | |
| ] | |
| def detect_objects(image): | |
| frame = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) | |
| blob = cv2.dnn.blobFromImage( | |
| frame, 0.007843, (300, 300), (127.5, 127.5, 127.5), swapRB=False, crop=False | |
| ) | |
| net.setInput(blob) | |
| detections = net.forward() | |
| for i in range(detections.shape[2]): | |
| confidence = detections[0, 0, i, 2] | |
| if confidence > 0.2: | |
| idx = int(detections[0, 0, i, 1]) | |
| box = detections[0, 0, i, 3:7] * np.array( | |
| [frame.shape[1], frame.shape[0], frame.shape[1], frame.shape[0]] | |
| ) | |
| (startX, startY, endX, endY) = box.astype("int") | |
| label = f"{class_names[idx]}: {confidence:.2f}" | |
| cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2) | |
| y = startY - 15 if startY - 15 > 15 else startY + 15 | |
| cv2.putText( | |
| frame, | |
| label, | |
| (startX, y), | |
| cv2.FONT_HERSHEY_SIMPLEX, | |
| 0.5, | |
| (255, 255, 255), | |
| 2, | |
| ) | |
| return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| iface = gr.Interface(fn=detect_objects, inputs="image", outputs="image", live=True) | |
| iface.launch() | |