sps / app.py
GAS17's picture
Update app.py
a79075e verified
import os
import replicate
import streamlit as st
from pydub import AudioSegment
# Aseg煤rate de que REPLICATE_API_TOKEN est茅 configurado en las variables de entorno
replicate_token = os.getenv("REPLICATE_API_TOKEN")
if not replicate_token:
raise ValueError("No se ha encontrado el token de API de Replicate.")
# Funci贸n para dividir el archivo de audio en segmentos de duraci贸n definida (en milisegundos)
def dividir_audio(audio_path, segment_duration_ms):
audio = AudioSegment.from_file(audio_path)
audio_length = len(audio)
segments = []
# Divide el audio en fragmentos de la duraci贸n especificada (10 minutos en milisegundos)
for i in range(0, audio_length, segment_duration_ms):
segment = audio[i:i+segment_duration_ms] # Cada fragmento de hasta 10 minutos
segment_path = f"segment_{i // (60 * 1000)}.wav" # Nombre del archivo con el 铆ndice del minuto
segment.export(segment_path, format="wav") # Exporta el fragmento como un archivo WAV
segments.append(segment_path)
return segments
# Funci贸n para transcribir el audio
def transcribe_audio(audio_file):
# Cargar el archivo de audio completo
audio = AudioSegment.from_file(audio_file)
audio_duration_minutes = len(audio) / (1000 * 60) # Duraci贸n en minutos
# Si el audio dura m谩s de 10 minutos, dividirlo en segmentos de 10 minutos
if audio_duration_minutes > 10:
segments = dividir_audio(audio_file, segment_duration_ms=10 * 60 * 1000) # 10 minutos en milisegundos
else:
segments = [audio_file] # Si es menor de 10 minutos, no dividir
# Almacenar todas las transcripciones
all_transcriptions = []
# Procesar cada segmento individualmente
for segment_path in segments:
with open(segment_path, "rb") as audio:
output = replicate.run(
"vaibhavs10/incredibly-fast-whisper:3ab86df6c8f54c11309d4d1f930ac292bad43ace52d10c80d87eb258b3c9f79c",
input={
"task": "transcribe",
"audio": audio, # El archivo de audio cargado en Streamlit
"language": "None", # Detecta autom谩ticamente el idioma
"timestamp": "chunk", # Incluye marcas de tiempo
"batch_size": 64,
"diarise_audio": False
}
)
# Almacenar la transcripci贸n del segmento
all_transcriptions.append(output['text'])
# Combina todas las transcripciones en una sola cadena
full_transcription = "\n".join(all_transcriptions)
return full_transcription # Devuelve la transcripci贸n completa
# Configurar la interfaz de Streamlit
st.title("")
# Subir archivo de audio
uploaded_audio = st.file_uploader("Sube tu archivo de audio", type=["wav", "mp3", "ogg", "flac"])
# Si se ha subido un archivo
if uploaded_audio is not None:
# Guardar el archivo temporalmente
with open("temp_audio_file.wav", "wb") as f:
f.write(uploaded_audio.read())
st.info("Transcribiendo el audio, esto puede tardar unos minutos...")
# Transcribir el archivo
transcription = transcribe_audio("temp_audio_file.wav")
# Mostrar el resultado
st.subheader("Transcripci贸n")
st.text(transcription)