Update app.py
Browse files
app.py
CHANGED
@@ -1,5 +1,28 @@
|
|
|
|
1 |
import replicate
|
2 |
-
import
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
# Función para transcribir el audio
|
5 |
def transcribe_audio(audio_file):
|
@@ -19,23 +42,42 @@ 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 |
-
|
23 |
-
|
24 |
-
|
25 |
-
"
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
import replicate
|
3 |
+
import streamlit as st
|
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 |
# Procesar cada segmento individualmente
|
43 |
for segment_path in segments:
|
44 |
with open(segment_path, "rb") as audio:
|
45 |
+
output = replicate.run(
|
46 |
+
"vaibhavs10/incredibly-fast-whisper:3ab86df6c8f54c11309d4d1f930ac292bad43ace52d10c80d87eb258b3c9f79c",
|
47 |
+
input={
|
48 |
+
"task": "transcribe",
|
49 |
+
"audio": audio, # El archivo de audio cargado en Streamlit
|
50 |
+
"language": "None", # Detecta automáticamente el idioma
|
51 |
+
"timestamp": "chunk", # Incluye marcas de tiempo
|
52 |
+
"batch_size": 64,
|
53 |
+
"diarise_audio": False
|
54 |
+
}
|
55 |
+
)
|
56 |
+
# Almacenar la transcripción del segmento
|
57 |
+
all_transcriptions.append(output['text'])
|
|
|
|
|
|
|
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("Transcripción de Audio usando Whisper")
|
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)
|