import torch import gradio as gr import cv2 import numpy as np # Chemin vers le modèle MODEL_PATH = 'ColorizeVideo_gen.pth' # Charger le modèle def load_model(model_path): model = torch.load(model_path, map_location=torch.device('cpu')) # Charger sur le CPU model.eval() # Met le modèle en mode évaluation return model # Prétraitement de l'image def preprocess_frame(frame): # Redimensionner et normaliser frame = cv2.resize(frame, (224, 224)) # Ajustez la taille si nécessaire frame = frame / 255.0 # Normaliser input_tensor = torch.from_numpy(frame.astype(np.float32)).permute(2, 0, 1) # Convertir en format Tensor return input_tensor.unsqueeze(0) # Ajouter une dimension de lot # Traitement de la vidéo def process_video(model, video_path): cap = cv2.VideoCapture(video_path) fourcc = cv2.VideoWriter_fourcc(*'mp4v') output_path = "output_video.mp4" out = cv2.VideoWriter(output_path, fourcc, 30.0, (int(cap.get(3)), int(cap.get(4)))) while cap.isOpened(): ret, frame = cap.read() if not ret: break # Prétraiter le cadre input_tensor = preprocess_frame(frame) # Faire des prédictions with torch.no_grad(): predictions = model(input_tensor) # Traiter les prédictions et convertir en image output_frame = (predictions.squeeze().permute(1, 2, 0).numpy() * 255).astype(np.uint8) # Écrire le cadre traité dans la sortie out.write(output_frame) cap.release() out.release() return output_path # Interface Gradio def colorize_video(video): model = load_model(MODEL_PATH) output_video_path = process_video(model, video.name) # Utiliser le nom pour lire la vidéo return output_video_path # Configuration de l'interface Gradio iface = gr.Interface( fn=colorize_video, inputs=gr.Video(label="Téléchargez une vidéo"), outputs=gr.Video(label="Vidéo colorisée"), title="Colorisation de Vidéos", description="Chargez une vidéo en noir et blanc et utilisez le modèle de colorisation pour obtenir une vidéo colorisée." ) if __name__ == '__main__': iface.launch()