binaryMao commited on
Commit
65d9e15
·
verified ·
1 Parent(s): 6003a07

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -35
app.py CHANGED
@@ -1,23 +1,20 @@
1
  # -*- coding: utf-8 -*-
2
  """RobotsMali_ASR_Demo.ipynb
3
-
4
  Automatically generated by Colab.
5
-
6
  Original file is located at
7
  https://colab.research.google.com/drive/1fCpSvqwoSbpEBC62cZrQuqQGr4U1BNsh
8
  """
9
-
10
  import gradio as gr
11
  from transformers import pipeline
12
  import time
 
13
 
14
  # ----------------------------------------------------------------------
15
  # 1. CONFIGURATION DES MODÈLES
16
  # ----------------------------------------------------------------------
17
-
18
  # Liste des identifiants exacts des modèles RobotsMali
19
  ROBOTSMALI_MODELS = [
20
- "RobotsMali/soloba-ctc-0.6b-v0",
21
  "RobotsMali/soloni-114m-tdt-ctc-v1",
22
  "RobotsMali/soloni-114m-tdt-ctc-V0",
23
  "RobotsMali/stt-bm-quartznet5x5-V0",
@@ -28,75 +25,105 @@ ROBOTSMALI_MODELS = [
28
  # Cache pour stocker les pipelines ASR déjà chargés.
29
  asr_pipelines = {}
30
 
31
-
32
  def load_pipeline(model_name):
33
  """
34
  Charge le pipeline ASR (modèle + processeur) pour un modèle donné et le met en cache.
35
  """
36
  if model_name not in asr_pipelines:
37
  print(f"-> Tentative de chargement du modèle: {model_name}...")
38
-
39
  try:
40
- # Notez que si vous voulez utiliser l'accélération GPU sur Colab (recommandé),
41
- # vous pouvez utiliser 'device=0' après avoir sélectionné un GPU dans
42
- # "Environnement d'exécution -> Modifier le type d'environnement d'exécution"
43
  asr_pipelines[model_name] = pipeline(
44
  "automatic-speech-recognition",
45
  model=model_name,
46
- # device=0
47
  )
48
  print(f"-> Modèle {model_name} chargé avec succès.")
49
  except Exception as e:
 
50
  print(f"!!! Erreur de chargement pour {model_name}: {e}")
 
 
51
  raise RuntimeError(f"Impossible de charger le modèle {model_name}. Vérifiez sa configuration.")
52
-
53
  return asr_pipelines[model_name]
54
 
55
  # ----------------------------------------------------------------------
56
  # 2. FONCTION PRINCIPALE D'INFÉRENCE
57
  # ----------------------------------------------------------------------
58
-
59
  def transcribe_audio(model_name: str, audio_path: str) -> str:
60
  """
61
  Effectue la transcription ASR sur un fichier audio en utilisant le modèle sélectionné.
62
  """
63
  if audio_path is None:
64
  return "⚠️ Veuillez d'abord télécharger ou enregistrer un fichier audio."
65
-
66
  if not ROBOTSMALI_MODELS:
67
  return "Liste de modèles ASR indisponible."
68
-
69
  start_time = time.time()
70
-
71
  try:
72
  if model_name not in ROBOTSMALI_MODELS:
73
  return f"Modèle sélectionné ({model_name}) non reconnu."
74
-
 
75
  asr_pipe = load_pipeline(model_name)
76
-
 
 
 
 
77
  result = asr_pipe(audio_path)
78
-
79
  end_time = time.time()
80
  duration = end_time - start_time
81
-
82
  transcription_text = result.get("text", "Transcription non disponible.")
83
  model_short_name = model_name.split('/')[-1]
84
-
85
  output = f"**Modèle Utilisé :** `{model_short_name}`\n\n"
86
  output += f"***\n"
87
  output += f"**Temps d'inférence (hors chargement) :** {duration:.2f} secondes\n"
88
  output += f"**RÉSULTAT DE LA TRANSCRIPTION :**\n"
89
  output += f"**{transcription_text.strip()}**"
90
-
91
  return output
92
-
93
  except RuntimeError as e:
 
94
  return f"❌ Erreur critique : {str(e)}"
95
  except Exception as e:
96
  return f"❌ Erreur lors de la transcription avec {model_name}: {e}"
97
 
98
  # ----------------------------------------------------------------------
99
- # 3. INTERFACE GRADIO ET LANCEMENT (Adapté à Colab)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  # ----------------------------------------------------------------------
101
 
102
  model_dropdown = gr.Dropdown(
@@ -104,31 +131,26 @@ model_dropdown = gr.Dropdown(
104
  choices=ROBOTSMALI_MODELS,
105
  value=ROBOTSMALI_MODELS[0] if ROBOTSMALI_MODELS else None,
106
  interactive=True,
107
- allow_custom_value=False
108
- )
109
 
110
  audio_input = gr.Audio(
111
  label="2. Télécharger ou Enregistrer l'Audio",
112
  type="filepath",
113
  sources=["microphone", "upload"],
114
- format="mp3"
115
- )
116
 
117
  text_output = gr.Markdown(
118
- label="3. Résultat de la Transcription ASR"
119
- )
120
 
121
  interface = gr.Interface(
122
  fn=transcribe_audio,
123
  inputs=[model_dropdown, audio_input],
124
  outputs=text_output,
125
  title="🤖 RobotsMali ASR Multi-Modèles (Test Colab)",
126
- description="Sélectionnez un modèle ASR de RobotsMali, puis enregistrez ou téléchargez un fichier audio (MP3 recommandé) pour obtenir la transcription.",
127
- allow_flagging="never"
128
- )
129
 
130
  # Lancement de l'Interface Gradio sur Colab
131
- # L'option 'share=True' est nécessaire pour générer un lien public temporaire
132
- # et afficher l'interface directement dans le notebook ou via un lien externe.
133
  print("Lancement de l'interface Gradio...")
134
  interface.launch(share=True)
 
1
  # -*- coding: utf-8 -*-
2
  """RobotsMali_ASR_Demo.ipynb
 
3
  Automatically generated by Colab.
 
4
  Original file is located at
5
  https://colab.research.google.com/drive/1fCpSvqwoSbpEBC62cZrQuqQGr4U1BNsh
6
  """
 
7
  import gradio as gr
8
  from transformers import pipeline
9
  import time
10
+ import os
11
 
12
  # ----------------------------------------------------------------------
13
  # 1. CONFIGURATION DES MODÈLES
14
  # ----------------------------------------------------------------------
 
15
  # Liste des identifiants exacts des modèles RobotsMali
16
  ROBOTSMALI_MODELS = [
17
+ "RobotsMali/soloba-ctc-0.6b-v0", # Le modèle qui posait problème
18
  "RobotsMali/soloni-114m-tdt-ctc-v1",
19
  "RobotsMali/soloni-114m-tdt-ctc-V0",
20
  "RobotsMali/stt-bm-quartznet5x5-V0",
 
25
  # Cache pour stocker les pipelines ASR déjà chargés.
26
  asr_pipelines = {}
27
 
 
28
  def load_pipeline(model_name):
29
  """
30
  Charge le pipeline ASR (modèle + processeur) pour un modèle donné et le met en cache.
31
  """
32
  if model_name not in asr_pipelines:
33
  print(f"-> Tentative de chargement du modèle: {model_name}...")
 
34
  try:
35
+ # Cette ligne charge le modèle directement depuis le Hub Hugging Face
 
 
36
  asr_pipelines[model_name] = pipeline(
37
  "automatic-speech-recognition",
38
  model=model_name,
39
+ # device=0 # Décommenter si un GPU est disponible et souhaité
40
  )
41
  print(f"-> Modèle {model_name} chargé avec succès.")
42
  except Exception as e:
43
+ # Meilleure gestion d'erreur : affiche la trace complète dans les logs du Space
44
  print(f"!!! Erreur de chargement pour {model_name}: {e}")
45
+ # Si vous avez besoin de la trace complète dans les logs du Space
46
+ # import traceback; traceback.print_exc()
47
  raise RuntimeError(f"Impossible de charger le modèle {model_name}. Vérifiez sa configuration.")
 
48
  return asr_pipelines[model_name]
49
 
50
  # ----------------------------------------------------------------------
51
  # 2. FONCTION PRINCIPALE D'INFÉRENCE
52
  # ----------------------------------------------------------------------
 
53
  def transcribe_audio(model_name: str, audio_path: str) -> str:
54
  """
55
  Effectue la transcription ASR sur un fichier audio en utilisant le modèle sélectionné.
56
  """
57
  if audio_path is None:
58
  return "⚠️ Veuillez d'abord télécharger ou enregistrer un fichier audio."
 
59
  if not ROBOTSMALI_MODELS:
60
  return "Liste de modèles ASR indisponible."
61
+
62
  start_time = time.time()
 
63
  try:
64
  if model_name not in ROBOTSMALI_MODELS:
65
  return f"Modèle sélectionné ({model_name}) non reconnu."
66
+
67
+ # Le modèle est chargé ou récupéré depuis le cache ici
68
  asr_pipe = load_pipeline(model_name)
69
+
70
+ # S'assure que le fichier audio existe avant de l'envoyer au pipeline
71
+ if not os.path.exists(audio_path):
72
+ return "❌ Erreur : Fichier audio introuvable ou chemin invalide."
73
+
74
  result = asr_pipe(audio_path)
 
75
  end_time = time.time()
76
  duration = end_time - start_time
77
+
78
  transcription_text = result.get("text", "Transcription non disponible.")
79
  model_short_name = model_name.split('/')[-1]
80
+
81
  output = f"**Modèle Utilisé :** `{model_short_name}`\n\n"
82
  output += f"***\n"
83
  output += f"**Temps d'inférence (hors chargement) :** {duration:.2f} secondes\n"
84
  output += f"**RÉSULTAT DE LA TRANSCRIPTION :**\n"
85
  output += f"**{transcription_text.strip()}**"
86
+
87
  return output
88
+
89
  except RuntimeError as e:
90
+ # Ceci capture l'erreur de chargement (si elle n'a pas été capturée au pré-chargement)
91
  return f"❌ Erreur critique : {str(e)}"
92
  except Exception as e:
93
  return f"❌ Erreur lors de la transcription avec {model_name}: {e}"
94
 
95
  # ----------------------------------------------------------------------
96
+ # 2.5. PRÉ-CHARGEMENT DU MODÈLE PAR DÉFAUT (NOUVEAU)
97
+ # ----------------------------------------------------------------------
98
+
99
+ INITIAL_DESCRIPTION = "Sélectionnez un modèle ASR de RobotsMali, puis enregistrez ou téléchargez un fichier audio (MP3 recommandé) pour obtenir la transcription."
100
+
101
+ if ROBOTSMALI_MODELS:
102
+ default_model = ROBOTSMALI_MODELS[0]
103
+ try:
104
+ # Tente de charger le modèle par défaut au démarrage du script
105
+ load_pipeline(default_model)
106
+ default_model_short_name = default_model.split('/')[-1]
107
+ INITIAL_DESCRIPTION = (
108
+ f"✅ Le modèle par défaut `{default_model_short_name}` a été préchargé avec succès. "
109
+ f"Téléchargez ou enregistrez votre audio pour transcrire."
110
+ )
111
+ except RuntimeError as e:
112
+ # Si le chargement échoue, informe l'utilisateur que le modèle par défaut est cassé
113
+ default_model_short_name = default_model.split('/')[-1]
114
+ INITIAL_DESCRIPTION = (
115
+ f"❌ ERREUR CRITIQUE AU DÉMARRAGE : Impossible de charger le modèle "
116
+ f"`{default_model_short_name}`. "
117
+ f"**Veuillez sélectionner un autre modèle dans la liste** (ex: le second). "
118
+ f"Détails de l'erreur : {str(e)}"
119
+ )
120
+ except Exception:
121
+ # Capture toute autre erreur non gérée par RuntimeError
122
+ INITIAL_DESCRIPTION = "❌ ERREUR CRITIQUE AU DÉMARRAGE : Problème inconnu lors du pré-chargement du modèle."
123
+
124
+
125
+ # ----------------------------------------------------------------------
126
+ # 3. INTERFACE GRADIO ET LANCEMENT
127
  # ----------------------------------------------------------------------
128
 
129
  model_dropdown = gr.Dropdown(
 
131
  choices=ROBOTSMALI_MODELS,
132
  value=ROBOTSMALI_MODELS[0] if ROBOTSMALI_MODELS else None,
133
  interactive=True,
134
+ allow_custom_value=False)
 
135
 
136
  audio_input = gr.Audio(
137
  label="2. Télécharger ou Enregistrer l'Audio",
138
  type="filepath",
139
  sources=["microphone", "upload"],
140
+ format="mp3")
 
141
 
142
  text_output = gr.Markdown(
143
+ label="3. Résultat de la Transcription ASR")
 
144
 
145
  interface = gr.Interface(
146
  fn=transcribe_audio,
147
  inputs=[model_dropdown, audio_input],
148
  outputs=text_output,
149
  title="🤖 RobotsMali ASR Multi-Modèles (Test Colab)",
150
+ # Utilise la description générée par la phase de pré-chargement
151
+ description=INITIAL_DESCRIPTION,
152
+ allow_flagging="never")
153
 
154
  # Lancement de l'Interface Gradio sur Colab
 
 
155
  print("Lancement de l'interface Gradio...")
156
  interface.launch(share=True)