Spaces:
Running
Running
File size: 1,846 Bytes
9af1953 caff61e e82b28e a29d5e2 e82b28e 936b8a6 e82b28e 0b7a6d2 caff61e e82b28e a29d5e2 caff61e a29d5e2 e82b28e a29d5e2 46e3370 e82b28e a29d5e2 46e3370 e82b28e 46e3370 e82b28e a29d5e2 46e3370 a29d5e2 e82b28e 46e3370 e82b28e 46e3370 9af1953 |
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 50 51 52 53 54 55 |
import os
import subprocess
# Clone the yolov5 repository and install its requirements
if not os.path.exists('yolov5'):
subprocess.run(['git', 'clone', 'https://github.com/ultralytics/yolov5'], check=True)
subprocess.run(['pip', 'install', '-r', 'yolov5/requirements.txt'], check=True)
import torch
import torchvision
from torchvision.transforms import functional as F
from PIL import Image
import cv2
import gradio as gr
from yolov5.models.yolo import Model
from yolov5.utils.general import non_max_suppression
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).to(device)
model.eval()
def preprocess_image(image):
image_tensor = F.to_tensor(image)
return image_tensor.unsqueeze(0).to(device)
def draw_boxes(image, outputs, threshold=0.3):
image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
h, w, _ = image.shape
for box in outputs:
score, label, x1, y1, x2, y2 = box[4].item(), int(box[5].item()), box[0].item(), box[1].item(), box[2].item(), box[3].item()
if score > threshold:
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
cv2.rectangle(image, (x1, y1), (x2, y2), (255, 0, 0), 2)
text = f"{model.names[label]:s}: {score:.2f}"
cv2.putText(image, text, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
def detect_objects(image):
image_tensor = preprocess_image(image)
outputs = model(image_tensor)
outputs = non_max_suppression(outputs)[0]
result_image = draw_boxes(image, outputs)
return result_image
iface = gr.Interface(
fn=detect_objects,
inputs=gr.inputs.Image(type="pil"),
outputs=gr.outputs.Image(type="pil"),
live=True
)
iface.launch() |