Mohssinibra commited on
Commit
46c4156
·
verified ·
1 Parent(s): 0cf693f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -6
app.py CHANGED
@@ -12,17 +12,23 @@ print("Chargement du modèle Wav2Vec2...")
12
  stt_pipeline = pipeline("automatic-speech-recognition", model="boumehdi/wav2vec2-large-xlsr-moroccan-darija")
13
  print("Modèle chargé avec succès !")
14
 
 
 
 
 
 
 
15
  def find_optimal_clusters(mfccs_scaled):
16
- """Trouve le nombre optimal de locuteurs en utilisant la méthode du score silhouette"""
17
  best_score = -1
18
- best_n_clusters = 1 # Au moins 1 cluster (1 locuteur)
19
 
20
  for n_clusters in range(1, 3): # On teste pour 1 ou 2 locuteurs
21
  kmeans = KMeans(n_clusters=n_clusters, random_state=42, n_init=10)
22
  labels = kmeans.fit_predict(mfccs_scaled)
23
 
24
  if n_clusters > 1:
25
- score = silhouette_score(mfccs_scaled, labels) # Score d’évaluation
26
  if score > best_score:
27
  best_score = score
28
  best_n_clusters = n_clusters
@@ -37,11 +43,16 @@ def process_audio(audio_path):
37
  audio, sr = librosa.load(audio_path, sr=None, duration=30)
38
  print(f"Audio chargé : {len(audio)} échantillons à {sr} Hz")
39
 
40
- # Réduction du bruit (amélioration du SNR)
 
 
 
 
 
41
  audio_denoised = nr.reduce_noise(y=audio, sr=sr)
42
  print("Bruit réduit.")
43
 
44
- # Extraction des MFCC après réduction du bruit
45
  mfccs = librosa.feature.mfcc(y=audio_denoised, sr=sr, n_mfcc=13)
46
  print(f"MFCC extrait, shape: {mfccs.shape}")
47
 
@@ -82,7 +93,7 @@ def process_audio(audio_path):
82
 
83
  print(f"Transcription Speaker {speaker} terminée.")
84
 
85
- return "\n".join(result)
86
 
87
  except Exception as e:
88
  print(f"Erreur : {e}")
 
12
  stt_pipeline = pipeline("automatic-speech-recognition", model="boumehdi/wav2vec2-large-xlsr-moroccan-darija")
13
  print("Modèle chargé avec succès !")
14
 
15
+ def is_silent(audio, threshold=0.005):
16
+ """Vérifie si l'audio est principalement du silence ou du bruit de fond faible."""
17
+ energy = np.mean(np.abs(audio)) # Mesure de l'énergie du signal
18
+ print(f"Énergie du signal: {energy}")
19
+ return energy < threshold
20
+
21
  def find_optimal_clusters(mfccs_scaled):
22
+ """Trouve le nombre optimal de locuteurs en utilisant le score silhouette"""
23
  best_score = -1
24
+ best_n_clusters = 1 # Par défaut, on suppose un seul locuteur
25
 
26
  for n_clusters in range(1, 3): # On teste pour 1 ou 2 locuteurs
27
  kmeans = KMeans(n_clusters=n_clusters, random_state=42, n_init=10)
28
  labels = kmeans.fit_predict(mfccs_scaled)
29
 
30
  if n_clusters > 1:
31
+ score = silhouette_score(mfccs_scaled, labels) # Score silhouette
32
  if score > best_score:
33
  best_score = score
34
  best_n_clusters = n_clusters
 
43
  audio, sr = librosa.load(audio_path, sr=None, duration=30)
44
  print(f"Audio chargé : {len(audio)} échantillons à {sr} Hz")
45
 
46
+ # Vérifier si l'audio est vide (silence)
47
+ if is_silent(audio):
48
+ print("Aucun locuteur détecté (audio trop silencieux).")
49
+ return "Aucun locuteur détecté."
50
+
51
+ # Réduction du bruit (SNR)
52
  audio_denoised = nr.reduce_noise(y=audio, sr=sr)
53
  print("Bruit réduit.")
54
 
55
+ # Extraction des MFCC
56
  mfccs = librosa.feature.mfcc(y=audio_denoised, sr=sr, n_mfcc=13)
57
  print(f"MFCC extrait, shape: {mfccs.shape}")
58
 
 
93
 
94
  print(f"Transcription Speaker {speaker} terminée.")
95
 
96
+ return "\n".join(result) if result else "Aucune voix détectée."
97
 
98
  except Exception as e:
99
  print(f"Erreur : {e}")