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

フレームを表示

IOcrOmrOptionsインターフェース








メンバ 
エンジンが現在使用しているOMR(Optical Mark Recognition)設定。
オブジェクトモデル
構文
public interface IOcrOmrOptions 
'Declaration
 
Public Interface IOcrOmrOptions 
'Usage
 
Dim instance As IOcrOmrOptions
public interface IOcrOmrOptions 
@interface LTOcrOmrOptions : NSObject
public class OcrOmrOptions
function Leadtools.Forms.Ocr.IOcrOmrOptions() 
public interface class IOcrOmrOptions 
解説

LEADTOOLSのOMRの使用は、OMR能力をロック解除することを特殊キーに要求します。詳細については、「特殊なLEAD機能のアンロック」を参照してください。

取得するために、エンジンで現時点では使われるIOcrOmrOptionsインターフェースのインスタンスは、IOcrSpellCheckManager.OmrOptionsプロパティを呼び出します。

以下のOMR設定を変更するために、IOcrOmrOptionsインターフェースを使用します:

ページのOMRゾーンは、OcrZone.ZoneTypeOcrZoneType.Omrに設定しておくゾーンです。

すべてのLEADTOOLS OCRエンジンは、OMRをサポートします。しかし、Advantage OCRエンジンだけは、OCRページの自動ゾーニングの間、OMRゾーンの自動検出をサポートします。設定OMRゾーン自動検出に、それは確認します「チェックボックスを検出します」Recognition.Zoning.Optionsの1つはIOcrPage.AutoZoneまたはIOcrPage.Recognize.を呼び出す前に含まれるフラグを設定する残りのOCRエンジンは、OMRゾーンが先に述べたようにOcrZone.Boundsとゾーン型を通して境界を設定することによってページに手動で追加されることを必要とします。そして、IOcrPage.Recognizeを呼び出す前に、IOcrPage.Zonesコレクションを用いてページにゾーンを追加します。

詳細については、「LEADTOOLS .NET OCRの使っているOMR」を参照してください。

サンプル

このサンプルはTIF imageをロードして、OMRゾーンを作成して、認めます。

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Forms.Ocr
Imports Leadtools.Forms
Imports Leadtools.Forms.DocumentWriters
Imports Leadtools.WinForms

<TestMethod>
Public Sub OcrOmrExample()
   ' 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)
      ' We will use Mixed.tif shipped with LEADTOOLS in the Images folder. This image has 3 OMR check marks
      Dim tifFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Mixed.tif")

      ' Create an OCR document
      Using ocrDocument As IOcrDocument = ocrEngine.DocumentManager.CreateDocument()
         ' Add a page to the document
         Dim ocrPage As IOcrPage = ocrDocument.Pages.AddPage(tifFileName, Nothing)

         ' Add the OMR zones. We calculated the 3 OMR zone boundaries for this image perviously
         Dim omrBounds As LogicalRectangle() = { _
            New LogicalRectangle(484, 98, 84, 78, LogicalUnit.Pixel), _
            New LogicalRectangle(494, 184, 70, 54, LogicalUnit.Pixel), _
            New LogicalRectangle(498, 244, 76, 76, LogicalUnit.Pixel)}

         For Each omrBound As LogicalRectangle In omrBounds
            ' Create a new OMR zone and add it to the page
            Dim zone As New OcrZone()
            zone.ZoneType = OcrZoneType.Omr
            zone.Bounds = omrBound
            ocrPage.Zones.Add(zone)
         Next

         ' Show how many zones we have and they properties
         Console.WriteLine("Page has {0} zones:", ocrPage.Zones.Count)
         For i As Integer = 0 To ocrPage.Zones.Count - 1
            Dim zone As OcrZone = ocrPage.Zones(i)
            Console.WriteLine("{0}: Type: {1}", i + 1, zone.ZoneType)
         Next

         ' Change the OMR options (Auto detection of frames with highest sensitivity)
         Dim omrOptions As IOcrOmrOptions = ocrEngine.ZoneManager.OmrOptions
         omrOptions.FrameDetectionMethod = OcrOmrFrameDetectionMethod.Auto
         omrOptions.Sensitivity = OcrOmrSensitivity.Highest

         ' Get the character we are using in the engine to represent the filled/unfilled states
         Dim filledCode As Char = omrOptions.GetStateRecognitionCharacter(OcrOmrZoneState.Filled)
         Dim unfilledCode As Char = omrOptions.GetStateRecognitionCharacter(OcrOmrZoneState.Unfilled)

         ' Recognize the page
         Console.WriteLine("Recognizing...")
         ocrPage.Recognize(Nothing)

         Dim pageCharacters As IOcrPageCharacters = ocrPage.GetRecognizedCharacters()
         For Each zoneCharacters As IOcrZoneCharacters In pageCharacters
            ' We must have one character (the state for each OMR zone)
            Debug.Assert(zoneCharacters.Count = 1)
            Dim character As OcrCharacter = zoneCharacters(0)
            Debug.Assert(character.Code = filledCode OrElse character.Code = unfilledCode)
            Console.WriteLine("{0}: State: {1}, Confidence: {2}", _
                              zoneCharacters.ZoneIndex, _
                              If(character.Code = filledCode, "Filled", "Unfilled"), _
                              character.Confidence)
         Next

         ' Now save the result as PDF using the default characters representation for OMR states (0 for unfilled, 1 for filled)
         Dim pdfFileName1 As String = Path.Combine(LEAD_VARS.ImagesDir, "Omr_Results1.pdf")
         Console.WriteLine("Saving to {0}...", pdfFileName1)
         ocrDocument.Save(pdfFileName1, DocumentFormat.Pdf, Nothing)

         ' Change the character representation for the OMR states to Y for unfilled, and X for filled
         omrOptions.SetStateRecognitionCharacter(OcrOmrZoneState.Unfilled, "Y"c)
         omrOptions.SetStateRecognitionCharacter(OcrOmrZoneState.Filled, "X"c)

         Dim pdfFileName2 As String = Path.Combine(LEAD_VARS.ImagesDir, "Omr_Results2.pdf")
         Console.WriteLine("Saving to {0}...", pdfFileName2)
         ocrDocument.Save(pdfFileName2, DocumentFormat.Pdf, Nothing)
      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

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;

