|
import cv2 |
|
import numpy as np |
|
import gradio as gr |
|
|
|
def remove_green_screen(video_file, bg_image): |
|
cap = cv2.VideoCapture(video_file) |
|
bg = cv2.imread(bg_image) |
|
img_array = [] |
|
while True: |
|
ret, frame = cap.read() |
|
if not ret: |
|
break |
|
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) |
|
lower_green = np.array([30, 60, 60]) |
|
upper_green = np.array([90, 255, 255]) |
|
mask = cv2.inRange(hsv, lower_green, upper_green) |
|
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, np.ones((3,3),np.uint8)) |
|
mask = cv2.dilate(mask, np.ones((3,3),np.uint8), iterations=5) |
|
mask = cv2.blur(mask, (30,30)) |
|
mask = np.stack([mask, mask, mask], axis=2) |
|
frame = np.where(mask == np.array([255, 255, 255]), bg, frame) |
|
img_array.append(frame) |
|
cap.release() |
|
output_file = "output.mp4" |
|
fourcc = cv2.VideoWriter_fourcc(*"mp4v") |
|
fps = 30.0 |
|
height, width, layers = img_array[0].shape |
|
size = (width,height) |
|
out = cv2.VideoWriter(output_file, fourcc, fps, size) |
|
for i in range(len(img_array)): |
|
out.write(img_array[i]) |
|
out.release() |
|
return output_file |
|
|
|
input_video = gr.inputs.Video(type="mp4") |
|
input_bg = gr.inputs.Image(label="Background Image") |
|
output_video = gr.outputs.Video(type="mp4") |
|
|
|
gr.Interface(fn=remove_green_screen, inputs=[input_video, input_bg], outputs=output_video, title="Green Screen Remover").launch() |
|
|