Spaces:
Paused
Paused
| import spaces | |
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| import time | |
| import random | |
| from PIL import Image | |
| from transparent_background import Remover | |
| import subprocess | |
| import os | |
| def doo(video, mode): | |
| if(mode == 'Fast'): | |
| remover = Remover(mode='fast') | |
| else: | |
| remover = Remover() | |
| cap = cv2.VideoCapture(video) | |
| fps = cap.get(cv2.CAP_PROP_FPS) | |
| width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
| height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
| tmpname = random.randint(111111111, 999999999) | |
| tmp_video = f"/tmp/{tmpname}_video.mp4" | |
| tmp_audio = f"/tmp/{tmpname}_audio.aac" | |
| output_video = f"/tmp/{tmpname}_output.mp4" | |
| writer = cv2.VideoWriter(tmp_video, cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height)) | |
| processed_frames = 0 | |
| start_time = time.time() | |
| while cap.isOpened(): | |
| ret, frame = cap.read() | |
| if ret is False: | |
| break | |
| if time.time() - start_time >= 55: | |
| print("GPU Timeout is coming") | |
| break | |
| frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| img = Image.fromarray(frame).convert('RGB') | |
| processed_frames += 1 | |
| print(f"Processing: {processed_frames}") | |
| out = remover.process(img, type='green') | |
| writer.write(cv2.cvtColor(np.array(out), cv2.COLOR_RGB2BGR)) | |
| cap.release() | |
| writer.release() | |
| # μ€λμ€ μΆμΆ | |
| subprocess.call(['ffmpeg', '-i', video, '-vn', '-acodec', 'copy', tmp_audio]) | |
| # μ²λ¦¬λ λΉλμ€μ μ€λμ€ κ²°ν© | |
| subprocess.call(['ffmpeg', '-i', tmp_video, '-i', tmp_audio, '-c', 'copy', output_video]) | |
| # μμ νμΌ μμ | |
| os.remove(tmp_video) | |
| os.remove(tmp_audio) | |
| return output_video | |
| # Gradio μΈν°νμ΄μ€ μ μ | |
| css = """footer { visibility: hidden; }""" | |
| b_interface = gr.Interface( | |
| fn=doo, | |
| inputs=[ | |
| gr.Video(label="Video"), | |
| gr.Radio(['Normal', 'Fast'], label='Select mode', value='Normal', info='Normal is more accurate, but takes longer. | Fast has lower accuracy so the process will be faster.') | |
| ], | |
| outputs="video", | |
| css=css, | |
| title="Video Background Removal", | |
| description="Select a video and mode to remove the background." | |
| ) | |
| # Gradio μ± μ€ν | |
| if __name__ == "__main__": | |
| b_interface.launch() |