Echo / app.py
vmasmitja
Fix app initialization issue
b30cede
raw
history blame
4.41 kB
import ffmpeg
import numpy as np
import librosa
import os
import time
from transformers import pipeline
import gradio as gr
# Modelos de Hugging Face para espa帽ol
#transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-small", language="es")
transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-small")
summarizer = pipeline("summarization", model="mrm8488/bert2bert_shared-spanish-finetuned-summarization")
# Variable global para estados y transcripciones
state = {"status": "Esperando transmisi贸n...", "transcriptions": [], "summary": ""}
# Funci贸n para esperar inicio de transmisi贸n RTMP
def wait_for_stream(rtmp_url):
state["status"] = "Esperando transmisi贸n..."
print(state["status"])
while True:
try:
probe = ffmpeg.probe(rtmp_url, format='flv')
if probe:
state["status"] = "隆Transmisi贸n detectada!"
print(state["status"])
break
except ffmpeg.Error:
time.sleep(5)
# Procesar transmisi贸n RTMP en tiempo real
def process_rtmp(rtmp_url):
audio_output = "stream_audio.wav"
transcription = []
state["status"] = "Transcribiendo en tiempo real..."
print(state["status"])
# Iniciar FFmpeg para extraer audio en tiempo real
process = (
ffmpeg
.input(rtmp_url, format='flv')
.output(audio_output, format='wav', acodec='pcm_s16le', ac=1, ar=16000)
.overwrite_output()
.run_async(pipe_stdout=True, pipe_stderr=True)
)
try:
while True:
if os.path.exists(audio_output):
audio_data, _ = librosa.load(audio_output, sr=16000)
if len(audio_data) > 0:
text = transcriber(np.array(audio_data))["text"]
transcription.append(text)
state["transcriptions"].append(text)
print(f"Transcripci贸n: {text}")
time.sleep(2) # Procesar cada 2 segundos
except KeyboardInterrupt:
process.terminate()
state["status"] = "Transmisi贸n finalizada"
print(state["status"])
return " ".join(transcription)
# Generar resumen
def finalize_summary(transcription):
state["status"] = "Generando resumen..."
print(state["status"])
summary = summarizer(transcription, max_length=100, min_length=30, do_sample=False)[0]["summary_text"]
state["summary"] = summary
state["status"] = "Resumen listo"
print(state["status"])
return summary
# Flujo principal
def process_and_finalize():
rtmp_url = "rtmp://37.27.213.138/live/stream"
# Esperar inicio de transmisi贸n
wait_for_stream(rtmp_url)
# Procesar transmisi贸n y transcribir en tiempo real
transcription = process_rtmp(rtmp_url)
# Generar resumen
summary = finalize_summary(transcription)
return summary
# Interfaz Gradio
def display_status():
# Mostrar estados y transcripciones en tiempo real
return f"Estado: {state['status']}\n\nTranscripciones:\n" + "\n".join(state["transcriptions"]) + f"\n\nResumen final:\n{state['summary']}"
demo = gr.Interface(
fn=display_status,
inputs=None,
outputs="text",
title="Estado de Transmisi贸n y Resumen",
description="Muestra el estado de la transmisi贸n, transcripciones en tiempo real y el resumen generado."
)
if __name__ == "__main__":
demo.launch()
# import gradio as gr
# import numpy as np
# import librosa
# from transformers import pipeline
# # Cargar el modelo de transcripci贸n Whisper
# transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-small")
# # Funci贸n para procesar y transcribir el audio
# def transcribe(audio):
# if audio is None:
# raise ValueError("No se ha proporcionado un archivo de audio.")
# # Cargar el archivo de audio como un array NumPy
# audio_data, _ = librosa.load(audio, sr=16000) # Resample a 16 kHz
# result = transcriber(np.array(audio_data))
# return result["text"]
# # Crear la interfaz Gradio
# demo = gr.Interface(
# fn=transcribe,
# inputs=gr.Audio(type="filepath"), # Subida de archivos de audio
# outputs="text",
# title="Transcripci贸n de Audio en Vivo",
# description="Sube un archivo de audio para transcribir su contenido autom谩ticamente."
# )
# # Lanzar la aplicaci贸n
# if __name__ == "__main__":
# demo.launch()