|
import time |
|
import gradio as gr |
|
import cv2 as cv |
|
from ultralytics import YOLO |
|
|
|
|
|
def load_yolo_model(): |
|
return YOLO('yolov8n-seg.pt') |
|
|
|
|
|
def process_video(model, cap): |
|
while 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): |
|
model = load_yolo_model() |
|
cap = cv.VideoCapture(uploaded_video.name) |
|
process_video(model, cap) |
|
|
|
|
|
def segment_webcam(): |
|
model = load_yolo_model() |
|
cap = cv.VideoCapture(0) |
|
process_video(model, cap) |
|
|
|
|
|
def wrapper_for_segment_video(uploaded_video): |
|
segment_video(uploaded_video) |
|
|
|
|
|
iface = gr.Interface( |
|
inputs=[gr.inputs.Checkbox(label="Segment Video"), |
|
gr.inputs.Checkbox(label="Segment Webcam"), |
|
gr.inputs.File(label="Upload Video")], |
|
outputs=None, |
|
live=True |
|
) |
|
|
|
|
|
def update_fn(segment_video_checkbox, segment_webcam_checkbox, uploaded_video): |
|
if segment_video_checkbox and uploaded_video: |
|
iface.fn = wrapper_for_segment_video |
|
iface.args = [uploaded_video] |
|
elif segment_webcam_checkbox: |
|
iface.fn = segment_webcam |
|
iface.args = [] |
|
else: |
|
iface.fn = None |
|
|
|
|
|
iface.update(update_fn) |
|
iface.launch() |
|
|