Optical Mark Recognition API for C++
Create an answer sheet in C++
More showcases >// Initialize Aspose.OMR engine
System::SharedPtr<Api::OmrEngine> engine
= System::MakeObject<Api::OmrEngine>();
// Generate machine-readable form from the markup
System::SharedPtr<Generation::GenerationResult> result
= engine->GenerateTemplate(u"template.txt");
// Save printable OMR form to an image file
result.Save("target", "omr-form");
> dotnet add package Aspose.OMR.Cpp
Why Aspose.OMR for C++?
Create and recognize OMR forms of any layout and complexity. With our library, you no longer need to manually check and grade tests, exam papers, surveys, applications, and other hand-filled uniform documents. We will do everything for you and return results that can be automatically analyzed or imported into a database, gradebook or CRM system of your choice. Click the items below to learn more about our features and benefits.
No hardware needed
Use your inkjet or laser printer, scanner, copier or even a smartphone camera instead of specialized OMR hardware.
Full customization
Personalize OMR forms by adding respondent's information, unique identifiers, logos, images, and more.
Dependable results
Precise optical mark detection algorithms, augmented by the ability to refine recognition, ensure 100% accurate results.
All-in-one
Aspose.OMR for C++ enables both designing the form design and recognizing its filled copies.
Developer-friendly
Even novice developers can effortlessly use our API. Creating a basic OMR application requires just 10 lines of code.
Live code sample
A printed answer sheet is a crucial element of any written test, assessment, or class evaluation. This simple online application generates a 4-column bubble sheet and illustrates the necessary code to implement it on your machine using Aspose.OMR for C++.
Copy and paste this code
More examples >// Initialize Aspose.OMR engine
System::SharedPtr<Api::OmrEngine> engine = System::MakeObject<Api::OmrEngine>();
// Generate machine-readable form from the markup
System::SharedPtr<Generation::GenerationResult> result
= engine->GenerateTemplate(u"template.txt");
// Save printable OMR form to an image file
result.Save("target", "omr-form");
Platform independence
Aspose.OMR for C++ is a self-contained package that does not require specialized hardware or third-party software. You can develop applications in any environment that supports C++ code.
Supported file formats
Aspose.OMR for C++ can work with virtually any file you can get from a scanner or camera. Recognition results are returned in the most popular data exchange formats that can be imported into any popular database or analytics system.
Build forms
- TXT
- JPEG, PNG, BMP
Scan forms
- Scans: JPEG, PNG, BMP
- Photos: JPEG, PNG
Recognize forms
- CSV
- JSON
Unlimited possibilities
Optical Mark Recognition technology provides a straightforward solution to different aspects of life where manual data collection and analysis are necessary. It fully automates tedious and error-prone manual form recognition, allowing the processing of hundreds of sheets per minute with almost 100% accuracy. Results can be analyzed in real-time or stored in a database for subsequent aggregation and analysis.
The applications span a wide range and include, but are not limited to:
- Education: answer sheets, tests, quizzes, exam forms.
- Government: voting ballots, tax forms, border entry forms, censuses, public opinions.
- Medicine: examinations, assessments, patient information forms, health insurance claims.
- Finance: loan applications, customer information updates, credit card applications.
- And many more…
No equipment needed
Sophisticated image pre-processing and analysis algorithms eliminate the necessity for dedicated OMR hardware and specialized accessories. You can fill forms with a regular pen, pencil or marker, and scan them with a common office copier, or even a smartphone camera instead of a specialized scanner, without compromising recognition accuracy. Our library allows you to develop OMR software solutions with the reliability of hardware products at a significantly lower cost. Feel free to use any available equipment:
- Auto feed document scanner;
- Budget office copier;
- Laser or inkjet printer;
- Portable handheld scanner;
- Compact or DSLR camera;
- Smartphone;
- Autofocus webcam.
Compose OMR forms without design tools
Aspose.OMR for C++ offers highly versatile tools for designing machine-readable forms with any layout and level of complexity. External editors or design tools are not required. Through highly adaptable markup languages , users can combine a large number of layout and content elements in any desired manner.
If you lack the time to familiarize yourself with template markup syntax, worry not. You can easily create a custom OMR form interactively from any platform or device using online form designer . You can add any number of elements, resize and position them according to your specific needs.
The forms can be further customized by adding texts, respondent’s name, unique identifiers, and images. You can also brand OMR forms by adding your logo, slogan, and more. Experiment with layouts, question formats, and answer structures, all while ensuring the consistent accuracy of mark recognition. Enjoy a creative design process and say goodbye to complex design processes and embrace a straightforward approach to form creation.
Look at the code samples and adapt them to your needs.
Features and capabilities
Aspose.OMR for C++ is an easy-to-use, versatile, and cost-effective API for designing, rendering and recognizing hand-filled answer sheets, surveys, applications, and similar forms.
All paper sizes
Supports all popular paper sizes and a number of non-standard ones.
Scan with a smartphone
Use your smartphone camera instead of a scanner.
No design tools needed
Quickly create OMR forms without external editors and design tools.
Accuracy tuning
Fine-tune recognition parameters for perfect results in any conditions.
Batch processing
Recognize all images in a folder with a single command.
Branding and customization
Customize OMR forms by adding your logo, images, footers, and more.
Easy to use
You only need a few lines of code to create an answer sheet, survey or other OMR form, and recognize the completed form.
You will only need 15 minutes of spare time and a basic knowledge of C++.
Installation
You can start using Aspose.OMR for C++ right after the installation with some restrictions. A temporary license removes all limitations of the trial version for 30 days. Use it to start building a fully functional OMR application and make the final decision to purchase Aspose.OMR for C++ later.
Form generator
The structure and layout of the OMR form are specified in a plain-text file using a special notation. You can create it with any text editor, including Notepad. Only 4 lines are required to generate a 150-question machine-readable answer sheet:
How to design an answer sheet
?answer_sheet=answers
elements_count=150
answers_count=5
columns_count=3
Once you have finished with the form structure and layout, you only need 3 lines of code to build a simple utility that generates a printable page from it:
How to generate a printable form
// Initialize Aspose.OMR engine
System::SharedPtr<Api::OmrEngine> engine = System::MakeObject<Api::OmrEngine>();
// Generate machine-readable form from the markup
System::SharedPtr<Generation::GenerationResult> result = engine->GenerateTemplate(u"template.txt");
// Save printable OMR form to an image file
result.Save("target", "omr-form");
Optical mark reader
With Aspose.OMR for C++, you can create a fully-functional programmatic optical mark reader in 5 lines of code. You can use your existing office copier or even a smartphone camera instead of an expensive OMR scanner. Respondents can fill out your forms with pen, pencil, or marker and use any types of marks.
How to recognize a completed form
// Initialize OMR engine
System::SharedPtr<Api::OmrEngine> engine = System::MakeObject<Api::OmrEngine>();
// Load recognition pattern file
System::SharedPtr<Api::TemplateProcessor> processor = engine->GetTemplateProcessor(u"omr-form.omr");
// Recognize completed survey
System::SharedPtr<Model::RecognitionResult> result = processor->RecognizeImage(u"IMG_20220401.jpg");
// Get results in CSV format
System::String resultCsv = result->GetCsv();