import gradio as gr from transformers import pipeline import cv2 from PIL import Image import io def video_to_descriptions(video): # Charger le modèle via pipeline ImgToText = pipeline("image-to-text", model="Salesforce/blip-image-captioning-large") Summarize = pipeline("summarization", model="tuner007/pegasus_summarizer") # Ouvrir la vidéo cap = cv2.VideoCapture(video) # Ici, nous avons retiré ".name" fps = int(cap.get(cv2.CAP_PROP_FPS)) descriptions = [] frame_count = 0 while True: ret, frame = cap.read() if not ret: break # Extraire une image toutes les demi-secondes if frame_count % (fps * 2) == 0: # Convertir l'image en RGB frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Convertir le tableau numpy en une image PIL pil_img = Image.fromarray(frame_rgb) # Obtenir la description de l'image outputs = ImgToText(pil_img) print(outputs[0]) # Imprimer la sortie pour voir les clés disponibles description = outputs[0]['generated_text'] # Ceci provoquera une erreur tant que la clé correcte n'est pas utilisée descriptions.append(description) frame_count += 1 # Fermer le lecteur vidéo cap.release() # Concaténer les descriptions concatenated_descriptions = " ".join(descriptions) concatenated_descriptions = Summarize(concatenated_descriptions) return concatenated_descriptions iface = gr.Interface( fn=video_to_descriptions, inputs=gr.Video(type="file", label="Importez une vidéo"), outputs="text", live=False ) if __name__ == "__main__": iface.launch()