File size: 1,282 Bytes
077d557 de2aa9b ba4d1a9 e50e349 e6399c3 ba4d1a9 caf9fa8 ba4d1a9 077d557 6ef9294 7d9cecc 6ef9294 4aeccec e7b81e8 e50e349 e7b81e8 e50e349 6ef9294 4aeccec e7b81e8 4aeccec 6ef9294 e50e349 e7b81e8 e50e349 6ef9294 e7b81e8 7d9cecc ce6434e 9444948 ce6434e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import spaces
import gradio as gr
import cv2
import numpy as np
from PIL import Image
from transparent_background import Remover
remover = Remover()
@spaces.GPU
def doo(video):
cap = cv2.VideoCapture(video)
fps = cap.get(cv2.CAP_PROP_FPS)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_width, frame_height))
batch_size = 30 # Process 30 frames at a time
while cap.isOpened():
frames = []
for _ in range(batch_size):
ret, frame = cap.read()
if ret is False:
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame).convert('RGB')
out = remover.process(img, type='green')
frames.append(cv2.cvtColor(np.array(out), cv2.COLOR_BGR2RGB))
if not frames:
break
for frame in frames:
writer.write(frame)
cap.release()
writer.release()
return 'output.mp4'
iface = gr.Interface(fn=doo, inputs="video", outputs="video")
iface.launch()
|