GAS17 commited on
Commit
9cf7fd7
verified
1 Parent(s): 9951904

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -32
app.py CHANGED
@@ -13,12 +13,15 @@ if not replicate_token:
13
  # Funci贸n para dividir el archivo de audio en segmentos de duraci贸n definida (en milisegundos)
14
  def dividir_audio(audio_path, segment_duration_ms=5*60*1000):
15
  audio = AudioSegment.from_file(audio_path)
 
16
  segments = []
17
 
18
- for i in range(0, len(audio), segment_duration_ms):
19
- segment = audio[i:i + segment_duration_ms]
20
- segment_path = f"segment_{i // (60 * 1000)}.wav"
21
- segment.export(segment_path, format="wav")
 
 
22
  segments.append(segment_path)
23
 
24
  return segments
@@ -36,52 +39,81 @@ def crear_pdf(transcripcion, progress=gr.Progress()):
36
  pdf.multi_cell(0, 10, line)
37
  progress(i / len(lines)) # Actualiza la barra de progreso
38
 
 
39
  pdf_path = "/mnt/data/transcripcion_audio.pdf"
40
  pdf.output(pdf_path)
 
41
  return pdf_path
42
 
43
  # Funci贸n para transcribir los segmentos de audio y generar el PDF
44
  def transcribe_audio_y_pdf(audio_file, progress=gr.Progress()):
 
45
  audio = AudioSegment.from_file(audio_file)
46
- if len(audio) > 5 * 60 * 1000:
47
- segments = dividir_audio(audio_file)
 
 
 
48
  else:
49
- segments = [audio_file]
50
 
 
51
  all_transcriptions = []
52
- for i, segment in enumerate(segments):
53
- with open(segment, "rb") as audio:
54
- output = replicate.run(
55
- "model/replicate",
56
- input={"task": "transcribe", "audio": audio}
57
- )
58
- transcription = output['text']
59
- all_transcriptions.append(f"Segment {i + 1}:\n{transcription}")
60
- yield "\n".join(all_transcriptions), None
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  full_transcription = "\n".join(all_transcriptions)
 
 
63
  pdf_path = crear_pdf(full_transcription, progress)
64
  yield full_transcription, pdf_path
65
 
66
- # Definir el script JavaScript para auto-scroll
67
- scroll_jscode = """
68
- function autoScroll() {
69
- var textbox = document.getElementById('transcription');
70
- textbox.scrollTop = textbox.scrollHeight;
71
- }
72
- """
73
-
74
  # Crea la interfaz de Gradio con scroll autom谩tico en el campo de texto
75
  with gr.Blocks() as demo:
76
- gr.Markdown("# Transcriptor con Progreso y Scroll")
77
- audio_input = gr.Audio(type="filepath", label="Sube tu archivo de audio")
78
- output_text = gr.Textbox(lines=20, label="Transcripci贸n", elem_id="transcription")
 
 
 
 
 
79
  output_pdf = gr.File(label="Descarga el PDF")
80
-
81
- transcribe_button = gr.Button("Transcribir y Crear PDF")
82
  transcribe_button.click(fn=transcribe_audio_y_pdf, inputs=audio_input, outputs=[output_text, output_pdf])
83
-
84
- # JavaScript para auto-scroll al final de la caja de texto
85
- demo.load(js=scroll_jscode)
86
 
 
 
 
 
 
 
 
 
 
 
87
  demo.launch()
 
13
  # Funci贸n para dividir el archivo de audio en segmentos de duraci贸n definida (en milisegundos)
14
  def dividir_audio(audio_path, segment_duration_ms=5*60*1000):
15
  audio = AudioSegment.from_file(audio_path)
16
+ audio_length = len(audio)
17
  segments = []
18
 
19
+ # Divide el audio en fragmentos de la duraci贸n especificada
20
+ for i in range(0, audio_length, segment_duration_ms):
21
+ segment = audio[i:i + segment_duration_ms] # Cada fragmento de hasta la duraci贸n especificada
22
+ segment_path = f"segment_{i // (60 * 1000)}.wav" # Nombre del archivo con el 铆ndice del minuto
23
+ segment.export(segment_path, format="wav") # Exporta el fragmento como un archivo WAV
24
+
25
  segments.append(segment_path)
26
 
