File size: 4,413 Bytes
fd6fb97 ab01055 fd6fb97 bb25137 fd6fb97 b30cede fd6fb97 bb25137 fd6fb97 bb25137 fd6fb97 ab01055 fd6fb97 bb25137 fd6fb97 bb25137 fd6fb97 bb25137 fd6fb97 |
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
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() |