Layered OCR

jongoesboomjongoesboom Posts: 26 admin


Successful full-text OCR capture of pages containing both specialized print types (MICR, OCRA, handwriting, etc.) and "regular" font types (Arial, Times New Roman, etc.) that make up the majority of the document has been a common problem with OCR for years. This problem forced the development and implementation of expensive and specialized products like a2ia's CheckReader to be integrated into an overall solution. Grooper, too, originally offered no solution to this problem. When an OCR profile was run, the results from a single OCR profile were used. If another OCR profile was run later to pick up characters of a different font type, it would replace the results from the original profile used to capture the majority of the document.

Later releases of Grooper included an OCR "Engine" named Grooper Voting that could be configured within an OCR Profile. This would allow multiple OCR Profiles, and thus different OCR Engines, to be run against a single image, and the results would be synthesized together as one result. If only one of the referenced profiles found a character at a given location, it would always be kept. If multiple referenced profiles found a character in the same location, the engine would keep that character with the highest reported confidence while discarding all others that overlap. While this methodology provided some additional capabilities to obtain results from different engines, it wasn't feasible to cherry pick only certain results from each profile. This often resulted in extra, unnecessary text in the synthesized result and, in some cases, a poor engine selection for some segments of text.

Realizing even this OCR was in some situations far from perfect, later releases of Grooper included a dedicated Spell Correction activity. This could be performed after the Full-Text OCR activity, and could use Fuzzy Matching, Output Formats, and Translations as a way to make corrections to the raw OCR captured for a given page. But this forced an extra step in a process and did not provide designers with the flexibility to target only the text returned from specific OCR engines.


With Layered OCR in Grooper 2.72, you now have the ability to perform multi-engine OCR and targeted, engine-specific Spell Correction to capture OCR with as close to 100% accuracy on form background elements as possible. Layered OCR has replaced the legacy Grooper Voting and Grooper Multi-Engine OCR Engines seen in prior releases, as it can readily fulfill requirements met by the previous engines.

Layered OCR works by taking multiple OCR Profiles and "layers" them to produce a single full-text result. A main OCR Profile is run to establish the base results for the document. Then, one or more configured layers are run to obtain additional text. A layer is configured with an OCR Profile and an Extractor. A layer's OCR Profile can be the same as or different than that used for the Main OCR Profile. Any matches from the extractor are then merged into the output. While not necessary, this extractor can use some forms of fuzzy matching to facilitate real-time spell correction as well.

Use Case - Mixed Print Types

In the case of a handwritten check, you have 3 different types that you are looking for: the base machine printed type for the majority of the document, the MICR line at the bottom that contains the check information, and then any "legible" handwritten data on the check.

For this check, we have 3 different OCR Profiles being run:
  1. The main OCR Profile that reads all the "normal" text on the check.
  2. An OCR profile that is reading MICR and then matching an extractor for the MICR line at the bottom of the check.
  3. An OCR Profile that is looking for handwriting and matching extractors for dates and amounts.
Here is what the OCR looks like when run without Layered OCR.

And here is the same check with Layered OCR.

As you can see, the accuracy has greatly increased, simplifying data extraction and enabling the ability to generate searchable PDFs.
Sign In or Register to comment.