Audio-to-Text / app.py
Blandskron's picture
Create app.py
4b85c56 verified
raw
history blame
2.73 kB
from transformers import pipeline
from pydub import AudioSegment
from pydub.utils import make_chunks
import os
import gradio as gr
# Inicializar el modelo de Hugging Face
modelo = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-large-xlsr-53-spanish")
# Funci贸n para dividir audios largos en fragmentos
def dividir_audio(input_path, output_dir, chunk_length_ms=30000):
"""
Divide un archivo de audio en fragmentos m谩s peque帽os.
Args:
input_path (str): Ruta al archivo de audio original.
output_dir (str): Carpeta donde se guardar谩n los fragmentos.
chunk_length_ms (int): Duraci贸n de cada fragmento en milisegundos.
"""
audio = AudioSegment.from_file(input_path)
chunks = make_chunks(audio, chunk_length_ms)
os.makedirs(output_dir, exist_ok=True)
for i, chunk in enumerate(chunks):
chunk_name = os.path.join(output_dir, f"chunk_{i}.wav")
chunk.export(chunk_name, format="wav")
print(f"Guardado: {chunk_name}")
# Funci贸n para transcribir audios
def transcribir_audio(audio_path):
"""
Transcribe un archivo de audio usando Hugging Face.
Args:
audio_path (str): Ruta al archivo de audio.
Returns:
str: Texto transcrito.
"""
print(f"Procesando: {audio_path}")
result = modelo(audio_path)
return result["text"]
# Funci贸n principal para manejar la transcripci贸n desde la interfaz
def procesar_audio(input_audio):
output_dir = "chunks"
chunk_length_ms = 30000 # Dividir en fragmentos de 30 segundos
# Guardar el archivo cargado temporalmente
input_audio_path = "input_audio.wav"
input_audio.export(input_audio_path, format="wav")
print("Dividiendo audio...")
dividir_audio(input_audio_path, output_dir, chunk_length_ms)
print("Transcribiendo fragmentos...")
transcripcion_final = []
for filename in sorted(os.listdir(output_dir)):
if filename.endswith(".wav"):
filepath = os.path.join(output_dir, filename)
texto = transcribir_audio(filepath)
transcripcion_final.append(texto)
# Concatenar la transcripci贸n final
transcripcion_completa = " ".join(transcripcion_final)
# Devolver la transcripci贸n completa
return transcripcion_completa
# Crear la interfaz de usuario con Gradio
interface = gr.Interface(
fn=procesar_audio,
inputs=gr.Audio(source="upload", type="file", label="Sube tu archivo de audio"),
outputs=gr.Textbox(label="Transcripci贸n"),
title="Transcriptor de Audio",
description="Sube un archivo de audio de una reuni贸n y obt茅n la transcripci贸n completa."
)
# Ejecutar la aplicaci贸n
if __name__ == "__main__":
interface.launch()