public void OcrOmrExample()
{
   // 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);
      // We will use Mixed.tif shipped with LEADTOOLS in the Images folder. This image has 3 OMR check marks
      string tifFileName = Path.Combine(LEAD_VARS.ImagesDir, "Mixed.tif");

      // Create an OCR document
      using (IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument())
      {
         // Add a page to the document
         IOcrPage ocrPage = ocrDocument.Pages.AddPage(tifFileName, null);

         // Add the OMR zones. We calculated the 3 OMR zone boundaries for this image perviously
         LogicalRectangle[] omrBounds =
         {
            new LogicalRectangle(484, 98, 84, 78, LogicalUnit.Pixel),
            new LogicalRectangle(494, 184, 70, 54, LogicalUnit.Pixel),
            new LogicalRectangle(498, 244, 76, 76, LogicalUnit.Pixel)
         };

         foreach (LogicalRectangle omrBound in omrBounds)
         {
            // Create a new OMR zone and add it to the page
            OcrZone zone = new OcrZone();
            zone.ZoneType = OcrZoneType.Omr;
            zone.Bounds = omrBound;
            ocrPage.Zones.Add(zone);
         }

         // Show how many zones we have and they properties
         Console.WriteLine("Page has {0} zones:", ocrPage.Zones.Count);
         for (int i = 0; i < ocrPage.Zones.Count; i++)
         {
            OcrZone zone = ocrPage.Zones[i];
            Console.WriteLine("{0}: Type: {1}", i + 1, zone.ZoneType);
         }

         // Change the OMR options (Auto detection of frames with highest sensitivity)
         IOcrOmrOptions omrOptions = ocrEngine.ZoneManager.OmrOptions;
         omrOptions.FrameDetectionMethod = OcrOmrFrameDetectionMethod.Auto;
         omrOptions.Sensitivity = OcrOmrSensitivity.Highest;

         // Get the character we are using in the engine to represent the filled/unfilled states
         char filledCode = omrOptions.GetStateRecognitionCharacter(OcrOmrZoneState.Filled);
         char unfilledCode = omrOptions.GetStateRecognitionCharacter(OcrOmrZoneState.Unfilled);

         // Recognize the page
         Console.WriteLine("Recognizing...");
         ocrPage.Recognize(null);

         IOcrPageCharacters pageCharacters = ocrPage.GetRecognizedCharacters();
         foreach (IOcrZoneCharacters zoneCharacters in pageCharacters)
         {
            // We must have one character (the state for each OMR zone)
            Debug.Assert(zoneCharacters.Count == 1);
            OcrCharacter character = zoneCharacters[0];
            Debug.Assert(character.Code == filledCode || character.Code == unfilledCode);
            Console.WriteLine("{0}: State: {1}, Confidence: {2}", zoneCharacters.ZoneIndex, character.Code == filledCode ? "Filled" : "Unfilled", character.Confidence);
         }

         // Now save the result as PDF using the default characters representation for OMR states (0 for unfilled, 1 for filled)
         string pdfFileName1 = Path.Combine(LEAD_VARS.ImagesDir, "Omr_Results1.pdf");
         Console.WriteLine("Saving to {0}...", pdfFileName1);
         ocrDocument.Save(pdfFileName1, DocumentFormat.Pdf, null);

         // Change the character representation for the OMR states to Y for unfilled, and X for filled
         omrOptions.SetStateRecognitionCharacter(OcrOmrZoneState.Unfilled, 'Y');
         omrOptions.SetStateRecognitionCharacter(OcrOmrZoneState.Filled, 'X');

         string pdfFileName2 = Path.Combine(LEAD_VARS.ImagesDir, "Omr_Results2.pdf");
         Console.WriteLine("Saving to {0}...", pdfFileName2);
         ocrDocument.Save(pdfFileName2, DocumentFormat.Pdf, null);
      }

      // Shutdown the engine
      // Note: calling Dispose will also automatically shutdown the engine if it has been started
      ocrEngine.Shutdown();
   }
}

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.Forms.Ocr;
using Leadtools.Forms;
using Leadtools.Forms.DocumentWriters;

