File size: 1,883 Bytes
6cb50ff
a03d512
 
177b569
a03d512
a668c53
a03d512
5099bc6
6cb50ff
a03d512
 
33ab799
 
6cb50ff
a03d512
 
 
 
6cb50ff
177b569
 
6cb50ff
a03d512
 
 
 
 
6cb50ff
a03d512
 
6cb50ff
efee8a7
 
6cb50ff
177b569
 
 
 
 
6cb50ff
a03d512
 
6cb50ff
177b569
 
6cb50ff
a03d512
 
9b73d76
177b569
a03d512
 
6cb50ff
a03d512
 
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
import cv2
import torch
import gradio as gr
import numpy as np
from ultralytics import YOLO

# Load YOLOv8 model
model = YOLO('./data/best.pt')  # Path to your model

# Define the function that processes the uploaded video
def process_video(video):
    # video is now the file path string, not a file object
    input_video = cv2.VideoCapture(video)  # Directly pass the path to cv2.VideoCapture

    # Get frame width, height, and fps from input video
    frame_width = int(input_video.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(input_video.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = input_video.get(cv2.CAP_PROP_FPS)

    # Create an empty list to store processed frames
    processed_frames = []

    while True:
        # Read a frame from the video
        ret, frame = input_video.read()
        if not ret:
            break  # End of video

        # Perform inference on the frame
        results = model(frame)

        # The results object contains annotations for the frame
        annotated_frame = results[0].plot()  # Plot the frame with bounding boxes

        # Convert the annotated frame to RGB format
        annotated_frame_rgb = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)

        # Append the frame to the list
        processed_frames.append(annotated_frame_rgb)

    # Release resources
    input_video.release()

    # Return the processed frames as an output video in Gradio
    return processed_frames

# Create a Gradio interface for video upload
iface = gr.Interface(fn=process_video, 
                     inputs=gr.Video(label="Upload Video"),  # Updated line
                     outputs=gr.Video(),  # This will display the output video directly
                     title="YOLOv8 Object Detection on Video",
                     description="Upload a video for object detection using YOLOv8")

# Launch the interface
iface.launch()