import gradio as gr from rembg import remove from PIL import Image import numpy as np import cv2 import os # Функция для удаления фона с изображения def remove_bg_from_image(image): output = remove(image) return output # Функция для удаления фона с видео def remove_bg_from_video(video_path): # Открываем видео cap = cv2.VideoCapture(video_path) frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = int(cap.get(cv2.CAP_PROP_FPS)) # Создаем временный файл для сохранения результата output_path = "output_video.mp4" out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_width, frame_height), isColor=True) while cap.isOpened(): ret, frame = cap.read() if not ret: break # Преобразуем кадр в изображение PIL frame_pil = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) # Удаляем фон frame_no_bg = remove(frame_pil) # Преобразуем обратно в массив numpy frame_no_bg_np = np.array(frame_no_bg) # Записываем кадр в выходное видео out.write(cv2.cvtColor(frame_no_bg_np, cv2.COLOR_RGB2BGR)) cap.release() out.release() return output_path # Интерфейс Gradio def process_input(input_type, input_data): if input_type == "Image": output = remove_bg_from_image(input_data) return output elif input_type == "Video": output = remove_bg_from_video(input_data) return output # Создаем интерфейс Gradio input_type = gr.Radio(["Image", "Video"], label="Input Type") input_data = gr.File(label="Input File") # Используем gr.File вместо gr.inputs.File interface = gr.Interface( fn=process_input, inputs=[input_type, input_data], outputs=gr.File(label="Output File"), # Используем gr.File вместо gr.outputs.File title="Background Removal", description="Remove background from images or videos using rembg." ) # Запускаем интерфейс interface.launch()