Spaces:
Sleeping
Sleeping
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) |