←Select platform

IOcrZoneCollection Interface

Summary
Contains the zones in this IOcrPage.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public interface IOcrZoneCollection : ICollection<OcrZone>, IEnumerable<OcrZone>, IEnumerable, IList<OcrZone> 
@interface LTOcrZoneCollection : NSObject<NSFastEnumeration> 
public class OcrZoneCollection implements List<OcrZone> 
public interface class IOcrZoneCollection : public System.Collections.Generic.ICollection<OcrZone>, System.Collections.Generic.IEnumerable<OcrZone>, System.Collections.Generic.IList<OcrZone>, System.Collections.IEnumerable   
class IOcrZoneCollection(ICollection): 
Remarks

IOcrZoneCollection holds the zones currently added into an OCR page. You can access the instance of the IOcrZoneCollection used by an IOcrPage through the IOcrPage.Zones property.

The IOcrZoneCollection interface implements standard .NET ICollection<T>, IList<T>, and IEnumerable<T> interfaces and hence, you can use the member of these interfaces to add, remove, get, set and iterate through the different zones in the page.

To work with the zones of the page, you can first call AutoZone. This will start the page layout decomposition process and the engine will fill the IOcrPage.Zones property with the different zones found. You can then examine or modify the different zones with the various IOcrZoneCollection properties. For example, use IOcrZoneCollection.Add to add a new zone and IOcrZoneCollection.Remove to remove a zone. You can use IOcrZoneCollection.Count to get the number of zones currently in the page.

To modify a zone, use IOcrZoneCollection.Item to get the OcrZone object you are interested in, modify the zone then set it back through IOcrZoneCollection.Item. Note that since OcrZone is a structure (value type), you must use the setter. The following code snippet illustrates how to change the zone type of the 4th zone in an ocrPage:

C#
// Remember, the index is zero-based, so 4th zone has an index of 3 
OcrZone zone = ocrPage.Zones[3]; 
 
// Prevent this zone from being recognized  
zone.ZoneType = OcrZoneType.Graphic;  
ocrPage.Zones[3] = zone; 

When adding or updating a zone, you should directly initialize the OcrZone.Bounds and the OcrZone.ZoneType properties of the zone, since they will not take on their default values.

You should not modify the OcrZone.Id property. When adding zones, leave this value to the default of 0.

The OcrZone.ZoneType property of the updating zone should be one of the following: OcrZoneType.Text, OcrZoneType.Table or OcrZoneType.Graphics.

The preferred method of updating a zone is as illustrated in the code snippet above, first get the zone you are interested in, update it and set it back into the collection.

It is your responsibility to specify a valid recognition module-filling method pair. Otherwise any incorrectly set zone will have no recognition result.

Calling AutoZone will clear the zones in the IOcrPage.Zones collection and fills it again with the zones found by the engine.

Example
C#
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Ocr; 
using Leadtools.Forms.Common; 
using Leadtools.Document.Writer; 
using Leadtools.WinForms; 
using Leadtools.Drawing; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
 
public void OcrAutoZoneExample() 
{ 
   // Create an image with some text in it 
   RasterImage image = new RasterImage(RasterMemoryFlags.Conventional, 320, 200, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, null, IntPtr.Zero, 0); 
   Rectangle imageRect = new Rectangle(0, 0, image.ImageWidth, image.ImageHeight); 
 
   IntPtr hdc = RasterImagePainter.CreateLeadDC(image); 
   using (Graphics g = Graphics.FromHdc(hdc)) 
   { 
      g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
      g.FillRectangle(Brushes.White, imageRect); 
 
      using (Font f = new Font("Arial", 20, FontStyle.Regular)) 
         g.DrawString("Normal line", f, Brushes.Black, 0, 0); 
 
      using (Font f = new Font("Courier New", 20, FontStyle.Regular)) 
         g.DrawString("Monospaced line", f, Brushes.Black, 0, 80); 
   } 
 
   RasterImagePainter.DeleteLeadDC(hdc); 
 
   string zonesFileName = Path.Combine(LEAD_VARS.ImagesDir, "MyZones.xml"); 
 
   // Create an instance of the engine 
   using (IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)) 
   { 
      // Start the engine using default parameters 
      ocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir); 
 
      // Create an OCR page 
      using (IOcrPage ocrPage = ocrEngine.CreatePage(image, OcrImageSharingMode.AutoDispose)) 
      { 
         // Show the zones, there should be no zones yet 
         ShowZones("Right after the page was created", ocrPage); 
 
         // Perform default AutoZoning on the page 
         ocrPage.AutoZone(null); 
 
         // Show the zones, there should be two zones, one for each line 
         ShowZones("AutoZone with default parameters", ocrPage); 
 
         // Update the first zone manually 
         OcrZone ocrZone = ocrPage.Zones[0]; 
         ocrZone.ZoneType = OcrZoneType.Text; 
         ocrPage.Zones[0] = ocrZone; 
 
         // Show the zones 
         ShowZones("After updating the type of the first zone", ocrPage); 
 
         // Save the zones to a file and then clear them 
         ocrPage.SaveZones(zonesFileName); 
         ocrPage.Zones.Clear(); 
 
         // Show the zones, there should be no zones since we just cleared them 
         ShowZones("After calling save and clear", ocrPage); 
 
         // Re-load the zones 
         ocrPage.LoadZones(zonesFileName); 
         ShowZones("After re-loading the zones", ocrPage); 
      } 
 
      // Shutdown the engine 
      // Note: calling Dispose will also automatically shutdown the engine if it has been started 
      ocrEngine.Shutdown(); 
   } 
} 
 
private void ShowZones(string message, IOcrPage ocrPage) 
{ 
   Console.WriteLine("Zones after {0}:", message); 
   foreach (OcrZone ocrZone in ocrPage.Zones) 
   { 
      int index = ocrPage.Zones.IndexOf(ocrZone); 
      Console.WriteLine("Zone index: {0}", index); 
      Console.WriteLine("  Id                  {0}", ocrZone.Id); 
      Console.WriteLine("  Bounds              {0}", ocrZone.Bounds); 
      Console.WriteLine("  ZoneType            {0}", ocrZone.ZoneType); 
      Console.WriteLine("  CharacterFilters:   {0}", ocrZone.CharacterFilters); 
      Console.WriteLine("----------------------------------"); 
   } 
 
   Console.WriteLine("Hit enter to continue"); 
   //Console.ReadLine(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
   public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS23\Bin\Common\OcrLEADRuntime"; 
} 
Requirements

Target Platforms

Help Version 23.0.2024.4.19
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Ocr Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.