silaseic's picture
Update main.py
511d097
import gradio as gr
# import torch
# import requests
import music21
import subprocess
# from torchvision import transforms
from PIL import Image
DEFAULT_FILE_NAME = 'sheet_music'
# converting everything into the key of C major or A minor
def convert_to_key():
# major conversions
majors = dict(
[("A-", 4), ("A", 3), ("B-", 2), ("B", 1), ("C", 0), ("D-", -1), ("D", -2), ("E-", -3), ("E", -4), ("F", -5),
("G-", 6), ("G", 5)])
minors = dict(
[("A-", 1), ("A", 0), ("B-", -1), ("B", -2), ("C", -3), ("D-", -4), ("D", -5), ("E-", 6), ("E", 5), ("F", 4),
("G-", 3), ("G", 2)])
score = music21.converter.parse(f'{DEFAULT_FILE_NAME}.musicxml')
key = score.analyze('key')
file_name = 'C_file'
if key.mode == "major":
halfSteps = majors[key.tonic.name]
file_name = 'Am_file'
elif key.mode == "minor":
halfSteps = minors[key.tonic.name]
newscore = score.transpose(halfSteps)
# key = newscore.analyze('key')
# print(key.tonic.name, key.mode)
newscore.write('musicxml', f'{file_name}.musicxml')
# newscore.write('musicxml.pdf', fp="file.pdf")
return f'{file_name}.musicxml', f'{file_name}_teaser.png'
def run_oemer():
process = subprocess.Popen(['oemer', f'{DEFAULT_FILE_NAME}.png'])
process.wait()
def predict(inp):
img = Image.fromarray(inp)
img.save(f'{DEFAULT_FILE_NAME}.png')
run_oemer()
return convert_to_key()
def run():
outputs = [gr.File(label='Download musicxml', type='file'),
gr.File(label='Download detection image', type='file')]
demo = gr.Interface(
fn=predict,
inputs='image',
outputs=outputs,
allow_flagging='never',
)
demo.queue()
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
run()