schifferlearning's picture
predict_genre function
3fde581 verified
import gradio as gr
import joblib
import numpy as np
# Load your saved joblib model, scaler, label_encoder, feature order
d = joblib.load("genre_classifier.joblib")
clf = d["model"]
scaler = d["scaler"]
le = d["label_encoder"]
feature_order = d["features"] # Should match what your web UI sends
def predict_genre(
danceability, energy, key, loudness, mode, speechiness, acousticness,
instrumentalness, liveness, valence, tempo, time_signature
):
# Pack input as expected by model
X = np.array([[
danceability, energy, key, loudness, mode, speechiness, acousticness,
instrumentalness, liveness, valence, tempo, time_signature
]])
X_scaled = scaler.transform(X)
pred = clf.predict(X_scaled)
label = le.inverse_transform(pred)[0]
return label
# For API: single call with all features
iface = gr.Interface(
fn=predict_genre,
inputs=[
gr.Number(label=f) for f in feature_order
],
outputs=gr.Text(label="Predicted Genre"),
title="Billboard Genre Classifier",
description="Predicts the genre from audio features. For API usage, send a POST to /run/predict.",
allow_flagging="never"
)
if __name__ == "__main__":
iface.launch()