Audiveris / audiveris

Latest generation of Audiveris OMR engine
https://audiveris.github.io/audiveris
GNU Affero General Public License v3.0
1.52k stars 226 forks source link

Audiveris - a beginners experience and problems #694

Open SofNotenwart opened 10 months ago

SofNotenwart commented 10 months ago

I’m not sure if I should put my comments and problems under Issues or Discussions so you may have to correct me. This first one, I put under Issues.

I’m a beginner using Audiveris. Overall I think the initiative for such a program is great and, of course, it’s not perfect. In fact, none of the Music Recognition programs I’ve tested so far (so far I’ve used Audiveris, SharpEye and CapellaScan) deliver an error free output.

Computer / Software environment

As an experiment, I’ve performed OMR on Dvorak’s 9th symphony. At first on very good quality output from Lilypond (which I’ve engraved earlier) and secondly from a scanned score from an original I had at home but first a few word regarding Audiveris StartUp

Error messages

What is this, and is it important for the OMR process / performance? If yes, what must be done to correct it?

Storage of Audiveris “products”

Can’t this be setup such that both are stored in the same place, e.g. were the original pdf-file is stored. An additional subdirectory s not needed as far as I can judge but maybe there is a logical explanation for this.

As it is now, you “polluting” the mass memory with a lot of files and subdirectories which, in the end, you probably forget to remove when you are finished.

Memory Limits

Performing OMR I had to split Movement 1 in three parts as because of too many errors. One of the typical error messages is Caused by: java.lang.OutOfMemoryError: Java heap space.

I’ve read some postings about this, e.g. https://github.com/Audiveris/audiveris/issues/538. What is the default setting which you get when you use the Windows installer? It looks like it can be increased but can it be done without recompiling the code? This is something I never done before.

OMR Problems

If there is a need, theses will be covered in separate posting

hbitteur commented 10 months ago

Error messages

  • LogUtil. Property logback.configurationFile not defined, skipped.
  • LogUtil. No C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris\config\logback.xml, skipped.

What is this, and is it important for the OMR process / performance? If yes, what must be done to correct it?

These are not error messages, but just technical information. Perhaps too technical. They refer to the ability for the end user to tune which messages should be printed by Audiveris application. The default is only info, warning and error messages.

But you can ask for more, such as debug messages for certain classes. This is specified via a logback.xml file that you can provide in a certain location. This location was tested at runtime, no logback.xml file was found there, therefore the default messages are used. That's all. No error.

SofNotenwart commented 10 months ago

Regarding the heap size, there is a statement in the file build.gradle (lines 49-50) that

minHeapSize = '512m'
maxHeapSize = '1g'

Is this a compiler setting or can this be changed elsewhere? I assume it would help and maybe avoid the error message Caused by: java.lang.OutOfMemoryError: Java heap space. Reported above.

hbitteur commented 10 months ago

Storage of Audiveris “products”

  • One of the log files is stored in Logging to C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris\log, why, it’s almost difficult to find. Wouldn’t it be better to store the log-file where the original pdf-file is located
  • The OMR-file is stored in yet another directory with one additional subdirectory for each performed recognition, e.g. C:\Users\tommy\OneDrive\Documents\Audiveris.

Can’t this be setup such that both are stored in the same place, e.g. were the original pdf-file is stored. An additional subdirectory s not needed as far as I can judge but maybe there is a logical explanation for this.

The .log file contains all the logged messages (the ones you can read in the log window, at the bottom of Audiveris main window), together with stack dumps if any exception was raised. It is located in Audiveris user space, which for you is C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris For more information on Audiveris folders, please refer to this handbook section. The log folder is one of the cached folders. The precise location of the log file for the current session is displayed at the beginning of the log window.

The .omr files, as well as the other outputs, are handled differently. Please refer to the section on standard folders, still in the handbook. By default, the "historical" policy applies (one separate folder per book, located in the standard folders). But you now have the ability to use a different policy, by which the outputs are written as siblings of the input file, as described in the same handbook article. My understanding is that this is what your post is asking for. Great minds think alike ... :-)

SofNotenwart commented 10 months ago

Thanks, I will check. I remember yesterday night when I skimmed through the handbook I vaguely remember seeing something.

Yesterday I made a quick Audioveris run on the first movement of Dvorak's symphony #9 and checked the OMR quality. I used a Lilypond generated score as well as a score from IMSP.

To my surprise the Lilypond conversion was not good. In particular it missed most 1/8 rests and many beams. I will come back to this in s separate post.

By profession I'm a space engineer, satellite deep space navigation and control, software and operations. For navigation, one important sensor is the star tracker which autonomously determine in which direction the spacecraft is pointing. A star tracker identify, stars, cluster of stars and galaxies and based on for example their size, brightness and the angulsr separation between them determines where you are pointing. For this, pattern recognition and star catalogues are used. To improve pointing, the star "images" are defocused (to create a Gaussian distribution), which improve the determination of the centre of a celestial object as not all of them can be considered as point sources. A star tracker delivers a full attitude determination with up to 8Hz. Speed is the key so ADA or today C++ programming language is used. For extremely time critical operations, even machine coding is utilised.

I've not a full understanding of Audiveris but from what I've read so far, it seems that some of these techniques are implemented. Great respect.

hbitteur commented 10 months ago

Regarding the heap size, there is a statement in the file build.gradle (lines 49-50) that

minHeapSize = '512m'
maxHeapSize = '1g'

Is this a compiler setting or can this be changed elsewhere? I assume it would help and maybe avoid the error message Caused by: java.lang.OutOfMemoryError: Java heap space. Reported above.

As you noticed in #538, you can modify the maximum heap space as a jvm argument passed to Gradle. For example:

./gradlew -PjvmLineArgs="-Xmx2G" run

This is OK when you launch Audiveris from Gradle.

When launching Audiveris installed by the Windows installer, there are two system environment variables you can use to pass JVM arguments:

Set one of these to something like -Xmx2G, as above.

I will need to update the handbook. Thanks for pointing this out. /Hervé

hbitteur commented 10 months ago

I've not a full understanding of Audiveris but from what I've read so far, it seems that some of these techniques are implemented. Great respect.

Thank you ! FYI, the very first implementation of Audiveris, something I started as a hobby in 1998, was written in Ada...