File size: 1,431 Bytes
077d557
de2aa9b
ba4d1a9
 
b25a6ce
e50e349
e6399c3
ba4d1a9
 
b03366b
ba4d1a9
077d557
6ef9294
d4ae210
 
 
 
 
1a37b1b
d4ae210
 
e50e349
d4ae210
 
 
 
 
 
 
 
 
 
 
 
 
b25a6ce
 
 
3c4c507
b25a6ce
6db6005
b25a6ce
3c4c507
b25a6ce
6ef9294
5be44ed
 
ce6434e
9444948
b25a6ce
3ba8a2d
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
47
48
49
50
51
52
import spaces
import gradio as gr
import cv2
import numpy as np
import gc  # For manual garbage collection

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)
    
    processed_frames = 0
    writer = None
        
    while cap.isOpened():
        ret, frame = cap.read()
    
        if ret is False:
            break
            
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 
        img = Image.fromarray(frame).convert('RGB')
        
        if writer is None:
            writer = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, img.size)

        processed_frames += 1
        print(f"Processing: {processed_frames}")
        out = remover.process(img, type='green')
        writer.write(cv2.cvtColor(np.array(out), cv2.COLOR_BGR2RGB))
        
        # Release GPU memory after processing a certain number of frames
        if processed_frames % 100 == 0:
            processed_frames = 0
            del out  # Delete the variable holding the processed frame
            writer.release()
            gc.collect()  # Perform manual garbage collection to release GPU memory
            print("Memory reset")
    
    cap.release()
    writer.release()
    return 'output.mp4'

iface = gr.Interface(fn=doo, inputs="video", outputs="video")
iface.launch()
#