qbcode's picture
Update app.py
88439ab verified
Raw
History Blame Contribute Delete
1.97 kB
import gradio as gr
import torch
from torchvision import transforms
from models.experimental import attempt_load
from utils.general import non_max_suppression, plot_one_box
import numpy as np
# Load YOLOv7 model
weights_path = "cattle.pt"
config_path = "yolov7.yaml"
# Initialize your YOLOv7 model here
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
net = attempt_load(weights_path, map_location=device)
# Define function to detect objects using YOLOv7
def detect_objects(image):
global net
# Perform any necessary preprocessing on the image
transform = transforms.Compose([
transforms.Resize((416, 416)), # Resize image to expected input size
transforms.ToTensor(), # Convert image to tensor
])
image_tensor = transform(image).unsqueeze(0)
# Perform object detection
with torch.no_grad():
# Forward pass through the network
outs = net(image_tensor)
# Apply non-maximum suppression
pred = non_max_suppression(outs, conf_thres=0.4, iou_thres=0.5, classes=None, agnostic=False)
# Process detection results and draw bounding boxes
object_count = 0
for i, det in enumerate(pred):
# Skip if no detections
if len(det):
# Increment object count
object_count += len(det)
# Loop over the detections
for *xyxy, conf, cls in reversed(det):
# Draw bounding box
plot_one_box(xyxy, image, label=f'{conf:.2f}', color=(255, 0, 0), line_thickness=3)
return image, object_count
# Create Gradio interface
inputs = gr.inputs.Image(label="Upload Image or Video")
outputs = [gr.outputs.Image(label="Output Image with Objects Detected"), gr.outputs.Text(label="Object Count")]
gr.Interface(detect_objects, inputs, outputs, title="YOLOv7 Object Detection").launch()