Harshini16's picture
Rename app (6).py to app.py
e35f9e9 verified
Raw
History Blame Contribute Delete
2.88 kB
# -*- coding: utf-8 -*-
"""app.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1YVNmCsvUUUCyaeBNjv5b6Fj2Cwl4h-k-
"""
import gradio as gr
import numpy as np
import librosa
import os
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings("ignore")
# === Setup: Load and extract training features ===
def extract_features(file_path):
try:
audio, sr = librosa.load(file_path, duration=3, offset=0.5)
mfccs = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
return np.mean(mfccs.T, axis=0)
except Exception as e:
print("Error:", e)
return None
# Folder where your dataset is stored (update if needed)
DATA_DIR = "/content/drive/MyDrive/Audio"
# Load and prepare dataset
features, labels = [], []
model = None # Initialize model to None
if os.path.exists(DATA_DIR):
for folder in os.listdir(DATA_DIR):
emotion = folder.split('_')[-1].lower()
folder_path = os.path.join(DATA_DIR, folder)
if os.path.isdir(folder_path): # Check if it's a directory
for file in os.listdir(folder_path):
if file.endswith(".wav"):
file_path = os.path.join(folder_path, file)
mfcc = extract_features(file_path)
if mfcc is not None:
features.append(mfcc)
labels.append(emotion)
if features and labels: # Check if data was loaded
X = np.array(features)
y = np.array(labels)
# Train model
model = RandomForestClassifier()
model.fit(X, y)
print("Model trained successfully.")
else:
print(f"No audio files found in '{DATA_DIR}' or subfolders.")
else:
print(f"ERROR: Folder '{DATA_DIR}' not found. Please upload your training data folder.")
# === Prediction function ===
def predict_emotion(audio_file):
if model is None:
return "Model not trained. Upload audio_dataset folder with training data and re-run the code."
features = extract_features(audio_file)
if features is not None:
try:
prediction = model.predict(features.reshape(1, -1))[0]
return f"Predicted Emotion: {prediction}"
except Exception as e:
return f"Prediction error: {e}"
else:
return "Could not process the audio."
# === Gradio App ===
gr.Interface(
fn=predict_emotion,
inputs=gr.Audio(type="filepath", label="Upload a .wav file"), # Removed source parameter
outputs="text",
title="Speech Emotion Recognition",
description="Upload a 3-second .wav file to predict the speaker's emotion.\n\nNote: You must have a folder named 'audio_dataset' structured like 'speaker_happy/filename.wav'."
).launch()