private async void OcrOmrExample()
{
   // 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);

   // We will use Mixed.tif shipped with LEADTOOLS in the Images folder. This image has 3 OMR check marks
   string tifFileName = "Mixed.tif";

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

   // Add a page to the document
   IOcrPage ocrPage = null;
   using (RasterCodecs codecs = new RasterCodecs())
   {
      StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(tifFileName);
      using (RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)))
         ocrPage = ocrDocument.Pages.AddPage(image, null);
   }

   // Add the OMR zones. We calculated the 3 OMR zone boundaries for this image perviously
   LeadRect[] omrBounds =
   {
      LeadRectHelper.Create(484, 98, 84, 78),
      LeadRectHelper.Create(494, 184, 70, 54),
      LeadRectHelper.Create(498, 244, 76, 76)
   };

   foreach(LeadRect omrBound in omrBounds)
   {
      // Create a new OMR zone and add it to the page
      OcrZone zone = new OcrZone();
      zone.ZoneType = OcrZoneType.Text;
      zone.FillMethod = OcrZoneFillMethod.Omr;
      zone.RecognitionModule = OcrZoneRecognitionModule.Omr;
      zone.Bounds = omrBound;
      ocrPage.Zones.Add(zone);
   }

   // Show how many zones we have and they properties
   Debug.WriteLine("Page has {0} zones:", ocrPage.Zones.Count);
   for(int i = 0; i < ocrPage.Zones.Count; i++)
   {
      OcrZone zone = ocrPage.Zones[i];
      Debug.WriteLine("{0}: Type: {1}, Fill method: {2}, Recognition Module: {3}", i + 1, zone.ZoneType, zone.FillMethod, zone.RecognitionModule);
   }

   // Change the OMR options (Auto detection of frames with highest sensitivity)
   IOcrOmrOptions omrOptions = ocrEngine.ZoneManager.OmrOptions;
   omrOptions.FrameDetectionMethod = OcrOmrFrameDetectionMethod.Auto;
   omrOptions.Sensitivity = OcrOmrSensitivity.Highest;

   // Recognize the page
   Debug.WriteLine("Recognizing...");
   ocrPage.Recognize(null);

   // Now show the OMR zone properties
   for(int i = 0; i < ocrPage.Zones.Count; i++)
   {
      OcrZone zone = ocrPage.Zones[i];
      Debug.WriteLine("{0}: State: {1}, Confidence: {2}", i + 1, zone.OmrState, zone.OmrConfidence);
   }

   // Now save the result as PDF using the default characters representation for OMR states (0 for unfilled, 1 for filled)
   string pdfFileName1 = "Omr_Results1.pdf";
   Debug.WriteLine("Saving to {0}...", pdfFileName1);
   StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(pdfFileName1, CreationCollisionOption.ReplaceExisting);
   await ocrDocument.SaveAsync(LeadStreamFactory.Create(saveFile), DocumentFormat.Pdf, null);

   // Change the character representation for the OMR states to Y for unfilled, and X for filled
   omrOptions.SetStateRecognitionCharacter(OcrOmrZoneState.Unfilled, 'Y');
   omrOptions.SetStateRecognitionCharacter(OcrOmrZoneState.Filled, 'X');

   string pdfFileName2 = "Omr_Results2.pdf";
   Debug.WriteLine("Saving to {0}...", pdfFileName2);
   saveFile = await Tools.AppLocalFolder.CreateFileAsync(pdfFileName2, CreationCollisionOption.ReplaceExisting);
   await ocrDocument.SaveAsync(LeadStreamFactory.Create(saveFile), DocumentFormat.Pdf, null);

   // Shutdown the engine
   ocrEngine.Shutdown();
}
必要条件

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

参照

参照

IOcrOmrOptionsメンバ
Leadtools.Forms.Ocr名前空間
OcrEngineManagerクラス
OcrEngineType列挙体
IOcrPageCollectionインターフェース
IOcrZoneCollectionインターフェース
IOcrZoneManagerインターフェース
OcrZone構造体
LEADTOOLS .NET OCRによるプログラミング
LEADTOOLS .NET OCRのOMRを使用して
特殊なLEAD機能のアンロック

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