Woziii commited on
Commit
0ba180b
·
verified ·
1 Parent(s): 002f789

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -25
app.py CHANGED
@@ -36,20 +36,19 @@ MODEL_NAME = "openai/whisper-medium"
36
  FILE_LIMIT_MB = 1000
37
  YT_LENGTH_LIMIT_S = 3600
38
 
39
- device = "cuda:0" if torch.cuda.is_available() else "cpu"
40
 
41
  pipe = pipeline(
42
  task="automatic-speech-recognition",
43
  model=MODEL_NAME,
 
44
  device=device,
45
  model_kwargs={"low_cpu_mem_usage": True},
46
- return_timestamps="word"
47
  )
48
 
49
 
50
 
51
 
52
-
53
  def associate_speakers_with_timestamps(transcription_result, diarization, tolerance=0.1, min_segment_duration=0.5):
54
  word_segments = transcription_result['chunks']
55
  diarization_segments = list(diarization.itertracks(yield_label=True))
@@ -124,11 +123,9 @@ def parse_simplified_diarization(simplified_text):
124
  def process_transcription(*args):
125
  generator = transcribe_and_diarize(*args)
126
  for progress_message, raw_text, speaker_transcription in generator:
127
- yield progress_message, raw_text, "" # Streaming de la transcription brute
128
-
129
- # Une fois la transcription terminée, effectuez la diarisation
130
  simplified_diarization = simplify_diarization_output(speaker_transcription)
131
- yield progress_message, raw_text, simplified_diarization
132
 
133
  def process_yt_transcription(*args):
134
  html_embed, raw_text, speaker_transcription = yt_transcribe(*args)
@@ -176,10 +173,6 @@ def display_progress(progress_state):
176
  """)
177
 
178
  @spaces.GPU(duration=120)
179
- def stream_transcription(audio):
180
- for result in pipe(audio, chunk_length_s=10, stride_length_s=(4, 2)):
181
- yield result["text"]
182
-
183
  def transcribe_and_diarize(file_path, task, progress=gr.Progress()):
184
  progress(0, desc="Initialisation...")
185
  yield "Chargement du fichier...", None, None
@@ -187,12 +180,10 @@ def transcribe_and_diarize(file_path, task, progress=gr.Progress()):
187
  progress(0.2, desc="Préparation de l'audio...")
188
  yield "Préparation de l'audio...", None, None
189
 
190
- progress(0.3, desc="Laissez moi quelques minutes pour déchiffrer les voix et rédiger l'audio 🤓 ✍️ ...")
191
- transcription = ""
192
- for chunk in stream_transcription(audio_np):
193
- transcription += chunk
194
- yield "Transcription en cours...", transcription, []
195
-
196
  progress(0.6, desc=" C'est fait 😮‍💨 ! Je m'active à fusionner tout ça, un instant, J'y suis presque...")
197
  if diarization_pipeline:
198
  diarization = diarization_pipeline(file_path)
@@ -323,8 +314,7 @@ demo = gr.Blocks(
323
 
324
 
325
  with demo:
326
- gr.Markdown("""# 🎙️ **Scribe** : L'assistant de Transcription Audio Intelligent 📝
327
- ### ⚠️ Cette version est une maquette publique. Ne pas mettre de données sensibles, privées ou confidentielles.⚠️""")
328
  gr.HTML(
329
  """
330
  <div class="logo">
@@ -400,7 +390,7 @@ with demo:
400
  progress_display = gr.Markdown(label="État de la progression")
401
 
402
  with gr.Accordion("Résultats 📊", open=True):
403
- transcription_output = gr.Textbox(label="📝 Transcription brute", info="Texte généré par le modèle. Modifiable si nécessaire.")
404
  speaker_output = gr.Textbox(label="👥 Diarisation (format simplifié)", info="Identification des locuteurs. Format : 'SPEAKER_XX: texte'")
405
  with gr.Accordion("Métadonnées (optionnel) 📌", open=False):
406
  audio_duration = gr.Textbox(label="⏱️ Durée de l'audio (mm:ss)")
@@ -484,10 +474,9 @@ with demo:
484
 
485
  # Connexions des boutons aux fonctions appropriées
486
  transcribe_button.click(
487
- process_transcription,
488
- inputs=[audio_input],
489
- outputs=[progress_output, transcription_output, diarization_output],
490
- show_progress=True,
491
  )
492
 
493
  format_button.click(
@@ -522,4 +511,4 @@ with demo:
522
 
523
 
524
  if __name__ == "__main__":
525
- demo.queue().launch()
 
36
  FILE_LIMIT_MB = 1000
37
  YT_LENGTH_LIMIT_S = 3600
38
 
39
+ device = 0 if torch.cuda.is_available() else "cpu"
40
 
41
  pipe = pipeline(
42
  task="automatic-speech-recognition",
43
  model=MODEL_NAME,
44
+ #chunk_length_s=30,
45
  device=device,
46
  model_kwargs={"low_cpu_mem_usage": True},
 
47
  )
48
 
49
 
50
 
51
 
 
52
  def associate_speakers_with_timestamps(transcription_result, diarization, tolerance=0.1, min_segment_duration=0.5):
53
  word_segments = transcription_result['chunks']
54
  diarization_segments = list(diarization.itertracks(yield_label=True))
 
123
  def process_transcription(*args):
124
  generator = transcribe_and_diarize(*args)
125
  for progress_message, raw_text, speaker_transcription in generator:
126
+ pass # Consommer le générateur jusqu'à la fin
 
 
127
  simplified_diarization = simplify_diarization_output(speaker_transcription)
128
+ return progress_message, raw_text, simplified_diarization
129
 
130
  def process_yt_transcription(*args):
131
  html_embed, raw_text, speaker_transcription = yt_transcribe(*args)
 
173
  """)
