Aspose.OMR 24.4.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Aspose.OMR --version 24.4.0                
NuGet\Install-Package Aspose.OMR -Version 24.4.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Aspose.OMR" Version="24.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Aspose.OMR --version 24.4.0                
#r "nuget: Aspose.OMR, 24.4.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Aspose.OMR as a Cake Addin
#addin nuget:?package=Aspose.OMR&version=24.4.0

// Install Aspose.OMR as a Cake Tool
#tool nuget:?package=Aspose.OMR&version=24.4.0                

Optical mark recognition (OMR) API for .NET

Version 24.4 Downloads

Overview | Documentation | API Reference | Online apps | Showcases | Blog | Free support | Temporary license

This package can be used to develop applications for on-premise operating systems and cloud platforms. You can build both 32-bit and 64-bit software, including ASP.NET, WCF, and WinForms.

Please note: our library implies the use of .NET programming languages, compatible with CLI infrastructure. If you require a corresponding native library for C++, you can download it from here.

API overview

Aspose.OMR for .NET can generate and recognize hand-filled answer sheets, surveys, applications, and similar machine-readable forms. With it, you can quickly develop on-premise and web-based .NET applications for optical mark recognition (OMR) that work without specialized hardware. Respondents can fill out your forms with a pen or pencil and use any type of marks - we guarantee reliable results.

  • Complete OMR workflow - from designing a form to recognizing filled hardcopies.
  • Use your existing office copier or a smartphone camera instead of an expensive OMR scanner.
  • Add and recognize QR codes and barcodes.
  • Recognition of multi-page forms.
  • Supports right-to-left (RTL) languages and Eastern Arabic numerals.
  • No external editors and design tools are required.
  • Supports all popular paper sizes as well as a number of non-standard ones.
  • Full compatibility with other Aspose products - build solutions of any complexity using familiar concepts with minimal code.

Markup languages

Aspose.OMR for .NET offers several ways to design OMR forms of any layout and complexity. They all work equally well and produce the same results - just choose the approach that you are most comfortable with.

Supported file formats

Aspose.OMR for .NET can generate machine-readable forms in all popular formats. The format is intellectually selected based on the provided extension:

  • PDF
  • JPEG
  • PNG
  • TIFF
  • GIF
  • BMP

Aspose.OMR for .NET can read just about any image that you get from a scanner or camera:

  • PDF
  • JPEG
  • PNG
  • TIFF
  • GIF
  • BMP

Recognition results are returned in the most popular document and data exchange formats:

  • JSON
  • XML
  • Comma-separated values (CSV)

Get started

You can get familiar with Aspose.OMR for .NET by creating 2 minimal console applications for creating and recognizing machine-readable forms.

Generating OMR form

  1. Create a new C# project in Visual Studio. You can use a very basic project template, such as Console App.

  2. Install this NuGet package to the project.

  3. Create a simple questionnaire in a plain-text file that uses a special notation. Save the file to bin\Debug directory of the project under the name template.txt.

     ?text=Hello, World!
     #How are you doing today?
     	() Pretty good, thanks! () I won't respond until I see my lawyer.
  4. Create an instance of Aspose.OMR.Api.OmrEngine class:

    Aspose.OMR.Api.OmrEngine omrEngine = new Aspose.OMR.Api.OmrEngine();
  5. Generate a form from the template source file:

    Aspose.OMR.Generation.GenerationResult generationResult = omrEngine.GenerateTemplate("template.txt");
  6. Save the result:

    generationResult.Save("", "Hello.OMR");

Full code:

namespace HelloOMR
	internal class Program
		static void Main(string[] args)
			Aspose.OMR.Api.OmrEngine omrEngine = new Aspose.OMR.Api.OmrEngine();
			Aspose.OMR.Generation.GenerationResult generationResult = omrEngine.GenerateTemplate("template.txt");
			generationResult.Save("", "Hello.OMR");

Now run the program. You should get 2 files in bin\Debug directory of the project:

  • Hello.OMR.png
    A printable form in PNG format. Since we have not provided a license, there will be a watermark on the page.
  • Hello.OMR.omr
    A recognition pattern used by Aspose.OMR recognition engine. This file is required for recognizing filled forms, make sure you do not accidentally delete it!

