Spaces:
No application file
No application file
Update app.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
| 162 |
if len(audio_data.shape) > 1:
|
| 163 |
-
audio_data = np.mean(audio_data, axis=1)
|
| 164 |
-
|
| 165 |
-
#
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 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 |
|