Spaces:
Build error
Build error
import cv2 | |
import numpy as np | |
import gradio as gr | |
def show_preds_video(): | |
background = cv2.imread("background2.png") | |
background = cv2.cvtColor(background,cv2.COLOR_BGR2GRAY) | |
background = cv2.GaussianBlur(background,(21,21),0) | |
# def detect_motion(thres_input): | |
cap = cv2.VideoCapture('CCTV.avi') | |
# Initialize video writer for processed video | |
fourcc = cv2.VideoWriter_fourcc(*'mp4v') | |
out = cv2.VideoWriter("processed_video.mp4", fourcc, cap.get(cv2.CAP_PROP_FPS), (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))) | |
while True: | |
# Capture current frame | |
ret, frame = cap.read() | |
# If end of video, break loop | |
if not ret: | |
break | |
# Convert current frame to grayscale | |
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
gray = cv2.GaussianBlur(gray,(21,21), 0) | |
# reaize background to match current frame | |
background = cv2.resize(background, (gray.shape[1], gray.shape[0])) | |
# Calculate absolute difference between current frame and background | |
diff = cv2.absdiff(background,gray) | |
thresh = cv2.threshold(diff,30,255,cv2.THRESH_BINARY)[1] | |
thresh = cv2.dilate(thresh, None, iterations = 2) | |
cnts,res = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) | |
for contour in cnts: | |
if cv2.contourArea(contour) < 10000 : | |
continue | |
(x,y,w,h) = cv2.boundingRect(contour) | |
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0), 3) | |
# # Check if any contours were found | |
if len(contour) > 0: | |
# Motion detected, trigger alarm | |
message = "Motion detected !!!" | |
else: | |
# No motion detected | |
message = "No motion detected" | |
# Display current frame and processed frames | |
cv2.putText(frame, message, (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) | |
# Write processed frame to output video | |
out.write(frame) | |
return "processed_video.mp4" | |
outputs_video = [ | |
gr.outputs.Video(label="Processed Video"), | |
] | |
inputs_video = [ #gr.components.Video(type="filepath", label="Input Video", visible =False), | |
] | |
interface_video = gr.Interface( | |
fn=show_preds_video, | |
inputs=inputs_video, | |
outputs=outputs_video, | |
title="Security - Trespasser monitoring ", | |
cache_examples=False, | |
allow_flagging=False, | |
capture_session=True, | |
cache=True | |
).queue().launch() | |