freak360's picture
Update test.py
fb6617f verified
raw
history blame
No virus
3.25 kB
import gradio as gr
from ultralytics import YOLO
import cv2
import os
import numpy as np
import sys
import asyncio
if sys.platform == 'win32':
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
# Load your trained model
model = YOLO("best.pt")
def predict_image(image):
# Perform detection
detections = model.track(source=image, conf=0.3, iou=0.5, show=False)
# Render the detected image
detected_image = np.squeeze(detections[0].plot())
# Check if any drones were detected
num_drones = len(detections[0]) # Assuming detection results are stored in xywh format
message = "Drone detected!" if num_drones > 0 else "No drones detected."
return detected_image, message # Return the detected image and the message
def predict_video(video_path):
# Load the video
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
return "Error: Could not open video.", ""
drone_detected = False
# Prepare to write the output video
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out_fps = cap.get(cv2.CAP_PROP_FPS)
output_path = 'output_video.mp4'
out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), out_fps, (frame_width, frame_height))
# Process each frame
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# Perform detection on the frame
results = model.track(frame, imgsz=640, conf=0.3, iou=0.5)
# Check if any drones were detected in this frame
if len(results[0]) > 0:
drone_detected = True
# Draw boxes on the frame
annotated_frame = np.squeeze(results[0].plot())
# Write the frame to the output video
out.write(annotated_frame)
# Release everything when done
cap.release()
out.release()
message = "Drone detected in video!" if drone_detected else "No drones detected in video."
print("Video processing complete. Saved to:", output_path)
return output_path, message # Return the path to the output video and the message
with gr.Blocks() as demo:
gr.Markdown("### Drone Detection System")
with gr.Tab("Introduction"):
gr.Markdown("**This Application helps in detection of DRONES in an IMAGE, VIDEO or from your WEBCAM depending on your App mode.**")
gr.Markdown("You Don't Necessarily need a Drone to run this app; you can use an image from google.\n\n**SAMPLE OUTPUT:**")
gr.Video("Drone Detection.mp4", width=800, height=600)
with gr.Tab("Upload Image"):
image_input = gr.Image()
image_output = gr.Image()
alert = gr.Label()
image_input.change(fn=predict_image, inputs=image_input, outputs=[image_output, alert])
with gr.Tab("Upload Video"):
video_input = gr.Video(sources="upload")
video_output = gr.Video(render=True)
alert_video = gr.Label()
video_input.change(fn=predict_video, inputs=video_input, outputs=[video_output, alert_video])
with gr.Tab("Live"):
gr.Markdown("Live detection will be implemented soon.")
demo.launch()