How to create OMR template file (.omr) using existing image in Java

G’day.
As the title shows, I would like to create OMR template using existing images.
OMR Image
Unfortunately, I can’t find usable OMR Template Editor in Java.
If anyone can hightlight the spot, I really appreciate it in advance.
Cheers,

@jamesanvictoria

Can you please provide more details about the specific requirements or features you are looking for in the OMR template creation process using Java?

Hello, @jamesanvictoria

In attachment there is a draft (3.5 MB) of .omr template from your sample.

I’ve been using OMR Cloud Client offline features to markup bubbles and an upscaled version of your sample.
OMR Client interface (161.8 KB)

OMR Cloud client is accessed through SID and KEY, which can be received either through purchase of a license or a free trial.
Instruction for free trial (325.3 KB)

Hi @nikita.korobeynikov

I really appreciate to your support. It helps a lot !
I am going to play around OMR Cloud Client by myself very soon but in the meanwhile, I simply tested one sample with omr template you provided. However, I got the error ‘class com.aspose.omr.System.l5v: Failed to find all reference points on image! Please make sure they are clearly visible and have enough blank space around them.’
Do you have any idea why this happens? I could confirm 4 reference points are clear to indicate scanned contents. FYI, here I attach my test file.
test.png (419.1 KB)

Hello, @jamesanvictoria

In attached file “test.png” there is no Aspose OMR reference points on the corners of the image.
These black squares are imperative for template recognition. They are inserted either during template generation via OmrEngine.GenerateTemplate or after marking up existing template in OMR Cloud client. Absence of these squares are the source of the exception.

Aspose OMR process:

  1. Create a template or mark-up an existing template. At this step, additional black squares on the corner of the image are inserted.
  2. Print template into paper
  3. Fill paper template using pen or pencil.
  4. Scan paper template into image
  5. Recognize scan using TemplateProcessor.Recognize method.

OMR Client.jpg (274.5 KB)

Hi @nikita.korobeynikov

Thanks for your reply.
I printed out the templated image and scanned it but still no luck.
3.jpeg (423.9 KB)

Do you think there might be any other hidden restriction?
FYI, The error shows : class com.aspose.omr.System.l5v: Failed to find matching between the template and the image

P.S> Is there any way to reduce the size of black squares or the size is fixed ?

Hello, @jamesanvictoria

I have investigated provided sample (“3.jpeg”) and result of its recognition.
There are some issues, I have corrected them and prepared a sample of template recognition (“sample.zip”) and shared via link in your private messages.

  1. Reference points on the right are not present on the paper (and scan) fully. It may lead to issues with recognition.
  2. The logo in the top left corner is interfering with reference point detection. In the provided scan sample, I have removed it. If a logo is required, please consider moving it away from the reference points and\or reducing size.
  3. I have improved .omr template file. Changed from multiple grid’s of 20 questions to 160 questions for a more readable result. Improved resolution of canvas to 3580x2533 and accuracy of bubble markups.

Please notice that I have used a low-resolution image as a source. For production purposes, I would strongly advise using a high resolution image and assert bubble markup through an OMR Cloud Client independently.

Reference point size is not optional at the moment. The .NET version of the library has an offset option in the API to change position.

Hi @nikita.korobeynikov

Thanks again for your support.

I ran your sample and could see some of info printed out. (not all of them)

Here is my snippet.

// 2. load template
TemplateProcessor processor = engine.getTemplateProcessor(template);

		// 3. recognize image
		RecognitionResult result = processor.recognizeImage(image);

		// 4. save the result
		String resultCsv = result.getCsv();

		// 5. print the result
		System.out.println(resultCsv);

It just prints out up to Question5 like the following.

Element Name,Value,
Question1,“”
Question2,“”
Question3,“”
Question4,“”
Question5,“A”

************* Done *************

Could you please share the info how you could get all of Questions ?

I appreciate to your co-work in advance.

Cheers,

@jamesanvictoria

Without setting a license, only 5 first elements are available.
There is a free temporary license that will disable all restrictions.

Hi @nikita.korobeynikov

Thanks for your info.
I will give it a try with temporary license and see how it goes soon.
Cheers,