|
import time |
|
import gradio as gr |
|
import cv2 as cv |
|
from ultralytics import YOLO |
|
|
|
|
|
process = False |
|
model = None |
|
cap = None |
|
|
|
def load_yolo_model(): |
|
return YOLO('yolov8n-seg.pt') |
|
|
|
def process_video(): |
|
global process, model, cap |
|
while process and cap.isOpened(): |
|
ret, image = cap.read() |
|
if not ret: |
|
break |
|
start = time.perf_counter() |
|
results = model(image) |
|
end = time.perf_counter() |
|
segments = results[0].plot() |
|
cv.putText(segments, f'FPS: {int(1 // (end - start))}', (10, 30), |
|
cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) |
|
cv.imshow('Image Segmentation', segments) |
|
key = cv.waitKey(1) |
|
if key & 0xFF == ord('q'): |
|
break |
|
cap.release() |
|
cv.destroyAllWindows() |
|
|
|
def segment_video(uploaded_video): |
|
global model, cap |
|
model = load_yolo_model() |
|
cap = cv.VideoCapture(uploaded_video.name) |
|
process_video() |
|
|
|
def segment_webcam(): |
|
global model, cap |
|
model = load_yolo_model() |
|
cap = cv.VideoCapture(0) |
|
process_video() |
|
|
|
def process_inputs(start_button, stop_button, mode_selection, uploaded_video): |
|
global process |
|
if start_button: |
|
process = True |
|
if mode_selection == "Video" and uploaded_video: |
|
segment_video(uploaded_video) |
|
elif mode_selection == "Webcam": |
|
segment_webcam() |
|
elif stop_button: |
|
process = False |
|
|
|
iface = gr.Interface( |
|
fn=process_inputs, |
|
inputs=[ |
|
gr.components.Button(label="Start"), |
|
gr.components.Button(label="Stop"), |
|
gr.components.Radio(["Video", "Webcam"], label="Mode Selection"), |
|
gr.components.File(label="Upload Video") |
|
], |
|
outputs=None, |
|
live=True |
|
) |
|
|
|
iface.launch() |
|
|