Take the following steps to start a project and to add some code that creates a set of master forms and uses them to recognize a filled form:
- Start Visual Studio .NET.
- Choose File->New->Project... from the menu.
- In the New Project dialog box, choose either "Visual C# Projects" or "Visual Basic Projects" in the Projects Type List, and choose "Windows Application" in the Templates List.
- Type the project name as "Recognizing A Form" in the Project Name field, and then choose OK. If desired, type a new location for your project or select a directory using the Browse button, and then choose OK.
- In the "Solution Explorer" window, right-click on the "References" folder, and select "Add Reference…" from the context menu. In the Add Reference dialog box, select the ".NET" tab and browse to Leadtools For .NET "Program Files (x86)\LEAD Technologies\LEADTOOLS 16.5\Bin\DotNet\Win32" folder and select the following DLLs:
- Leadtools.dll
- Leadtools.Codecs.dll
- Leadtools.Codecs.Fax.dll
- Leadtools.Codecs.Tif.dll
- Leadtools.Forms.dll
- Leadtools.Forms.DocumentWriters.dll
- Leadtools.Forms.Ocr.dll
- Leadtools.Forms.Ocr.Plus.dll
- Leadtools.Forms.Recognition.dll
- Leadtools.Forms.Recognition.Ocr.dll
- Add the following lines at the top of the Form1.cs/Form1.vb file:
[C#]
using Leadtools; using Leadtools.Codecs; using Leadtools.Forms; using Leadtools.Forms.Ocr; using Leadtools.Forms.Recognition; using Leadtools.Forms.Recognition.Ocr; using System.IO;
[Visual Basic]
Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.Forms Imports Leadtools.Forms.Ocr Imports Leadtools.Forms.Recognition Imports Leadtools.Forms.Recognition.Ocr Imports System.IO
-
Add the following members to the Form1 class:
[C#]
//Create the recognition engine FormRecognitionEngine recognitionEngine = new FormRecognitionEngine(); RasterCodecs codecs; //Create the OCR Engine to use in the recognition IOcrEngine formsOCREngine;
[Visual Basic]
'Create the recognition engine Dim recognitionEngine As FormRecognitionEngine = New FormRecognitionEngine() Dim codecs As RasterCodecs 'Create the OCR Engine to use in the recognition Dim formsOCREngine As IOcrEngine
-
Add the following code to the Load event of the form (Form1_Load()):
[C#]
try { RasterSupport.Unlock(RasterSupportType.OcrPlus, "Enter valid key here"); RasterSupport.Unlock(RasterSupportType.Document, "Enter valid key here"); RasterCodecs.Startup(); codecs = new RasterCodecs(); //Create a LEADTOOLS OCR Plus OCR Engine and start it formsOCREngine = OcrEngineManager.CreateEngine(OcrEngineType.Plus, false); formsOCREngine.Startup(codecs, null, null, null); //Add an OCRObjectManager to the recognition engines //ObjectManager collection OcrObjectsManager ocrObjectsManager = new OcrObjectsManager(formsOCREngine); ocrObjectsManager.Engine = formsOCREngine; recognitionEngine.ObjectsManagers.Add(ocrObjectsManager); } catch (Exception ex) { MessageBox.Show(ex.Message); }
[Visual Basic]
Try RasterSupport.Unlock(RasterSupportType.OcrPlus, "Enter valid key here") RasterSupport.Unlock(RasterSupportType.Document, "Enter valid key here") RasterCodecs.Startup() codecs = New RasterCodecs() 'Create a LEADTOOLS OCR Plus OCR Engine and start it formsOCREngine = OcrEngineManager.CreateEngine(OcrEngineType.Plus, False) formsOCREngine.Startup(codecs, Nothing, Nothing, Nothing) 'Add an OCRObjectManager to the recognition engines 'ObjectManager collection Dim ocrObjectsManager As OcrObjectsManager = New OcrObjectsManager(formsOCREngine) ocrObjectsManager.Engine = formsOCREngine recognitionEngine.ObjectsManagers.Add(ocrObjectsManager) Catch ex As Exception MessageBox.Show(ex.Message) End Try
-
LEADTOOLS ships several master form images which we will use for this tutorial.
The path to the images is hard-coded to the default install location so if you chose another path,
you will need to change it accordingly. Add a button to the form and set its Text property to
"Create Master Form Attributes" then double-click it and add the following code to its handler:
[C#]
try { //Get master form filenames //You should update the below path to point to the "Leadtools Images\Forms\MasterForm Sets\OCR" directory. string [] masterFileNames = Directory.GetFiles("Update this path", "*.tif", SearchOption.AllDirectories); foreach (string masterFileName in masterFileNames) { //We will use the directory name for the forms name int idxLastSlash = Path.GetDirectoryName(masterFileName).LastIndexOf(@"\"); string formName = Path.GetDirectoryName(masterFileName).Substring(idxLastSlash + 1); //Load the master form image RasterImage image = codecs.Load(masterFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, -1); //Create a new master form FormRecognitionAttributes masterFormAttributes = recognitionEngine.CreateMasterForm(formName, Guid.Empty, null); for (int i = 0; i < image.PageCount; i++) { image.Page = i + 1; //Add the master form page to the recognition engine recognitionEngine.AddMasterFormPage(masterFormAttributes, image, null); } //Close the master form and save it's attributes recognitionEngine.CloseMasterForm(masterFormAttributes); File.WriteAllBytes(formName + ".bin", masterFormAttributes.GetData()); } MessageBox.Show("Master Form Processing Complete", "Complete"); } catch(Exception ex) { MessageBox.Show(ex.Message); }
[Visual Basic]
Try 'Get master form filenames 'You should update the below path to point to the "Leadtools Images\Forms\MasterForm Sets\OCR" directory. Dim masterFileNames As String() = Directory.GetFiles("Update this path", "*.tif", SearchOption.AllDirectories) For Each masterFileName As String In masterFileNames 'We will use the directory name for the forms name Dim idxLastSlash As Integer = Path.GetDirectoryName(masterFileName).LastIndexOf("\") Dim formName As String = Path.GetDirectoryName(masterFileName).Substring(idxLastSlash + 1) 'Load the master form image Dim image As RasterImage = codecs.Load(masterFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, -1) 'Create a new master form Dim masterFormAttributes As FormRecognitionAttributes = recognitionEngine.CreateMasterForm(formName, Guid.Empty, Nothing) Dim i As Integer = 0 Do While i < image.PageCount image.Page = i + 1 'Add the master form page to the recognition engine recognitionEngine.AddMasterFormPage(masterFormAttributes, image, Nothing) i += 1 Loop 'Close the master form and save it's attributes recognitionEngine.CloseMasterForm(masterFormAttributes) File.WriteAllBytes(formName & ".bin", masterFormAttributes.GetData()) Next masterFileName MessageBox.Show("Master Form Processing Complete", "Complete") Catch ex As Exception MessageBox.Show(ex.Message) End Try
-
LEADTOOLS ships several filled form images for each master form which we will use for this tutorial.
Add a button to the form and set its Text property to "Recognize Form", then double-click it and add
the following code to its handler:
[C#]
try { //For this tutorial, we will use the sample W9 sample filled form. //You should update the below path to point to "\LEADTOOLS Images\Forms\Images\W9_OCR_Filled.tif". string formToRecognize = "W9_OCR_Filled.tif"; RasterImage image = codecs.Load(formToRecognize, 0, CodecsLoadByteOrder.BgrOrGray, 1, -1); //Load the image to recognize FormRecognitionAttributes filledFormAttributes = recognitionEngine.CreateForm(null); for (int i = 0; i < image.PageCount; i++) { image.Page = i + 1; //Add each page of the filled form to the recognition engine recognitionEngine.AddFormPage(filledFormAttributes, image, null); } recognitionEngine.CloseForm(filledFormAttributes); string resultMessage = "The form could not be recognized"; //Compare the attributes of each master form to the attributes of the filled form string[] masterFileNames = Directory.GetFiles(Application.StartupPath, "*.bin"); foreach (string masterFileName in masterFileNames) { FormRecognitionAttributes masterFormAttributes = new FormRecognitionAttributes(); masterFormAttributes.SetData(File.ReadAllBytes(masterFileName)); FormRecognitionResult recognitionResult = recognitionEngine.CompareForm(masterFormAttributes, filledFormAttributes, null); //In this example, we consider a confidence equal to or greater //than 90 to be a match if(recognitionResult.Confidence >= 90) { resultMessage = String.Format("This form has been recognized as a {0}", Path.GetFileNameWithoutExtension(masterFileName)); break; } } MessageBox.Show(resultMessage, "Recognition Results"); } catch (Exception ex) { MessageBox.Show(ex.Message); }
[Visual Basic]
Try 'For this tutorial, we will use the sample W9 sample filled form. 'You should update the below path to point to "\LEADTOOLS Images\Forms\Images\W9_OCR_Filled.tif". Dim formToRecognize As String = "W9_OCR_Filled.tif" Dim image As RasterImage = codecs.Load(formToRecognize, 0, CodecsLoadByteOrder.BgrOrGray, 1, -1) 'Load the image to recognize Dim filledFormAttributes As FormRecognitionAttributes = recognitionEngine.CreateForm(Nothing) Dim i As Integer = 0 Do While i < image.PageCount image.Page = i + 1 'Add each page of the filled form to the recognition engine recognitionEngine.AddFormPage(filledFormAttributes, image, Nothing) i += 1 Loop recognitionEngine.CloseForm(filledFormAttributes) Dim resultMessage As String = "The form could not be recognized" 'Compare the attributes of each master form to the attributes of the filled form Dim masterFileNames As String() = Directory.GetFiles(Application.StartupPath, "*.bin") For Each masterFileName As String In masterFileNames Dim masterFormAttributes As FormRecognitionAttributes = New FormRecognitionAttributes() masterFormAttributes.SetData(File.ReadAllBytes(masterFileName)) Dim recognitionResult As FormRecognitionResult = recognitionEngine.CompareForm(masterFormAttributes, filledFormAttributes, Nothing) 'In this example, we consider a confidence equal to or greater than 90 to be a match If recognitionResult.Confidence >= 90 Then resultMessage = String.Format("This form has been recognized as a {0}", Path.GetFileNameWithoutExtension(masterFileName)) Exit For End If Next masterFileName MessageBox.Show(resultMessage, "Recognition Results") Catch ex As Exception MessageBox.Show(ex.Message) End Try
-
Add the below clean-up code to the FormClosing event handler:
[C#]
RasterCodecs.Shutdown(); if (formsOCREngine != null && formsOCREngine.IsStarted) formsOCREngine.Shutdown();
[Visual Basic]
RasterCodecs.Shutdown() If Not formsOCREngine Is Nothing AndAlso formsOCREngine.IsStarted Then formsOCREngine.Shutdown() End If
- Run the project and test it. Click the "Create Master Form Attributes" button first which will enumerate all master form images in the directory and save each of their attributes to the application directory. Next, click the "Recognize Form" button which will load a sample form image, generate its attributes, compare them to each master forms attributes, and display the results.