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()