Video_generator / app.py
Leo8613's picture
Update app.py
6406a90 verified
import tensorflow as tf
import numpy as np
import cv2
import gradio as gr
import os
# Fonction pour chercher le modèle dans tout le système de fichiers
def find_model_file(filename="generator.h5"):
for root, dirs, files in os.walk("/"):
if filename in files:
return os.path.join(root, filename)
return None
# Fonction pour charger le modèle en toute sécurité
def load_model_safe(model_path):
try:
model = tf.keras.models.load_model(model_path, compile=False)
return model
except ValueError:
return None
# Chercher le modèle 'generator.h5' dans le système
model_path = find_model_file("generator.h5")
# Vérifier si le modèle est trouvé et charger
if model_path is not None:
generator = load_model_safe(model_path)
else:
generator = None
# Fonction pour générer une vidéo à partir du générateur
def generate_video():
if generator is None:
# Créer un fichier d'erreur générique sans message personnalisé
error_file_path = "/content/error_file.txt"
with open(error_file_path, "w") as f:
pass # Crée un fichier vide
return error_file_path
# Générer un bruit aléatoire (entrée pour le générateur)
noise = np.random.normal(0, 1, (1, 16, 64, 64, 3)) # Exemple de bruit pour 16 frames de 64x64x3
generated_video = generator.predict(noise) # Générer la vidéo
# Vérifier la forme des données générées
if len(generated_video.shape) != 4 or generated_video.shape[0] != 16:
return "Erreur dans les dimensions de la vidéo générée."
# Créer le répertoire pour la vidéo
output_dir = "/content/generated_videos"
os.makedirs(output_dir, exist_ok=True)
filename = os.path.join(output_dir, "generated_video.mp4")
# Enregistrer la vidéo avec OpenCV
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # Codec vidéo
height, width, _ = generated_video[0].shape
out = cv2.VideoWriter(filename, fourcc, 15, (width, height)) # 15 FPS
# Ajouter les frames dans le fichier vidéo
for frame in generated_video:
out.write(frame)
out.release()
# Retourner le chemin de la vidéo générée
return filename
# Interface Gradio
def interface_function():
# Appeler la fonction de génération et retourner la vidéo générée
video_file = generate_video()
return video_file
# Définir l'interface avec Gradio
gr.Interface(
fn=interface_function, # Fonction à exécuter
inputs=[], # Pas d'entrée utilisateur
outputs=gr.File(label="Vidéo générée"), # Utiliser gr.File pour le téléchargement du fichier
title="Générateur de Vidéos avec IA",
description="Cliquez sur le bouton ci-dessous pour générer une vidéo aléatoire avec l'IA."
).launch(server_name="0.0.0.0", server_port=7860)