DDMAL / gamera_rodan

Wrappers for Gamera tasks in Rodan.
0 stars 0 forks source link

MEI encoding failed - Miyao not finding staves #11

Open JoyfulGen opened 3 years ago

JoyfulGen commented 3 years ago

When processing folio 191r of Salzinnes in the E2E OMR workflow, the MEI encoding job failed. I ran the job 3 more times, and the same thing happened. Looking at the resources of the workflow, it looks like the Miyao staff finding job isn't finding any staves. As a consequence, the Heuristic pitch finding job doesn't have staves either, or glyphs for some reason. However, the Fast Pixelwise Analysis seems to be splitting the three layers (symbols, staves, background) correctly and the Non-Interactive classifier appears to contain neumes as well.

This is workflow I used. I always use the same one and this problem hadn't occurred until now and hasn't since.

Example of workflow

And these are the resources mentioned above: 191r Miyao Staff Finding - JSOMR-3.json.zip 191r Heuristic Pitch Finding - JSOMR of glyphs, staves, and page properties(1).json.zip 191r Non-Interactive Classifier - GameraXML - Classified Glyphs(1).xml.zip 191r Fast Pixelwise Analysis of Music Document - Background.png.zip 191r Fast Pixelwise Analysis of Music Document - Staff.png.zip 191r Fast Pixelwise Analysis of Music Document - Symbols.png.zip

ahankinson commented 3 years ago

Only chiming in here to say: Wow! That's a fantastic workflow!

yinanazhou commented 3 years ago

@carrieeex and I checked this issue. The reported error of MEI_encoding job is:

Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task R = retval = fun(*args, *kwargs) File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 438, in __protected_call__ return self.run(args, **kwargs) File "/code/Rodan/rodan/jobs/base.py", line 771, in run retval = self.run_my_task(inputs, settings, arg_outputs) File "/code/Rodan/rodan/jobs/MEI_encoding/MEI_encoding.py", line 84, in run_my_task mei_string = bm.process(jsomr, syls, classifier_table, width_mult) File "/code/Rodan/rodan/jobs/MEI_encoding/build_mei_file.py", line 523, in process meiDoc = build_mei(pairs, classifier, jsomr['staves'], jsomr['page']) File "/code/Rodan/rodan/jobs/MEI_encoding/build_mei_file.py", line 362, in build_mei bb = staves[0]['bounding_box'] IndexError: list index out of range

So we went back to the input of MEI_encoding job, Miyao Staff Finding - JSOMR.json, which is the output of Miyao algorithm:

{"page": {"bounding_box": {"nrows": 6295, "ulx": 0, "uly": 0, "ncols": 4792}, "resolution": 0.0}, "staves": []}

In this file, staves is empty. We then went back and checked the input of the Miyao_Staff_Finding job, which is Dilate - Onebit PNG dilated image.png: image As shown in the figure above, the staff lines are correctly separated.

Therefore, I suppose the issue is with Miyao_Staff_Finding job.

yinanazhou commented 3 years ago

This may relates to issue #25 in the MEI_encoding repo. In this case, just one staff line is missing.