174
 
175
  @spaces.GPU(duration=120)
 
 
 
 
176
  def transcribe_and_diarize(file_path, task, progress=gr.Progress()):
177
  progress(0, desc="Initialisation...")
178
  yield "Chargement du fichier...", None, None
 
180
  progress(0.2, desc="Préparation de l'audio...")
181
  yield "Préparation de l'audio...", None, None
182
 
183
+ progress(0.4, desc="Laissez moi quelques minutes pour déchiffrer les voix et rédiger l'audio 🤓 ✍️ ...")
184
+ transcription_result = pipe(file_path, generate_kwargs={"task": task, "language": "fr"}, return_timestamps="word")
185
+ yield "Transcription en cours...", None, None
186
+
 
 
187
  progress(0.6, desc=" C'est fait 😮‍💨 ! Je m'active à fusionner tout ça, un instant, J'y suis presque...")
188
  if diarization_pipeline:
189
  diarization = diarization_pipeline(file_path)
 
314
 
315
 
316
  with demo:
317
+ gr.Markdown("# 🎙️ **Scribe** : L'assistant de Transcription Audio Intelligent 📝 ⚠️ Cette version est une maquette publique. Ne pas mettre de données sensibles, privées ou confidentielles.")
 
318
  gr.HTML(
319
  """
320
  <div class="logo">
 
390
  progress_display = gr.Markdown(label="État de la progression")
391
 
392
  with gr.Accordion("Résultats 📊", open=True):
393
+ raw_output = gr.Textbox(label="📝 Transcription brute", info="Texte généré par le modèle. Modifiable si nécessaire.")
394
  speaker_output = gr.Textbox(label="👥 Diarisation (format simplifié)", info="Identification des locuteurs. Format : 'SPEAKER_XX: texte'")
395
  with gr.Accordion("Métadonnées (optionnel) 📌", open=False):
396
  audio_duration = gr.Textbox(label="⏱️ Durée de l'audio (mm:ss)")
 
474
 
475
  # Connexions des boutons aux fonctions appropriées
476
  transcribe_button.click(
477
+ process_transcription,
478
+ inputs=[audio_input, task_input],
479
+ outputs=[progress_display, raw_output, speaker_output]
 
480
  )
481
 
482
  format_button.click(
 
511
 
512
 
513
  if __name__ == "__main__":
514
+ demo.queue().launch()