LEADTOOLS OCR(Leadtools.Forms.Ocrアセンブリ)

フレームを表示

AutoZoneメソッド(IOcrPage)








操作の進捗を示すオプションのコールバック
事前定義指標を用いてテキストとグラフィクスゾーンを見つけるために、ページの自動分解を実行します
構文
void AutoZone( 
   OcrProgressCallback callback
)
'Declaration
 
Sub AutoZone( _
   ByVal callback As OcrProgressCallback _
) 
'Usage
 
Dim instance As IOcrPage
Dim callback As OcrProgressCallback
 
instance.AutoZone(callback)
void AutoZone( 
   OcrProgressCallback callback
)
- (BOOL)autoZone:(nullable LTOcrProgressHandler)progressHandlererror:(NSError **)error
public void autoZone(OcrProgressListener callback)
function Leadtools.Forms.Ocr.IOcrPage.AutoZone( 
   callback 
)
void AutoZone( 
   OcrProgressCallback^ callback
) 

パラメーター

コールバック
操作の進捗を示すオプションのコールバック
解説

操作進捗を示すか、それを中止するために、OcrProgressCallbackを使うことができます。詳細情報とサンプルについては、「OcrProgressCallback」を参照してください。

このメソッドによって見つけられるゾーンは、このページのZonesコレクションに追加されます。任意の以前に更なるゾーンは、最初にZonesから削除されます。

このメソッドは、ゾーン座標(常にLogicalUnit.Pixelsの単位を持っているOcrZone.Bounds)と型(OcrZone.ZoneType)を見つけます。ゾーンの型は、ページレイアウトでのその役割を決定して、3つの様々なグループに分類されることができます:

  1. テキストゾーンタイプ:OcrZoneType.Text.このタイプは、テーブルタイプ構造を中に持たずに文字情報がゾーンに格納されるという意味です。
  2. OcrZoneType.Table型。この型があるゾーンは、ゾーンがテーブルを格納しながら(すなわち、グリッドの有無にかかわらず、コラムで)検出されることを意味します。そのようなゾーンは、フローテキストタイプゾーンのそれと違って処理されます。
  3. OcrZoneType.Graphic型はゾーンがグラフィクスを格納することを意味します、すなわち、このゾーンはまったく認められません。そのようなゾーンを持っている唯一の理由は、保存するか、ゾーン領域の中にimageをエクスポートすることです。

注意:OCRエンジンがAutoZoneメソッドで分解している自動のページを実行して、それの中で任意のゾーンを見つけることができなかったとき、言い換えると、このIOcrPageが空のページであるならば、Recognizeメソッドは例外で失敗します。それは推薦されます。そして、AutoZoneを呼び出します、そして、エンジン(Zones.Countを用いて)で見つけられる少なくとも1つのゾーンがあるならば、チェックします。カウント数が0の場合は、Recognizeを呼び出さないでください

認識モジュールがオブジェクト(すなわち文字またはチェックマークその他)を認識することができないならば、このオブジェクトは拒絶されたものとしてマークされます。それは、最終アウトプットドキュメントに変換の間、除外シンボルによってマークされます。IOcrDocumentManager.RejectionSymbolが最終的なドキュメントで使われる除外シンボルを指定する用意が整っていることがありえることに注意すべきです。

AutoZone/Recognizeとページ画像に関する注意点:特定の場合、AutoZoneとRecognizeは、操作中のページとなる場合もあるページ上で画像処理を実行します。たとえば、表タイプのゾーンを追加した場合、必要に応じて自動的にページが傾き補正されることがあります。これにより、AutoZoneまたはRecognizeが呼び出された後に画像の画像表現は異なるものになります。自分のアプリケーションでページの画像を表示するという要件がある場合、AutoZoneまたはRecognizeの後にGetRasterImageを呼び出し、変更があった場合に備えてページの画像表現の最新バージョンを取得します。LEADTOOLSメインOCR C#およびVBデモにはこの処理が組み込まれています。

サンプル

このサンプルはOCRページの上で自動ゾーニングを実行して、そして見つけられるゾーンに関する情報を示します。

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Forms.Ocr
Imports Leadtools.Forms
Imports Leadtools.Forms.DocumentWriters
Imports Leadtools.WinForms
Imports Leadtools.Drawing
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Color

