Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
import cv2 | |
from ultralytics import YOLO | |
# Define the folder containing the images and video | |
folder_path = "info" # Replace with your folder name or path | |
# Get list of files from the folder | |
image_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.lower().endswith(('.jpg', '.jpeg', '.png'))] | |
video_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.lower().endswith(('.mp4', '.avi', '.mov'))] | |
# Ensure the folder contains the expected number of files | |
if len(image_files) < 2 or len(video_files) < 1: | |
raise ValueError("Folder must contain at least 2 images and 1 video.") | |
# Select the first two images and the first video | |
image_examples = [[image_files[0]], [image_files[1]]] | |
video_examples = [[video_files[0]]] | |
# Load the YOLO model | |
model = YOLO('best.pt') | |
# Function for processing images | |
def show_preds_image(image_path): | |
image = cv2.imread(image_path) | |
results = model.predict(source=image_path) | |
annotated_image = results[0].plot() | |
return cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB) | |
# Function for processing videos | |
def show_preds_video(video_path): | |
cap = cv2.VideoCapture(video_path) | |
out_frames = [] | |
fps = int(cap.get(cv2.CAP_PROP_FPS)) | |
while cap.isOpened(): | |
ret, frame = cap.read() | |
if not ret: | |
break | |
results = model.predict(source=frame) | |
annotated_frame = results[0].plot() | |
out_frames.append(cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)) | |
cap.release() | |
# Save the annotated video | |
output_path = "annotated_video.mp4" | |
height, width, _ = out_frames[0].shape | |
fourcc = cv2.VideoWriter_fourcc(*"mp4v") | |
writer = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) | |
for frame in out_frames: | |
writer.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)) | |
writer.release() | |
return output_path | |
# Gradio interfaces | |
inputs_image = gr.Image(type="filepath", label="Input Image") | |
outputs_image = gr.Image(type="numpy", label="Output Image") | |
interface_image = gr.Interface( | |
fn=show_preds_image, | |
inputs=inputs_image, | |
outputs=outputs_image, | |
title="Safety Head Detector - Image", | |
examples=image_examples, | |
) | |
inputs_video = gr.Video(label="Input Video") | |
outputs_video = gr.Video(label="Annotated Output") | |
interface_video = gr.Interface( | |
fn=show_preds_video, | |
inputs=inputs_video, | |
outputs=outputs_video, | |
title="Safety Head Detector - Video", | |
examples=video_examples, | |
) | |
# Combine into a tabbed interface | |
gr.TabbedInterface( | |
[interface_image, interface_video], | |
tab_names=['Image Inference', 'Video Inference'] | |
).launch(share=True) | |