File size: 1,903 Bytes
9e147b4 4559416 ae10331 99a40c7 ef72450 5021a93 99a40c7 ae10331 99a40c7 ae10331 9e147b4 99a40c7 9e147b4 4559416 ae10331 99a40c7 9e147b4 ae10331 99a40c7 ae10331 4559416 99a40c7 ef72450 ae10331 99a40c7 4559416 ae10331 99a40c7 ae10331 4559416 99a40c7 4559416 99a40c7 9e147b4 99a40c7 9e147b4 ef72450 9e147b4 99a40c7 2543827 ae10331 99a40c7 2543827 99a40c7 9e147b4 2543827 9e147b4 ae10331 ef72450 9e147b4 99a40c7 ef72450 |
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 |
import gradio as gr
import cv2
import numpy as np
import torch
from ultralytics import YOLO
# Load YOLOv12x model (pre-trained on COCO dataset)
model = YOLO("yolov8x.pt") # Update to YOLOv12x
# 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 YOLOv12x 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
}
# 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="YOLOv12x-based Truck Counter",
description="Upload a video to detect and count trucks using YOLOv12x."
)
# Launch app
interface.launch()
|