Reading filled form

  1. Create a new C# project in Visual Studio. You can use a very basic project template, such as Console App.
  2. Install this NuGet package to the project.
  3. Print the generated form (Hello.OMR.png).
  4. Mark an answer bubble.
  5. Take a photo of the filled form (the entire sheet with all crop marks) with your smartphone and upload the photo to bin\Debug directory of the project.
  6. Copy the previously generated recognition pattern (Hello.OMR.omr) into bin\Debug directory of the project.
  7. Create an instance of Aspose.OMR.Api.OmrEngine class:
    Aspose.OMR.Api.OmrEngine omrEngine = new Aspose.OMR.Api.OmrEngine();
  8. Load the recognition pattern from Hello.OMR.omr file:
    Aspose.OMR.Api.TemplateProcessor templateProcessor = omrEngine.GetTemplateProcessor("Hello.OMR.omr");
  9. Recognize the photo of the filled form:
    Aspose.OMR.Model.RecognitionResult recognitionResult = templateProcessor.RecognizeImage("IMG_20220401.jpg");
  10. Convert the recognition result to comma-separated values (CSV) format and output it to the console:
    string result = recognitionResult.GetCsv();

Full code:

using System;

namespace HelloOMR
	internal class Program
		static void Main(string[] args)
			Aspose.OMR.Api.OmrEngine omrEngine = new Aspose.OMR.Api.OmrEngine();
			Aspose.OMR.Api.TemplateProcessor templateProcessor = omrEngine.GetTemplateProcessor("Hello.OMR.omr");
			Aspose.OMR.Model.RecognitionResult recognitionResult = templateProcessor.RecognizeImage("IMG_20220401.jpg");
			string result = recognitionResult.GetCsv();

Now run the program. You should see results of the recognition in the console output:

Element Name,Value,
Question1,"{Answer bubble letter}"

Learn more

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net40 is compatible.  net403 was computed.  net45 was computed.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Aspose.OMR:

Package Downloads

Aspose.Total for .NET is the most complete package of all .NET file format APIs offered by Aspose. It empowers developers to create, edit, render, print and convert between a wide range of popular document formats within any .NET, C#, ASP.NET and VB.NET applications.


This extension to Aspose.OMR for .NET adds support for handwritten text input to machine-readable OMR forms. Free-form text text recognition allows to create more dynamic and adaptive forms that can capture a wide range of responses without the need for an exhaustive list of predefined answers. While the handwritten text recognition might not be as accurate as standard optical mark recognition, it is more intuitive, user-friendly, and versatile in a number of applications: - Creating more compact and space-efficient forms, making efficient use of limited page space. - Rapidly creating surveys and quizzes without the need for extensive categorization of information into predefined choices. - Appealing to a broader audience, by allowing respondents to write their answers rather than selecting close-ended options. - Automatically digitizing free-form responses into machine-readable text without the need for additional OCR libraries. Important: at the moment, the library only supports Latin letters (A-Z) and Western Arabic numerals (0-9). Changelog: - Added a new element that allows users to enter handwritten text in a free-form manner. Check for details in our online documentation ( or ask your questions at the free support forum (

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
24.6.0 2,455 6/18/2024
24.4.0 6,733 4/26/2024
24.3.0 4,580 3/7/2024
24.2.1 6,126 2/22/2024
24.2.0 1,372 2/1/2024
24.1.0 7,007 1/20/2024
23.12.0 6,887 12/20/2023
23.11.0 8,686 11/17/2023
23.10.0 6,825 10/26/2023
23.9.0 12,028 9/14/2023
23.8.0 14,646 8/31/2023
23.7.0 10,667 7/7/2023
23.6.1 9,725 6/30/2023
23.6.0 573 6/19/2023
23.5.0 5,454 5/23/2023
23.4.0 5,864 4/21/2023
23.3.1 9,545 3/28/2023
23.3.0 1,113 3/2/2023
23.2.0 7,957 2/22/2023
23.1.0 19,372 1/25/2023
22.12.1 7,971 12/23/2022
22.12.0 679 12/23/2022
22.11.1 8,423 11/23/2022
22.11.0 688 11/12/2022
22.10.0 674 11/1/2022
22.9.0 16,992 9/21/2022
22.8.0 19,520 8/19/2022
22.7.0 20,527 7/30/2022
22.6.0 12,014 6/18/2022
22.5.0 11,265 5/22/2022
22.4.0 12,045 4/19/2022
22.3.0 16,840 3/28/2022
22.2.0 9,150 2/28/2022
22.1.1 4,519 1/29/2022
22.1.0 534 1/29/2022
21.12.0 4,517 12/25/2021
21.11.0 8,112 11/29/2021
21.10.0 5,731 10/18/2021
21.9.0 414 10/6/2021
21.8.0 19,600 8/24/2021
21.7.0 7,112 7/24/2021
21.6.0 6,981 6/30/2021
21.5.0 4,036 6/1/2021
21.4.0 13,397 5/1/2021
21.3.0 7,059 4/1/2021
21.2.1 9,850 2/27/2021
21.2.0 2,887 2/25/2021
20.6.0 13,639 6/30/2020
20.4.0 10,702 4/30/2020
20.3.0 2,172 3/26/2020
19.9.0 7,468 9/30/2019
19.8.0 618 8/31/2019
19.7.0 698 7/31/2019
19.4.0 839 4/30/2019