Recognize OMR marks using VintaSoft Forms Processing .NET Plug-in

Blog category: Forms processing.NET

July 28, 2025

In today's world, where the number of paper and electronic forms is in the millions - from questionnaires to examination forms and ballots - the requirements for their fast and accurate processing are increasing every year. One of the key tools for automating these processes has become optical mark recognition (OMR).

OMR (Optical Mark Recognition) is a technology that enables software to record and analyze the presence or absence of special marks (usually check marks, filled squares or circles) in predetermined locations on paper or electronic documents. This allows for the rapid processing of large amounts of data without manual input, minimizing errors and speeding up workflows.



A brief history of the emergence and development of OMR

Optical mark recognition technology began to develop in the second half of the 20th century, when the issue of automating the processing of a large number of similar forms, questionnaires and examination sheets arose. The first industrial systems appeared in the USA for the needs of educational institutions, where mass testing of students required accelerated and reliable calculation of results.

In the early stages of OMR development, special equipment was used - scanners with large photosensors that recorded shaded areas on paper (filled bubbles or rectangles). This allowed for a significant reduction in the time required to verify responses compared to manual verification and made data analysis more objective.

The technology subsequently evolved with the transition to digital image processing. With the advent of personal computers and software, OMR became available regardless of the type of scanner or printer. This opened up opportunities for mass application in business, education, government — anywhere that required fast and accurate processing of standard documents in large volumes.

Today, modern OMR solutions allow you to automate work not only with paper forms, but also with electronic documents, integrating OMR technologies into unified digital platforms. This ensures even greater flexibility, productivity and quality of the final data.


How OMR works and where it is applied

OMR is based on the principle of selecting areas for marks on a form (for example, in a questionnaire or test form) and then automatically scanning them using special software. This allows:

OMR starts with the creation of a special form template with designated areas for marks. Once the form is filled in and scanned (or received electronically), the software analyzes the image, determines the position and boundaries of each OMR zone, and records the marks placed by the user.

The whole process consists of several technological stages:

Where it is used:

OMR is used in all areas where it is necessary to quickly and accurately digitize large flows of similar paper or electronic data.


What are the features of VintaSoft Forms Processing .NET Plug-in for OMR

Modern solutions for label recognition are not only fast, but also flexible in configuration. One of the technological leaders in this area is VintaSoft Forms Processing .NET Plug-in.

This SDK provides full support for automated form identification and alignment, optical mark recognition, and text and barcode field recognition. Key features include:


Why businesses choose OMR with VintaSoft

For companies, processing large numbers of questionnaires, tests or standard forms is not only a task that requires precision, but also a reason to optimize business processes. Using VintaSoft Forms Processing .NET Plug-in allows to:


Technological view: How OMR works in VintaSoft

During operation, the software first determines which template the received shape image belongs to, aligns it, and only then starts analyzing the OMR fields. This architecture allows processing shapes even if they were scanned with rotation, offset, or scale changes.

Form templates are created using both code and visual editors inside WinForms or WPF applications. The developer can customize the type and appearance of OMR fields, expand the architecture for their own tasks and document formats.

Optical Mark Recognition (OMR) is a modern standard for fast and reliable processing of mass paper and electronic documents. With VintaSoft Forms Processing .NET Plug-in, the process becomes flexible, accurate, integrable into any corporate systems and fully compliant with the requirements of digital business transformation.


Here is a C# code that demonstrates how to identify and recognize a completed form that contains OMR-marks:
/// <summary>
/// Recognizes the form with OMR fields.
/// </summary>
/// <param name="formRecognitionManager">The form recognition manager.</param>
/// <param name="image">The image.</param>
public static void RecognizeFormWithOmrFields(
    Vintasoft.Imaging.FormsProcessing.FormRecognitionManager formRecognitionManager,
    Vintasoft.Imaging.VintasoftImage image)
{
    // if your form template contains OCR fields,
    // make sure OCR engine manager is initialized before recognition
    // (otherwise recognition will return null (Nothing)),
    // see OCR field recognition examples

    // recognize filled form in an image
    Vintasoft.Imaging.FormsProcessing.FormRecognitionResult recognitionResult = 
        formRecognitionManager.Recognize(image);

    // get the result of image comparison
    Vintasoft.Imaging.FormsProcessing.TemplateMatching.ImageImprintCompareResult imageCompareResult =
        recognitionResult.TemplateMatchingResult.ImageCompareResult;
    // if result is not reliable
    if (!imageCompareResult.IsReliable)
    {
        // matching template is not found
        System.Console.WriteLine("Matching template is not found.");
    }
    else
    {
        // get recognized page
        Vintasoft.Imaging.FormsProcessing.FormRecognition.FormPage recognizedPage = 
            recognitionResult.RecognizedPage;
        // get form field count
        if (recognizedPage.Items.Count == 0)
        {
            System.Console.WriteLine("No form fields were recognized.");
        }
        else
        {
            System.Console.WriteLine(string.Format(
                "Recognized form field count: {0}",
                recognizedPage.Items.Count));
            // for each recognized form field
            foreach (Vintasoft.Imaging.FormsProcessing.FormRecognition.FormField recognizedField in recognizedPage.Items)
            {
                if (recognizedField is Vintasoft.Imaging.FormsProcessing.FormRecognition.Omr.OmrField)
                {
                    Vintasoft.Imaging.FormsProcessing.FormRecognition.Omr.OmrField omrField = 
                        (Vintasoft.Imaging.FormsProcessing.FormRecognition.Omr.OmrField)recognizedField;
                    // write field info
                    System.Console.WriteLine(string.Format(
                        "  OMR field: name: {0}; state: {1}; confidence: {2:F1}%",
                        omrField.Name,
                        omrField.State,
                        omrField.Confidence * 100));
                }
            }
        }
    }
}