LEADTOOLS For .NET Class Library Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.28
Recognize And Process A Form
FormsTutorials

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 and process a form using LEADTOOLS High Level Forms Interface:

  1. Start Visual Studio .NET.
  2. Choose File->New->Project... from the menu.
  3. 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.
  4. Type the project name as "Recognizing and Process a Form (High Level)" 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.
  5. 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.Auto
                using System.IO; 
                
    

    [Visual Basic]

                Imports Leadtools
                Imports Leadtools.Codecs
                Imports Leadtools.Forms
                Imports Leadtools.Forms.Ocr Imports
                Leadtools.Forms.Recognition
                Imports Leadtools.Forms.Auto
                Imports System.IO
                
    
  6. Add the following members to the Form1 class:

    [C#]

                //Create the Auto Forms Engine
                AutoFormsEngine autoEngine;
                RasterCodecs formsCodec;
                //Create a collection of OCR Engines
                List<IOcrEngine> ocrEngines;
                //Create the repository of master forms
                DiskMasterFormsRepository formsRepository
                string myDocumentsDir;
                
    

    [Visual Basic]

                'Create the Auto Forms Engine
                Dim autoEngine As AutoFormsEngine
                Dim formsCodec As RasterCodecs
                'Create a collection of OCR Engines
                Dim ocrEngines As List(Of IOcrEngine)
                  'Create the repository of master forms
                Dim formsRepository As DiskMasterFormsRepository
                Dim myDocumentsDir As String 
                
    
  7. 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.Forms, "Enter valid key here");
                    RasterSupport.Unlock(RasterSupportType.Document, "Enter valid key here");
                
                    formsCodec = new RasterCodecs();
                 
                //Create an OCR Engine for each processor on the machine. This 
                //allows for optimal use of thread during recognition and processing.
                    ocrEngines = new List<IOcrEngine>();
                        for (int i = 0; i < 1; i++)
                        {
                            ocrEngines.Add(OcrEngineManager.CreateEngine(OcrEngineType.Plus, false));
                            ocrEngines[i].Startup(null,null,null,null);
                        }
                    myDocumentsDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                
                 //Point repository to directory with existing master forms 
                    formsRepository = new DiskMasterFormsRepository(formsCodec, Path.Combine(myDocumentsDir, @"LEADTOOLS Images\Forms\MasterForm Sets\OCR"));
                    autoEngine = new AutoFormsEngine(formsRepository, ocrEngines, null, AutoFormsRecognitionManager.Default | AutoFormsRecognitionManager.Ocr, 30, 80, true);           
                 } 
                 catch (Exception ex) 
                 { 
                    MessageBox.Show(ex.Message); 
                 } 
                
    

    [Visual Basic]

                   Try
                    RasterSupport.Unlock(RasterSupportType.OcrPlus, "Enter valid key here")
                    RasterSupport.Unlock(RasterSupportType.Forms, "Enter valid key here")
                    RasterSupport.Unlock(RasterSupportType.Document, "Enter valid key here")
                 
                    formsCodec = New RasterCodecs()
                  
                  'Create an OCR Engine for each processor on the machine. This 
                  'allows for optimal use of thread during recognition and processing.
                    ocrEngines = New List(Of IOcrEngine)()
                    For i As Integer = 0 To 0
                     ocrEngines.Add(OcrEngineManager.CreateEngine(OcrEngineType.Plus, False))
                     ocrEngines(i).Startup(Nothing,Nothing,Nothing,Nothing)
                    Next i
                  myDocumentsDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
                  
                 'Point repository to directory with existing master forms 
                  formsRepository = New DiskMasterFormsRepository(formsCodec, Path.Combine(myDocumentsDir, "LEADTOOLS Images\Forms\MasterForm Sets\OCR"))
                  autoEngine = New AutoFormsEngine(formsRepository, ocrEngines, Nothing, AutoFormsRecognitionManager.Default Or AutoFormsRecognitionManager.Ocr, 30, 80, True)
                
                  Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
                            
    
  8. LEADTOOLS ships several sample master and filled forms 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 "Recognize and Process 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.
                   string resultMessage = "Form not recognized";
                   string formToRecognize = Path.Combine(myDocumentsDir, @"LEADTOOLS Images\Forms\Images\W9_OCR_Filled.tif");
                
                    //Run the recognition and processing
                   AutoFormsRunResult runResult = autoEngine.Run(formToRecognize, null);
                   if (runResult != null)
                   {
                      FormRecognitionResult recognitionResult = runResult.RecognitionResult.Result;
                      resultMessage = String.Format("This form has been recognized as a {0} with {1} confidence.", runResult.RecognitionResult.MasterForm.Name, recognitionResult.Confidence);
                   }
                
                   MessageBox.Show(resultMessage, "Recognition Results");
                   ShowProcessedResults(runResult);  
                }
                
                catch (Exception ex)
                {
                      MessageBox.Show(ex.Message);
                }
                                
    

    [Visual Basic]

                 Try
                   'For this tutorial, we will use the sample W9 sample filled form.
                   Dim resultMessage As String = "Form not recognized"
                   Dim formToRecognize As String = Path.Combine(myDocumentsDir, "LEADTOOLS Images\Forms\Images\W9_OCR_Filled.tif")
                
                   'Run the recognition and processing
                   Dim runResult As AutoFormsRunResult = autoEngine.Run(formToRecognize, Nothing)
                
                   If Not runResult Is Nothing Then
                      Dim recognitionResult As FormRecognitionResult = runResult.RecognitionResult.Result
                      resultMessage = String.Format("This form has been recognized as a {0} with {1} confidence.", runResult.RecognitionResult.MasterForm.Name, recognitionResult.Confidence)
                   End If
                
                   MessageBox.Show(resultMessage, "Recognition Results")
                   ShowProcessedResults(runResult)
                
                 Catch ex As Exception
                   MessageBox.Show(ex.Message)
                End Try
                                
    
  9. Add the following function to the class:

    [C#]

                private void ShowProcessedResults(AutoFormsRunResult runResult)
                {
                         if (runResult == null)
                            return;
                
                         string resultsMessage = String.Empty;
                         try
                     {
                            foreach (FormPage formPage in runResult.FormFields)
                       {
                               foreach (FormField field in formPage)
                         {
                                  if (field != null)
                           {
                                     resultsMessage = String.Format("{0}{1} = {2}{3}",
                                                                       resultsMessage,
                                                                           field.Name,
                                           (field.Result as TextFormFieldResult).Text,
                                                                  Environment.NewLine);
                           }
                          }
                         }
                        }
                         catch (Exception ex)
                         {
                            MessageBox.Show(ex.Message);
                         }
                         if (String.IsNullOrEmpty(resultsMessage))
                            MessageBox.Show("No fields were processed", "Field ProcessingResults");
                         else
                            MessageBox.Show(resultsMessage, "Field ProcessingResults");
                 } 
                                
    

    [Visual Basic]

                Private Sub ShowProcessedResults(ByVal runResult As AutoFormsRunResult)
                   If runResult Is Nothing Then
                      Return
                   End If
                
                   Dim resultsMessage As String = String.Empty
                   Try
                      For Each formPage As FormPage In runResult.FormFields
                         For Each field As FormField In formPage
                            If Not field Is Nothing Then
                               resultsMessage = String.Format("{0}{1} = {2}{3}", resultsMessage, field.Name, (CType(IIf(TypeOf field.Result Is TextFormFieldResult, field.Result, Nothing), TextFormFieldResult)).Text, Environment.NewLine)
                            End If
                
                         Next field
                      Next formPage
                   Catch ex As Exception
                      MessageBox.Show(ex.Message)
                   End Try
                
                   If String.IsNullOrEmpty(resultsMessage) Then
                      MessageBox.Show("No fields were processed", "Field ProcessingResults")
                   Else
                      MessageBox.Show(resultsMessage, "Field ProcessingResults")
                   End If
                End Sub
                                
    
  10. Add the following clean-up code to the FormClosing event handler:

    [C#]

                    autoEngine.Dispose();
                    foreach (IOcrEngine ocrEngine in ocrEngines)
                    {
                        if (ocrEngine != null && ocrEngine.IsStarted)
                        ocrEngine.Shutdown();
                    }
                                
    

    [Visual Basic]

                 autoEngine.Dispose()
                 For Each ocrEngine As IOcrEngine In ocrEngines
                    If Not ocrEngine Is Nothing AndAlso ocrEngine.IsStarted Then
                       ocrEngine.Shutdown()
                    End If
                 Next ocrEngine
                                
    
  11. Run the project and test it. Click the "Recognize and Process Form" button which will load a sample form image, recognize and process it, and display the results.