PsalmsJava commited on
Commit
61f9651
·
verified ·
1 Parent(s): 80def04

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -32
app.py CHANGED
@@ -155,40 +155,45 @@ def analyze_audio(audio):
155
  try:
156
  if audio is None:
157
  return "🎤 No audio", "0%", "Please record/upload audio.", None
158
-
159
  sample_rate, audio_data = audio
160
-
161
- # Enhanced preprocessing
 
 
 
162
  if len(audio_data.shape) > 1:
163
- audio_data = np.mean(audio_data, axis=1) # Stereo to mono
164
-
165
- # Resample to 16kHz if needed (optimal for Wav2Vec2)
166
- if sample_rate != 16000:
167
- audio_data = librosa.resample(
168
- audio_data,
169
- orig_sr=sample_rate,
170
- target_sr=16000
171
- )
172
- sample_rate = 16000
173
-
174
- # Better normalization
175
- if audio_data.dtype != np.float32:
176
- audio_data = audio_data.astype(np.float32)
177
- if np.abs(audio_data).max() > 0:
178
- audio_data = audio_data / np.abs(audio_data).max()
179
-
180
- # Consider using the more accurate model
181
- # model_name = "r-f/wav2vec-english-speech-emotion-recognition"
182
- # pipe = pipeline(
183
- # "audio-classification",
184
- # model=model_name,
185
- # device=-1 # Use -1 for CPU, 0 for GPU if available
186
- # )
187
-
188
- preds = pipe({"raw": audio_data, "sampling_rate": int(sample_rate)})
189
-
190
- # Rest of your function...
191
-
 
 
192
  except Exception as e:
193
  return "❌ Error", "0%", f"Analysis failed: {str(e)}", None
194
 
 
155
  try:
156
  if audio is None:
157
  return "🎤 No audio", "0%", "Please record/upload audio.", None
158
+
159
  sample_rate, audio_data = audio
160
+
161
+ if audio_data is None or len(audio_data) == 0:
162
+ return "🎤 Invalid audio", "0%", "Unreadable audio.", None
163
+
164
+ # Stereo → mono
165
  if len(audio_data.shape) > 1:
166
+ audio_data = np.mean(audio_data, axis=1)
167
+
168
+ # Normalize
169
+ audio_data = audio_data.astype(np.float32)
170
+ max_val = np.abs(audio_data).max()
171
+ if max_val > 0:
172
+ audio_data /= max_val
173
+
174
+ preds = pipe({
175
+ "raw": audio_data,
176
+ "sampling_rate": int(sample_rate)
177
+ })
178
+
179
+ top = preds[0]
180
+ label = top["label"].upper()
181
+ confidence = f"{top['score'] * 100:.1f}%"
182
+
183
+ emoji_map = {
184
+ "ANGER": "😠", "DISGUST": "🤢", "FEAR": "😨",
185
+ "HAPPY": "😊", "NEUTRAL": "😐",
186
+ "SADNESS": "😢", "SURPRISE": "😲"
187
+ }
188
+
189
+ mood_display = emoji_map.get(label, label)
190
+ details = "\n".join(
191
+ f"{p['label'].upper()}: {p['score'] * 100:.1f}%"
192
+ for p in preds[:6]
193
+ )
194
+
195
+ return mood_display, confidence, details, label
196
+
197
  except Exception as e:
198
  return "❌ Error", "0%", f"Analysis failed: {str(e)}", None
199