import gradio as gr
import cv2
import torch
import numpy as np
# Load the YOLOv5 model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# Function to run inference on an image
def run_inference(image):
# Convert the image from PIL format to a format compatible with OpenCV
image = np.array(image)
# Run YOLOv5 inference
results = model(image)
# Convert the annotated image from BGR to RGB for display
annotated_image = results.render()[0]
annotated_image = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)
# Generate a summary of detected objects
detected_objects = results.pandas().xyxy[0]['name'].value_counts().to_dict()
summary = "Detected Objects:\n" + "\n".join(
[f"{obj}: {count}" for obj, count in detected_objects.items()]
)
return annotated_image, summary
# Create the Gradio interface
interface = gr.Blocks(css="""
body {
font-family: 'Poppins', sans-serif;
background: linear-gradient(135deg, #6a11cb, #2575fc);
color: #fff;
margin: 0;
padding: 0;
}
header {
text-align: center;
background: linear-gradient(90deg, #ff758c, #ff7eb3);
padding: 1rem;
border-radius: 15px;
box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.2);
margin-bottom: 1rem;
}
header h1 {
margin: 0;
font-size: 2.5rem;
color: #fff;
}
.description {
text-align: center;
font-size: 1.2rem;
margin: 0.5rem 0 1.5rem 0;
color: #f0f0f0;
}
button {
background: linear-gradient(90deg, #6a11cb, #2575fc);
border: none;
border-radius: 10px;
padding: 0.8rem 1.5rem;
font-size: 1rem;
color: white;
cursor: pointer;
transition: transform 0.2s, background 0.2s;
}
button:hover {
transform: scale(1.05);
background: linear-gradient(90deg, #2575fc, #6a11cb);
}
""")
with interface:
with gr.Row():
gr.Markdown("🌟 InsightVision: Detect, Analyze, Summarize 🌟