Spaces:
Build error
Build error
import streamlit as st | |
x = st.slider('Select a value') | |
st.write(x, 'squared is', x * x) | |
# app.py | |
import os | |
from flask import Flask, request, jsonify, render_template | |
import librosa | |
import numpy as np | |
import tensorflow as tf | |
from sklearn.preprocessing import StandardScaler | |
import joblib | |
app = Flask(__name__) | |
# Load the trained model | |
model = tf.keras.models.load_model('model.h5') | |
# Load the scaler - you'll need to save this during training | |
# Add this after your training code: | |
# joblib.dump(scaler, 'scaler.pkl') | |
scaler = joblib.load('scaler.pkl') | |
def extract_features(audio_file): | |
y, sr = librosa.load(audio_file) | |
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13) | |
spectral_centroid = librosa.feature.spectral_centroid(y=y, sr=sr) | |
spectral_bandwidth = librosa.feature.spectral_bandwidth(y=y, sr=sr) | |
spectral_rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr) | |
zero_crossing_rate = librosa.feature.zero_crossing_rate(y) | |
features = np.concatenate([ | |
np.mean(mfccs, axis=1), | |
[np.mean(spectral_centroid)], | |
[np.mean(spectral_bandwidth)], | |
[np.mean(spectral_rolloff)], | |
[np.mean(zero_crossing_rate)] | |
]) | |
return features.reshape(1, -1) | |
def home(): | |
return render_template('index.html') | |
def predict(): | |
try: | |
if 'file' not in request.files: | |
return jsonify({'error': 'No file provided'}), 400 | |
file = request.files['file'] | |
if file.filename == '': | |
return jsonify({'error': 'No file selected'}), 400 | |
if not file.filename.endswith('.wav'): | |
return jsonify({'error': 'Please upload a WAV file'}), 400 | |
# Extract features | |
features = extract_features(file) | |
# Scale features | |
scaled_features = scaler.transform(features) | |
# Make prediction | |
prediction = model.predict(scaled_features) | |
gender = "Female" if prediction[0][0] < 0.5 else "Male" | |
confidence = float(prediction[0][0] if prediction[0][0] > 0.5 else 1 - prediction[0][0]) | |
return jsonify({ | |
'prediction': gender, | |
'confidence': f"{confidence * 100:.2f}%" | |
}) | |
except Exception as e: | |
return jsonify({'error': str(e)}), 500 | |
if __name__ == '__main__': | |
app.run(debug=True) |