<TestMethod>
Public Sub OcrAutoZoneExample()
   ' Create an image with some text in it
   Dim image As New RasterImage(RasterMemoryFlags.Conventional, 320, 200, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, _
      Nothing, IntPtr.Zero, 0)
   Dim imageRect As New Rectangle(0, 0, image.ImageWidth, image.ImageHeight)
   Dim hdc As IntPtr = RasterImagePainter.CreateLeadDC(image)
   Using g As Graphics = Graphics.FromHdc(hdc)
      g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
      g.FillRectangle(Brushes.White, imageRect)

      Using f As New Font("Arial", 20, FontStyle.Regular)
         g.DrawString("Normal line", f, Brushes.Black, 0, 0)
      End Using

      Using f As New Font("Courier New", 20, FontStyle.Regular)
         g.DrawString("Monospaced line", f, Brushes.Black, 0, 80)
      End Using
   End Using

   RasterImagePainter.DeleteLeadDC(hdc)

   Dim zonesFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "MyZones.xml")

   ' Create an instance of the engine
   Using ocrEngine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, False)
      ' Start the engine using default parameters
      ocrEngine.Startup(Nothing, Nothing, Nothing, LEAD_VARS.OcrAdvantageRuntimeDir)

      ' Create an OCR page
      Using ocrPage As IOcrPage = 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(Nothing)

         ' Show the zones, there should be two zones, one for each line
         ShowZones("AutoZone with default parameters", ocrPage)

         ' Update the first zone manually
         Dim ocrZone As 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)
      End Using

      ' Shutdown the engine
      ' Note: calling Dispose will also automatically shutdown the engine if it has been started
      ocrEngine.Shutdown()
   End Using
End Sub

Private Sub ShowZones(message As String, ocrPage As IOcrPage)
   Console.WriteLine("Zones after {0}:", message)
   For Each ocrZone As OcrZone In ocrPage.Zones
      Dim index As Integer = 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("----------------------------------")
   Next

   Console.WriteLine("Hit enter to continue")
   Console.ReadLine()
End Sub

Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
Public Const OcrAdvantageRuntimeDir As String = "C:\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime"
End Class
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms.Ocr;
using Leadtools.Forms;
using Leadtools.Forms.DocumentWriters;
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.Advantage, false))
   {
      // Start the engine using default parameters
      ocrEngine.Startup(null, null, null, LEAD_VARS.OcrAdvantageRuntimeDir);

      // 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:\Users\Public\Documents\LEADTOOLS Images";
public const string OcrAdvantageRuntimeDir = @"C:\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime";
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Controls;
using Leadtools.Forms.Ocr;
using Leadtools.Forms;
using Leadtools.Forms.DocumentWriters;
using Leadtools.ImageProcessing;

      
public async Task OcrAutoZoneExample()
{
   string imageFileName = @"Assets\OCR1.TIF";
   string zonesFileName = "MyZones.xml";

   // Create an instance of the engine
   IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false);

   // Start the engine using default parameters
   ocrEngine.Startup(null, null, String.Empty, Tools.OcrEnginePath);

   // Create an OCR document
   IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument();

   // Load the image
   IOcrPage ocrPage = null;
   using (RasterCodecs codecs = new RasterCodecs())
   {
      StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(imageFileName);
      using (RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)))
         ocrPage = ocrDocument.Pages.AddPage(image, null);
   }

   // 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 nine zones
   ShowZones("AutoZone image", ocrPage);

   // Update the first zone manually
   OcrZone ocrZone = ocrPage.Zones[0];
   ocrZone.ZoneType = OcrZoneType.Graphic;
   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
   StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(zonesFileName);
   await ocrDocument.SaveZonesAsync(saveFile);
   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
   await ocrPage.LoadZonesAsync(saveFile);
   ShowZones("After re-loading the zones", ocrPage);

   // Shutdown the engine
   ocrEngine.Shutdown();
}

private void ShowZones(string message, IOcrPage ocrPage)
{
   Debug.WriteLine("Zones after {0}:", message);
   foreach(OcrZone ocrZone in ocrPage.Zones)
   {
      int index = ocrPage.Zones.IndexOf(ocrZone);
      Debug.WriteLine("Zone index: {0}", index);
      Debug.WriteLine("  Id                  {0}", ocrZone.Id);
      Debug.WriteLine("  Bounds              {0}", ocrZone.Bounds);
      Debug.WriteLine("  ZoneType            {0}", ocrZone.ZoneType);
      Debug.WriteLine("  FillMethod:         {0}", ocrZone.FillMethod);
      Debug.WriteLine("  RecognitionModule:  {0}", ocrZone.RecognitionModule);
      Debug.WriteLine("  CharacterFilters:   {0}", ocrZone.CharacterFilters);
      Debug.WriteLine("----------------------------------");
   }
}
必要条件

ターゲットプラットホーム

参照

参照

IOcrPageインターフェース
IOcrPageメンバ
IOcrPageCollectionインターフェース
IOcrZoneCollectionインターフェース
OcrZone構造体
Recognizeメソッド
LEADTOOLS .NET OCRによるプログラミング

Leadtools.Forms.Ocrは、認識またはDocument Imaging Suiteのライセンスと、解除キーが必要です。詳細は、以下を参照してください。LEADTOOLSツールキット機能