| 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() |
|
|