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:
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, browse to the "C:\LEADTOOLS 19\Bin\Dotnet4\Win32" folder and select the following DLLs:
Add the following lines at the top of the Form1.cs/Form1.vb file:
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms;
using Leadtools.Forms.Ocr;
using Leadtools.Forms.Recognition;
using Leadtools.Forms.Recognition.Ocr;
using System.IO;
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:
//Create the recognition engine
FormRecognitionEngine recognitionEngine = new FormRecognitionEngine();
RasterCodecs codecs;
//Create the OCR Engine to use in the recognition
IOcrEngine formsOCREngine;
'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()):
try
{
string MY_LICENSE_FILE = "d:\\temp\\TestLic.lic";
// Unlock the Forms support
string MY_FORMSDEVELOPER_KEY = "xyz123abc";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_FORMSDEVELOPER_KEY);
// Unlock the OCR Advantage support
string MY_OCRPLSDEVELOPER_KEY = "abc123xyz";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_OCRPLSDEVELOPER_KEY);
// Unlock the Document support
string MY_DOCDEVELOPER_KEY = "123xyzabc";
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_DOCDEVELOPER_KEY);
codecs = new RasterCodecs();
//Create a LEADTOOLS OCR Advantage Engine and start it
formsOCREngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false);
formsOCREngine.Startup(codecs, null, null, @"C:\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime");
//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);
}
Try
Dim MY_LICENSE_FILE As String = "d:\temp\TestLic.lic"
' Unlock the Forms support
Dim MY_FORMSDEVELOPER_KEY As String = "xyz123abc"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_FORMSDEVELOPER_KEY)
' Unlock the OCR Advantage support
Dim MY_OCRPLSDEVELOPER_KEY As String = "abc123xyz"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_OCRPLSDEVELOPER_KEY)
' Unlock the Document support
Dim MY_DOCDEVELOPER_KEY As String = "123xyzabc"
RasterSupport.SetLicense(MY_LICENSE_FILE, MY_DOCDEVELOPER_KEY)
codecs = New RasterCodecs()
'Create a LEADTOOLS OCR Advantage OCR Engine and start it
formsOCREngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, False)
formsOCREngine.Startup(codecs, Nothing, Nothing, "C:\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime")
'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:
try
{
//Get master form filenames
//You may need to update the below path to point to the "Leadtools Images\Forms\MasterForm Sets\OCR" directory.
string [] masterFileNames = Directory.GetFiles(@"C:\Users\Public\Documents\LEADTOOLS Images\Forms\MasterForm Sets\OCR",
"*.tif",
SearchOption.AllDirectories);
foreach (string masterFileName in masterFileNames)
{
string formName = Path.GetFileNameWithoutExtension(masterFileName);
//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);
}
Try
'Get master form filenames
'You may need to update the below path to point to the "Leadtools Images\Forms\MasterForm Sets\OCR" directory.
Dim masterFileNames As String() = Directory.GetFiles("C:\Users\Public\Documents\LEADTOOLS Images\Forms\MasterForm Sets\OCR",
"*.tif",
SearchOption.AllDirectories)
For Each masterFileName As String In masterFileNames
Dim formName As String = Path.GetFileNameWithoutExtension(masterFileName)
'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:
try
{
//For this tutorial, we will use the sample W9 sample filled form.
//You may need to update the below path to point to "\LEADTOOLS Images\Forms\Forms to be Recognized\OCR\W9_OCR_Filled.tif".
string formToRecognize = @"C:\Users\Public\Documents\LEADTOOLS Images\Forms\Forms to be Recognized\OCR\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 >= 80)
{
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);
}
Try
'For this tutorial, we will use the sample W9 sample filled form.
'You may need to update the below path to point to "\LEADTOOLS Images\Forms\Forms to be Recognized\OCR\W9_OCR_Filled.tif".
Dim formToRecognize As String = "C:\Users\Public\Documents\LEADTOOLS Images\Forms\Forms to be Recognized\OCR\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 >= 80 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:
if (formsOCREngine != null && formsOCREngine.IsStarted)
formsOCREngine.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. NOTE: If you encounter an "Invalid File Format" or "Feature Not Supported" exception, please refer to the topic Invalid File Format/Feature Not Supported.