27
  return segments
 
39
  pdf.multi_cell(0, 10, line)
40
  progress(i / len(lines)) # Actualiza la barra de progreso
41
 
42
+ # Guardar el archivo PDF
43
  pdf_path = "/mnt/data/transcripcion_audio.pdf"
44
  pdf.output(pdf_path)
45
+
46
  return pdf_path
47
 
48
  # Funci贸n para transcribir los segmentos de audio y generar el PDF
49
  def transcribe_audio_y_pdf(audio_file, progress=gr.Progress()):
50
+ # Cargar el archivo de audio completo
51
  audio = AudioSegment.from_file(audio_file)
52
+ audio_duration_minutes = len(audio) / (1000 * 60) # Duraci贸n en minutos
53
+
54
+ # Si el audio dura m谩s de 5 minutos, dividirlo en segmentos de 5 minutos
55
+ if audio_duration_minutes > 5:
56
+ segments = dividir_audio(audio_file, segment_duration_ms=5 * 60 * 1000) # 5 minutos en milisegundos
57
  else:
58
+ segments = [audio_file] # Si es menor de 5 minutos, no dividir
59
 
60
+ # Almacenar todas las transcripciones
61
  all_transcriptions = []
 
 
 
 
 
 
 
 
 
62
 
63
+ # Procesar cada segmento individualmente y mostrar progresivamente
64
+ for index, segment_path in enumerate(segments):
65
+ with open(segment_path, "rb") as audio:
66
+ try:
67
+ output = replicate.run(
68
+ "vaibhavs10/incredibly-fast-whisper:3ab86df6c8f54c11309d4d1f930ac292bad43ace52d10c80d87eb258b3c9f79c",
69
+ input={
70
+ "task": "transcribe",
71
+ "audio": audio, # El archivo de audio cargado
72
+ "language": "None", # Detecta autom谩ticamente el idioma
73
+ "timestamp": "chunk", # Incluye marcas de tiempo
74
+ "batch_size": 64,
75
+ "diarise_audio": False
76
+ }
77
+ )
78
+ transcription = output['text']
79
+ all_transcriptions.append(f"Segment {index + 1}:\n{transcription}")
80
+
81
+ # Actualizar la transcripci贸n en tiempo real
82
+ yield "\n".join(all_transcriptions), None
83
+
84
+ except Exception as e:
85
+ yield f"Error transcribiendo el segmento {index + 1}: {e}", None
86
+
87
+ # Combina todas las transcripciones en una sola cadena
88
  full_transcription = "\n".join(all_transcriptions)
89
+
90
+ # Crear PDF con progreso y devolver la ruta del archivo
91
  pdf_path = crear_pdf(full_transcription, progress)
92
  yield full_transcription, pdf_path
93
 
 
 
 
 
 
 
 
 
94
  # Crea la interfaz de Gradio con scroll autom谩tico en el campo de texto
95
  with gr.Blocks() as demo:
96
+ gr.Markdown("# Transcriptor de Audio a Texto (con actualizaciones progresivas, scroll y PDF)")
97
+
98
+ with gr.Row():
99
+ audio_input = gr.Audio(type="filepath", label="Sube tu archivo de audio")
100
+ transcribe_button = gr.Button("Transcribir y Crear PDF")
101
+
102
+ # Caja de texto con scroll para ver la transcripci贸n progresivamente
103
+ output_text = gr.Textbox(label="Transcripci贸n (scroll autom谩tico y manual)", lines=20, interactive=True, elem_id="transcripcion")
104
  output_pdf = gr.File(label="Descarga el PDF")
105
+
106
+ # Bot贸n de transcripci贸n y conexi贸n con las funciones
107
  transcribe_button.click(fn=transcribe_audio_y_pdf, inputs=audio_input, outputs=[output_text, output_pdf])
 
 
 
108
 
109
+ # JavaScript para hacer el scroll autom谩tico de la caja de texto
110
+ demo.load(js="""
111
+ function autoScroll() {
112
+ const textbox = document.getElementById('transcripcion');
113
+ textbox.scrollTop = textbox.scrollHeight;
114
+ }
115
+ document.addEventListener('gradio:output', autoScroll);
116
+ """)
117
+
118
+ # Ejecuta la aplicaci贸n
119
  demo.launch()