Spaces:
Build error
Build error
| 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() |