3v324v23's picture
Initial commit: Gradio app and requirements
491da4c
import gradio as gr
from autogluon.tabular import TabularPredictor
import pandas as pd
# Load the model from the `model/` folder in this repo
predictor = TabularPredictor.load("model/")
key_center_mapping = {
0: "A", 1: "Bb", 2: "B", 3: "C", 4: "Db", 5: "D",
6: "Eb", 7: "E", 8: "F", 9: "Gb", 10: "G", 11: "Ab"
}
marking_mapping = {
0: "Minuet", 1: "Allegro", 2: "Andante",
3: "Moderato", 4: "Allegretto", 5: "Dance"
}
def predict_composer(rh, lh, measures, key_center, marking):
df = pd.DataFrame({
'right hand notes': [rh],
'left hand notes': [lh],
'measures': [measures],
'Key Center': [key_center],
'marking': [marking]
})
pred = predictor.predict(df)[0]
probs = predictor.predict_proba(df).iloc[0].to_dict()
return pred, probs
examples = [
[108, 82, 16, 3, 1],
[196, 136, 29, 2, 2],
[96, 49, 13, 2, 4],
[481, 561, 31, 5, 5],
[174, 129, 31, 2, 1],
]
with gr.Blocks() as demo:
gr.Markdown("# Classical Music Composer Classifier")
gr.Markdown("Predict whether a piece was composed by **Mozart** or **Beethoven**.")
with gr.Row():
rh = gr.Number(150, label="Right Hand Notes")
lh = gr.Number(100, label="Left Hand Notes")
measures = gr.Number(20, label="Measures")
with gr.Row():
key_center = gr.Dropdown(list(key_center_mapping.keys()), value=3, label="Key Center")
marking = gr.Dropdown(list(marking_mapping.keys()), value=1, label="Marking")
out_label = gr.Textbox(label="Predicted Composer")
out_probs = gr.Label(num_top_classes=2, label="Probabilities")
for inp in [rh, lh, measures, key_center, marking]:
inp.change(fn=predict_composer, inputs=[rh, lh, measures, key_center, marking], outputs=[out_label, out_probs])
gr.Examples(examples, inputs=[rh, lh, measures, key_center, marking], outputs=[out_label, out_probs])
demo.launch()