|
|
import gradio as gr |
|
|
import joblib |
|
|
import numpy as np |
|
|
|
|
|
|
|
|
d = joblib.load("genre_classifier.joblib") |
|
|
clf = d["model"] |
|
|
scaler = d["scaler"] |
|
|
le = d["label_encoder"] |
|
|
feature_order = d["features"] |
|
|
|
|
|
def predict_genre( |
|
|
danceability, energy, key, loudness, mode, speechiness, acousticness, |
|
|
instrumentalness, liveness, valence, tempo, time_signature |
|
|
): |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
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() |
|
|
|