File size: 2,020 Bytes
9e147b4 ae10331 99a40c7 ae10331 99a40c7 ae10331 99a40c7 ae10331 9e147b4 99a40c7 9e147b4 ae10331 99a40c7 9e147b4 ae10331 99a40c7 ae10331 99a40c7 ae10331 99a40c7 ae10331 99a40c7 ae10331 99a40c7 ae10331 99a40c7 9e147b4 99a40c7 9e147b4 ae10331 9e147b4 99a40c7 2543827 ae10331 99a40c7 2543827 99a40c7 9e147b4 2543827 9e147b4 ae10331 9e147b4 99a40c7 2543827 |
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 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import gradio as gr
import cv2
import numpy as np
import torch
from ultralytics import YOLO
# Load YOLOv8 model (pre-trained on COCO dataset)
model = YOLO("yolov8x.pt") # Use "yolov8x.pt" for highest accuracy
# Class label for trucks (COCO dataset)
TRUCK_CLASS_ID = 7 # "truck" in COCO dataset
def count_trucks(video_path):
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
return "Error: Unable to open video file."
frame_count = 0
truck_count_per_frame = []
frame_skip = 5 # Process every 5th frame for efficiency
while True:
ret, frame = cap.read()
if not ret:
break # End of video
frame_count += 1
if frame_count % frame_skip != 0:
continue # Skip frames to improve efficiency
# Run YOLOv8 inference
results = model(frame, verbose=False)
truck_count = 0
for result in results:
for box in result.boxes:
class_id = int(box.cls.item()) # Get class ID
confidence = float(box.conf.item()) # Get confidence score
if class_id == TRUCK_CLASS_ID and confidence > 0.6:
truck_count += 1 # Count trucks with confidence > 0.6
truck_count_per_frame.append(truck_count)
cap.release()
return {
"Total Trucks in Video": int(np.max(truck_count_per_frame)) if truck_count_per_frame else 0,
"Avg Trucks Per Frame": round(np.mean(truck_count_per_frame), 2) if truck_count_per_frame else 0
}
# Gradio UI function
def analyze_video(video_file):
result = count_trucks(video_file)
return "\n".join([f"{key}: {value}" for key, value in result.items()])
# Gradio Interface
interface = gr.Interface(
fn=analyze_video,
inputs=gr.Video(label="Upload Video"),
outputs=gr.Textbox(label="Truck Counting Results"),
title="YOLOv8-based Truck Counter",
description="Upload a video to detect and count trucks using YOLOv8."
)
# Launch app
interface.launch()
|