Update app.py
Browse files
app.py
CHANGED
@@ -1,28 +1,5 @@
|
|
1 |
-
import os
|
2 |
import replicate
|
3 |
-
import
|
4 |
-
from pydub import AudioSegment
|
5 |
-
|
6 |
-
# Asegúrate de que REPLICATE_API_TOKEN esté configurado en las variables de entorno
|
7 |
-
replicate_token = os.getenv("REPLICATE_API_TOKEN")
|
8 |
-
|
9 |
-
if not replicate_token:
|
10 |
-
raise ValueError("No se ha encontrado el token de API de Replicate.")
|
11 |
-
|
12 |
-
# Función para dividir el archivo de audio en segmentos de duración definida (en milisegundos)
|
13 |
-
def dividir_audio(audio_path, segment_duration_ms):
|
14 |
-
audio = AudioSegment.from_file(audio_path)
|
15 |
-
audio_length = len(audio)
|
16 |
-
segments = []
|
17 |
-
|
18 |
-
# Divide el audio en fragmentos de la duración especificada (10 minutos en milisegundos)
|
19 |
-
for i in range(0, audio_length, segment_duration_ms):
|
20 |
-
segment = audio[i:i+segment_duration_ms] # Cada fragmento de hasta 10 minutos
|
21 |
-
segment_path = f"segment_{i // (60 * 1000)}.wav" # Nombre del archivo con el índice del minuto
|
22 |
-
segment.export(segment_path, format="wav") # Exporta el fragmento como un archivo WAV
|
23 |
-
segments.append(segment_path)
|
24 |
-
|
25 |
-
return segments
|
26 |
|
27 |
# Función para transcribir el audio
|
28 |
def transcribe_audio(audio_file):
|
@@ -42,42 +19,23 @@ def transcribe_audio(audio_file):
|
|
42 |
# Procesar cada segmento individualmente
|
43 |
for segment_path in segments:
|
44 |
with open(segment_path, "rb") as audio:
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
"
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
58 |
|
59 |
# Combina todas las transcripciones en una sola cadena
|
60 |
full_transcription = "\n".join(all_transcriptions)
|
61 |
return full_transcription # Devuelve la transcripción completa
|
62 |
-
|
63 |
-
|
64 |
-
# Configurar la interfaz de Streamlit
|
65 |
-
st.title("")
|
66 |
-
|
67 |
-
# Subir archivo de audio
|
68 |
-
uploaded_audio = st.file_uploader("Sube tu archivo de audio", type=["wav", "mp3", "ogg", "flac"])
|
69 |
-
|
70 |
-
# Si se ha subido un archivo
|
71 |
-
if uploaded_audio is not None:
|
72 |
-
# Guardar el archivo temporalmente
|
73 |
-
with open("temp_audio_file.wav", "wb") as f:
|
74 |
-
f.write(uploaded_audio.read())
|
75 |
-
|
76 |
-
st.info("Transcribiendo el audio, esto puede tardar unos minutos...")
|
77 |
-
|
78 |
-
# Transcribir el archivo
|
79 |
-
transcription = transcribe_audio("temp_audio_file.wav")
|
80 |
-
|
81 |
-
# Mostrar el resultado
|
82 |
-
st.subheader("Transcripción")
|
83 |
-
st.text(transcription)
|
|
|
|
|
1 |
import replicate
|
2 |
+
import httpx
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
# Función para transcribir el audio
|
5 |
def transcribe_audio(audio_file):
|
|
|
19 |
# Procesar cada segmento individualmente
|
20 |
for segment_path in segments:
|
21 |
with open(segment_path, "rb") as audio:
|
22 |
+
# Usar httpx.Client para aumentar el tiempo de espera
|
23 |
+
with httpx.Client(timeout=300) as client: # Aumenta el tiempo de espera a 300 segundos
|
24 |
+
output = replicate.run(
|
25 |
+
"vaibhavs10/incredibly-fast-whisper:3ab86df6c8f54c11309d4d1f930ac292bad43ace52d10c80d87eb258b3c9f79c",
|
26 |
+
input={
|
27 |
+
"task": "transcribe",
|
28 |
+
"audio": audio, # El archivo de audio cargado en Streamlit
|
29 |
+
"language": "None", # Detecta automáticamente el idioma
|
30 |
+
"timestamp": "chunk", # Incluye marcas de tiempo
|
31 |
+
"batch_size": 64,
|
32 |
+
"diarise_audio": False
|
33 |
+
},
|
34 |
+
client=client # Usar el cliente con timeout ajustado
|
35 |
+
)
|
36 |
+
# Almacenar la transcripción del segmento
|
37 |
+
all_transcriptions.append(output['text'])
|
38 |
|
39 |
# Combina todas las transcripciones en una sola cadena
|
40 |
full_transcription = "\n".join(all_transcriptions)
|
41 |
return full_transcription # Devuelve la transcripción completa
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|