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()