Spaces:
Sleeping
Sleeping
Create app.py
Browse filesEste c贸digo utiliza Gradio para crear una interfaz web interactiva.
app.py
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from transformers import pipeline
|
2 |
+
from pydub import AudioSegment
|
3 |
+
from pydub.utils import make_chunks
|
4 |
+
import os
|
5 |
+
import gradio as gr
|
6 |
+
|
7 |
+
# Inicializar el modelo de Hugging Face
|
8 |
+
modelo = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-large-xlsr-53-spanish")
|
9 |
+
|
10 |
+
# Funci贸n para dividir audios largos en fragmentos
|
11 |
+
def dividir_audio(input_path, output_dir, chunk_length_ms=30000):
|
12 |
+
"""
|
13 |
+
Divide un archivo de audio en fragmentos m谩s peque帽os.
|
14 |
+
Args:
|
15 |
+
input_path (str): Ruta al archivo de audio original.
|
16 |
+
output_dir (str): Carpeta donde se guardar谩n los fragmentos.
|
17 |
+
chunk_length_ms (int): Duraci贸n de cada fragmento en milisegundos.
|
18 |
+
"""
|
19 |
+
audio = AudioSegment.from_file(input_path)
|
20 |
+
chunks = make_chunks(audio, chunk_length_ms)
|
21 |
+
os.makedirs(output_dir, exist_ok=True)
|
22 |
+
|
23 |
+
for i, chunk in enumerate(chunks):
|
24 |
+
chunk_name = os.path.join(output_dir, f"chunk_{i}.wav")
|
25 |
+
chunk.export(chunk_name, format="wav")
|
26 |
+
print(f"Guardado: {chunk_name}")
|
27 |
+
|
28 |
+
# Funci贸n para transcribir audios
|
29 |
+
def transcribir_audio(audio_path):
|
30 |
+
"""
|
31 |
+
Transcribe un archivo de audio usando Hugging Face.
|
32 |
+
Args:
|
33 |
+
audio_path (str): Ruta al archivo de audio.
|
34 |
+
Returns:
|
35 |
+
str: Texto transcrito.
|
36 |
+
"""
|
37 |
+
print(f"Procesando: {audio_path}")
|
38 |
+
result = modelo(audio_path)
|
39 |
+
return result["text"]
|
40 |
+
|
41 |
+
# Funci贸n principal para manejar la transcripci贸n desde la interfaz
|
42 |
+
def procesar_audio(input_audio):
|
43 |
+
output_dir = "chunks"
|
44 |
+
chunk_length_ms = 30000 # Dividir en fragmentos de 30 segundos
|
45 |
+
|
46 |
+
# Guardar el archivo cargado temporalmente
|
47 |
+
input_audio_path = "input_audio.wav"
|
48 |
+
input_audio.export(input_audio_path, format="wav")
|
49 |
+
|
50 |
+
print("Dividiendo audio...")
|
51 |
+
dividir_audio(input_audio_path, output_dir, chunk_length_ms)
|
52 |
+
|
53 |
+
print("Transcribiendo fragmentos...")
|
54 |
+
transcripcion_final = []
|
55 |
+
for filename in sorted(os.listdir(output_dir)):
|
56 |
+
if filename.endswith(".wav"):
|
57 |
+
filepath = os.path.join(output_dir, filename)
|
58 |
+
texto = transcribir_audio(filepath)
|
59 |
+
transcripcion_final.append(texto)
|
60 |
+
|
61 |
+
# Concatenar la transcripci贸n final
|
62 |
+
transcripcion_completa = " ".join(transcripcion_final)
|
63 |
+
|
64 |
+
# Devolver la transcripci贸n completa
|
65 |
+
return transcripcion_completa
|
66 |
+
|
67 |
+
# Crear la interfaz de usuario con Gradio
|
68 |
+
interface = gr.Interface(
|
69 |
+
fn=procesar_audio,
|
70 |
+
inputs=gr.Audio(source="upload", type="file", label="Sube tu archivo de audio"),
|
71 |
+
outputs=gr.Textbox(label="Transcripci贸n"),
|
72 |
+
title="Transcriptor de Audio",
|
73 |
+
description="Sube un archivo de audio de una reuni贸n y obt茅n la transcripci贸n completa."
|
74 |
+
)
|
75 |
+
|
76 |
+
# Ejecutar la aplicaci贸n
|
77 |
+
if __name__ == "__main__":
|
78 |
+
interface.launch()
|