GAS17 commited on
Commit
b298488
verified
1 Parent(s): 2b7166b

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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):
29
+ # Cargar el archivo de audio completo
30
+ audio = AudioSegment.from_file(audio_file)
31
+ audio_duration_minutes = len(audio) / (1000 * 60) # Duraci贸n en minutos
32
+
33
+ # Si el audio dura m谩s de 10 minutos, dividirlo en segmentos de 10 minutos
34
+ if audio_duration_minutes > 10:
35
+ segments = dividir_audio(audio_file, segment_duration_ms=10 * 60 * 1000) # 10 minutos en milisegundos
36
+ else:
37
+ segments = [audio_file] # Si es menor de 10 minutos, no dividir
38
+
39
+ # Almacenar todas las transcripciones
40
+ all_transcriptions = []
41
+
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)