File size: 2,219 Bytes
f55b4f4
195a17a
13e1420
 
56d08ee
195a17a
13e1420
56d08ee
13e1420
 
 
 
 
3cdf272
13e1420
 
 
 
 
 
 
3cdf272
13e1420
195a17a
13e1420
 
195a17a
13e1420
091614b
13e1420
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195a17a
13e1420
195a17a
 
13e1420
195a17a
 
 
 
 
 
 
 
 
 
 
 
 
 
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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()