Public Sub RecognizeTextExample()
' Get the form file name
Console.WriteLine("Setting up the form...")
Dim formFileName As String = GetMyForm()
' Assume we get the field informations from an external source such as a database or an XML file
Dim fieldNames() As String = _
{ _
"Name", _
"Address", _
"SSN" _
}
Dim fieldBounds() As LogicalRectangle = _
{ _
New LogicalRectangle(800, 160, 1500, 220, LogicalUnit.Pixel), _
New LogicalRectangle(800, 560, 1500, 220, LogicalUnit.Pixel), _
New LogicalRectangle(800, 960, 1500, 220, LogicalUnit.Pixel) _
}
Dim fieldCount As Integer = fieldNames.Length
Dim fieldValues(fieldCount - 1) As String
' Create an instance of the engine
Using ocrEngine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Plus, False)
' Start the engine using default parameters
Console.WriteLine("Starting up the engine...")
ocrEngine.Startup(Nothing, Nothing, Nothing, Nothing)
' Create an OCR document
Dim ocrDocumentManager As IOcrDocumentManager = ocrEngine.DocumentManager
Using ocrDocument As IOcrDocument = ocrDocumentManager.CreateDocument()
' Add the form to the document
Console.WriteLine("Adding the form to the document...")
Dim ocrPage As IOcrPage = ocrDocument.Pages.AddPage(formFileName, Nothing)
' Get our fields
For i As Integer = 0 To fieldCount - 1
' Clear all the zones in the page
ocrPage.Zones.Clear()
' Add our field zone
Dim ocrZone As New OcrZone()
ocrZone.ZoneType = OcrZoneType.Text
ocrZone.Bounds = fieldBounds(i)
ocrZone.Name = fieldNames(i) ' Optional
Console.WriteLine("Adding the zone for field {0} to the page...", ocrZone.Name)
ocrPage.Zones.Add(ocrZone)
' Recognize the page. This will only recognize the zone we added
Console.WriteLine("Recognizing the page...")
fieldValues(i) = ocrPage.RecognizeText(Nothing)
Next
End Using
' Shutdown the engine
' Note: calling Dispose will also automatically shutdown the engine if it has been started
Console.WriteLine("Shutting down...")
ocrEngine.Shutdown()
End Using
' We are done, show the fields
Console.WriteLine("-------------------------------------")
Console.WriteLine("Done, values extracted from the form:")
Console.WriteLine("-------------------------------------")
For i As Integer = 0 To fieldCount - 1
Console.WriteLine("{0} : {1}", fieldNames(i), fieldValues(i))
Next
End Sub
Private Function GetMyForm() As String
Dim formFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "MyForm.tif")
' In this example we will create the form every time
' This will be a TIF file 11 by 8.5 inches in size containing a name, address and social security fields
Using image As RasterImage = New RasterImage( _
RasterMemoryFlags.Conventional, _
2544, _
3294, _
24, _
RasterByteOrder.Bgr, _
RasterViewPerspective.BottomLeft, _
Nothing, _
IntPtr.Zero, _
0)
image.XResolution = 300
image.YResolution = 300
' Draw our fields into this image
Dim hdc As IntPtr = RasterImagePainter.CreateLeadDC(image)
Try
Using g As Graphics = Graphics.FromHdc(hdc)
g.FillRectangle(Brushes.White, 0, 0, image.ImageWidth - 1, image.ImageHeight - 1)
Using f As New Font("Times New Roman", 80, FontStyle.Regular)
Using p As New Pen(Color.Black, 4)
Using sf As New StringFormat()
sf.LineAlignment = StringAlignment.Center
' Draw the fields
' Name
g.DrawString("Name:", f, Brushes.Black, 200, 200)
Dim rc As New Rectangle(800, 160, 1500, 220)
g.DrawRectangle(p, rc)
Dim value As String = "John Doe"
g.DrawString(value, f, Brushes.Black, rc, sf)
' Address
g.DrawString("Address:", f, Brushes.Black, 200, 600)
rc = New Rectangle(800, 560, 1500, 220)
g.DrawRectangle(p, rc)
value = "1234 Main Street, USA"
g.DrawString(value, f, Brushes.Black, rc, sf)
' Social security number
g.DrawString("SSN:", f, Brushes.Black, 200, 1000)
rc = New Rectangle(800, 960, 1500, 220)
g.DrawRectangle(p, rc)
value = "123-45-6789"
g.DrawString(value, f, Brushes.Black, rc, sf)
End Using
End Using
End Using
End Using
Finally
RasterImagePainter.DeleteLeadDC(hdc)
End Try
' Save this image to disk
Using codecs As New RasterCodecs()
codecs.Save(image, formFileName, RasterImageFormat.CcittGroup4, 1)
End Using
End Using
Return formFileName
End Function
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
public void RecognizeTextExample()
{
// Get the form file name
Console.WriteLine("Setting up the form...");
string formFileName = GetMyForm();
// Assume we get the field informations from an external source such as a database or an XML file
string[] fieldNames =
{
"Name",
"Address",
"SSN"
};
LogicalRectangle[] fieldBounds =
{
new LogicalRectangle(800, 160, 1500, 220, LogicalUnit.Pixel),
new LogicalRectangle(800, 560, 1500, 220, LogicalUnit.Pixel),
new LogicalRectangle(800, 960, 1500, 220, LogicalUnit.Pixel)
};
int fieldCount = fieldNames.Length;
string[] fieldValues = new string[fieldCount];
// Create an instance of the engine
using(IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Plus, false))
{
// Start the engine using default parameters
Console.WriteLine("Starting up the engine...");
ocrEngine.Startup(null, null, null, null);
// Create a document
IOcrDocumentManager ocrDocumentManager = ocrEngine.DocumentManager;
using(IOcrDocument ocrDocument = ocrDocumentManager.CreateDocument())
{
// Add the form to the document
Console.WriteLine("Adding the form to the document...");
IOcrPage ocrPage = ocrDocument.Pages.AddPage(formFileName, null);
// Get our fields
for(int i = 0; i < fieldCount; i++)
{
// Clear all the zones in the page
ocrPage.Zones.Clear();
// Add our field zone
OcrZone ocrZone = new OcrZone();
ocrZone.ZoneType = OcrZoneType.Text;
ocrZone.Bounds = fieldBounds[i];
ocrZone.Name = fieldNames[i]; // Optional
Console.WriteLine("Adding the zone for field {0} to the page...", ocrZone.Name);
ocrPage.Zones.Add(ocrZone);
// Recognize the page. This will only recognize the zone we added
Console.WriteLine("Recognizing the page...");
fieldValues[i] = ocrPage.RecognizeText(null);
}
}
// Shutdown the engine
// Note: calling Dispose will also automatically shutdown the engine if it has been started
Console.WriteLine("Shutting down...");
ocrEngine.Shutdown();
}
// We are done, show the fields
Console.WriteLine("-------------------------------------");
Console.WriteLine("Done, values extracted from the form:");
Console.WriteLine("-------------------------------------");
for(int i =0; i < fieldCount; i++)
Console.WriteLine("{0} : {1}", fieldNames[i], fieldValues[i]);
}
private string GetMyForm()
{
string formFileName = LEAD_VARS.ImagesDir + "MyForm.tif";
// In this example we will create the form every time
// This will be a TIF file 11 by 8.5 inches in size containing a name, address and social security fields
using(RasterImage image = new RasterImage(
RasterMemoryFlags.Conventional,
2544,
3294,
24,
RasterByteOrder.Bgr,
RasterViewPerspective.BottomLeft,
null,
IntPtr.Zero,
0))
{
image.XResolution = 300;
image.YResolution = 300;
// Draw our fields into this image
IntPtr hdc = RasterImagePainter.CreateLeadDC(image);
try
{
using(Graphics g = Graphics.FromHdc(hdc))
{
g.FillRectangle(Brushes.White, 0, 0, image.ImageWidth - 1, image.ImageHeight - 1);
using(Font f = new Font("Times New Roman", 80, FontStyle.Regular))
{
using(Pen p = new Pen(Color.Black, 4))
{
using(StringFormat sf = new StringFormat())
{
sf.LineAlignment = StringAlignment.Center;
// Draw the fields
// Name
g.DrawString("Name:", f, Brushes.Black, 200, 200);
Rectangle rc = new Rectangle(800, 160, 1500, 220);
g.DrawRectangle(p, rc);
string value = "John Doe";
g.DrawString(value, f, Brushes.Black, rc, sf);
// Address
g.DrawString("Address:", f, Brushes.Black, 200, 600);
rc = new Rectangle(800, 560, 1500, 220);
g.DrawRectangle(p, rc);
value = "1234 Main Street, USA";
g.DrawString(value, f, Brushes.Black, rc, sf);
// Social security number
g.DrawString("SSN:", f, Brushes.Black, 200, 1000);
rc = new Rectangle(800, 960, 1500, 220);
g.DrawRectangle(p, rc);
value = "123-45-6789";
g.DrawString(value, f, Brushes.Black, rc, sf);
}
}
}
}
}
finally
{
RasterImagePainter.DeleteLeadDC(hdc);
}
// Save this image to disk
using(RasterCodecs codecs = new RasterCodecs())
{
codecs.Save(image, formFileName, RasterImageFormat.CcittGroup4, 1);
}
}
return formFileName;
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
[TestMethod]
public async Task RecognizeTextExample()
{
// Get the form file name
Debug.WriteLine("Setting up the form...");
string formFileName = @"Assets\MyForm.tif";
// Assume we get the field informations from an external source such as a database or an XML file
string[] fieldNames =
{
"Name",
"Address",
"SSN"
};
LeadRect[] fieldBounds =
{
LeadRectHelper.Create(800, 160, 1500, 220),
LeadRectHelper.Create(800, 560, 1500, 220),
LeadRectHelper.Create(800, 960, 1500, 220)
};
int fieldCount = fieldNames.Length;
string[] fieldValues = new string[fieldCount];
// Create an instance of the engine
IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false);
// Start the engine using default parameters
Debug.WriteLine("Starting up the engine...");
ocrEngine.Startup(null, null, String.Empty, Tools.OcrEnginePath);
// Create a document
IOcrDocumentManager ocrDocumentManager = ocrEngine.DocumentManager;
IOcrDocument ocrDocument = ocrDocumentManager.CreateDocument();
// Load the form image
using (RasterCodecs codecs = new RasterCodecs())
{
StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(formFileName);
using (RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)))
{
// Add the form to the document
Debug.WriteLine("Adding the form to the document...");
IOcrPage ocrPage = ocrDocument.Pages.AddPage(image, null);
// Get our fields
for (int i = 0; i < fieldCount; i++)
{
// Clear all the zones in the page
ocrPage.Zones.Clear();
// Add our field zone
OcrZone ocrZone = new OcrZone();
ocrZone.ZoneType = OcrZoneType.Text;
ocrZone.Bounds = fieldBounds[i];
ocrZone.Name = fieldNames[i]; // Optional
Debug.WriteLine("Adding the zone for field {0} to the page...", ocrZone.Name);
ocrPage.Zones.Add(ocrZone);
// Recognize the page. This will only recognize the zone we added
Debug.WriteLine("Recognizing the page...");
fieldValues[i] = ocrPage.RecognizeText(null);
}
}
}
// Shutdown the engine
Debug.WriteLine("Shutting down...");
ocrEngine.Shutdown();
// We are done, show the fields
Debug.WriteLine("-------------------------------------");
Debug.WriteLine("Done, values extracted from the form:");
Debug.WriteLine("-------------------------------------");
for(int i =0; i < fieldCount; i++)
Debug.WriteLine("{0} : {1}", fieldNames[i], fieldValues[i]);
}