File size: 1,216 Bytes
3fde581
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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()