LEADTOOLSバーコード(Leadtools.Barcodeアセンブリ)

フレームを表示

BarcodeReaderクラス








メンバ 
LEADTOOLSのバーコード読み取りに関するサポートのメインクラス。
オブジェクトモデル
構文
public sealed class BarcodeReader 
'Declaration
 
Public NotInheritable Class BarcodeReader 
'Usage
 
Dim instance As BarcodeReader
public sealed sealed class BarcodeReader 
@interface LTBarcodeReader : NSObject
public class BarcodeReader
function Leadtools.Barcode.BarcodeReader()
public ref class BarcodeReader sealed 
解説

BarcodeReaderクラスは、imageから一つ以上のバーコードを読み込むのに用いられます。BarcodeReaderのインスタンスを直接作成することはできません。その代わりに、BarcodeEngine内で作成されたインスタンスを使用します。このインスタンスにはBarcodeEngine.Readerプロパティからアクセスします。

[Visual Basic]


            Dim engine As New BarcodeEngine()
            Dim reader As BarcodeReader = engine.Reader
            ' Use can use the reader now, for example, read a single UPCA barcode from an image:
            Dim data As BarcodeData = reader.ReadBarcode(myImage, LogicalRectangle.Empty, BarcodeSymbology.UPCA)
            

[C#]


            BarcodeEngine engine = new BarcodeEngine();
            BarcodeReader reader = engine.Reader();
            // Use can use the reader now, for example, read a single UPCA barcode from an image:
            BarcodeData data = reader.ReadBarcode(myImage, LogicalRectangle.Empty, BarcodeSymbology.UPCA);
            

または、BarcodeEngine.Readerプロパティを通して直接BarcodeReaderを使うことができます:

[Visual Basic]


            Dim engine As New BarcodeEngine()
            ' Use the instance in BarcodeEngine directly, for example, read a single UPCA barcode from an image:
            Dim data As BarcodeData = engine.Reader.ReadBarcode(myImage, LogicalRectangle.Empty, BarcodeSymbology.UPCA)
            

[C#]


            BarcodeEngine engine = new BarcodeEngine();
            // Use the instance in BarcodeEngine directly, for example, read a single UPCA barcode from an image:
            BarcodeData data = engine.Reader.ReadBarcode(myImage, LogicalRectangle.Empty, BarcodeSymbology.UPCA);
            

読み取りバーコード

BarcodeReaderクラスは、バーコードを読むのに用いられる以下のメソッドを格納します:

メソッド 説明
ReadBarcode

imageから単一のバーコードを検索して読み取ります。このメソッドは、イメージで見つけられる最初のバーコードのためにデータを格納しているBarcodeDataオブジェクトを返します。バーコードがつからなかった場合は、null(Visual BasicではNothing)です。「見つかる」とは、そのバーコードがこのメソッドのほかのパラメーター(バーコード体系、検索領域、読み取りオプションなど)を満たしていることを意味します。

ReadBarcodes

imageから複数のバーコードを検索して読み取ります。このメソッドは、imageで見つけられるすべてのバーコードのためにデータを格納しているBarcodeDataオブジェクトの配列を返します。バーコードが見つからなかった場合は、空(長さが0)の配列を返します。ここでも、「見つかる」とは、そのバーコードがこのメソッドの他のパラメーター(バーコード体系、検索領域、読み取りオプションなど)を満たしていることを意味します。

こうしたすべてのオーバーロードされたメソッドは、画像データや任意の検索四角形、バーコード体系、追加の読み取りオプションを含む有効な画像を受け取ります。

返されたBarcodeDataオブジェクトは、見つけられるバーコードまたはバーコードのためにデータを格納します。これらは以下を含みます:

メンバ 説明
BarcodeData.Symbology

見つかったバーコードのコード体系(種類)を指定するBarcodeSymbology列挙体のメンバ。

BarcodeData.Bounds

画像上でのバーコードの位置とサイズ。

データ(BarcodeData.GetDataを通してアクセスされる)

バーコード内で見つかった、バイト配列形式の生データ。

BarcodeData.Value

データの(ASCII形式での)文字列表現。返される値は、単にBarcodeData.GetDataから返されるbyte配列のASCIIテキストです

そして、より多くはBarcodeDataに詳細な情報について問い合わせます。

バーコード体系によっては、読み取りメソッドから派生クラスが返される場合があります(BarcodeDataにキャストされます)。詳細については、「BarcodeData」を参照してください。

バーコードを読み取るとき、ReadSymbologyを使用して、検索中のバーコードに関するリアルタイムの情報と読み取りステータスを取得できます。

入力画像

ReadBarcodeReadBarcodesメソッドは、画像データを格納するRasterImageオブジェクトをパラメーターとして受け取ります。これは、有効なオブジェクト(nullまたはNothing以外)でなければなりません。Leadtools.Codecs.RasterCodecsクラス(Leadtools.Twain.TwainSessionクラスを用いてスカニング装置から取得しているか、LEADTOOLSによってサポートされる多くの他の手段の任意の)を用いてディスクファイルまたはストリームからそれをロードすることによって、通常RasterImageオブジェクトを得ます。

検索時に最良の結果を得るためには、バーコードがBarcodeReaderオブジェクトを検出して読み取るのに十分な大きさで、なおかつ明瞭である必要があります。幅と高さの一つ以上のインチのバーコードは、正常に読まれるのに大抵十分です。したがって、入力画像の解像度は200DPI以上にすることをお勧めします。スマートフォンのカメラで撮影した画像はピクセル密度が大きいため(5Mピクセルなど)、解像度が小さくても(携帯電話のカメラの解像度は通常72または96 DPI)、画像サイズはバーコードを読み取るのに十分です。LEADTOOLSは、任意の問題なしでこれらのイメージを読むことができます。

入力画像の推奨される形式は2値(白黒)です。カラー画像の場合は、バーコードが検出される前に内部で明度検出が実行され、画像が白黒に変換されます。これは、エンジンで自動的にされます;通常現状のままimageを渡します。ただし、画像が不明瞭であったり、破損やノイズがある場合には、外部画像処理が必要になることがあります。

LEADTOOLSでは、任意の角度に傾いたバーコードを自動的に読み取ることができます。ただし、垂直バーコードがある場合は、バーコード検索方向をデフォルトのBarcodeSearchDirection.Horizontal。以外に変更する必要があります。これをBarcodeSearchDirection.HorizontalAndVerticalに設定すると、任意の方向の任意の角度に傾いたバーコードが読み取られます。ただし、処理負荷が高くなり、検出速度は遅くなります。

1次元バーコード(1D)はそれほど複雑でないため、通常は外部処理なしで読み取られます。しかし、QR、PDF417、MicroPDF417およびDatamatrix などの2Dバーコードは複雑で細かいため、画像が明瞭であることが必須です。これらのバーコードの検出が失敗した場合に画像のクリーンアップを自動的に実行する場合は、「二重走査」を有効にできます。詳細は、「QRBarcodeReadOptions.EnableDoublePass」、「PDF417BarcodeReadOptions.EnableDoublePass」、「MicroPDF417BarcodeReadOptions.EnableDoublePass」および「DatamatrixBarcodeReadOptions.EnableDoublePass」を参照してください。これらのオプションを有効にすると処理時間が長くなります。したがってデフォルトでは、最大限の検出速度が得られるように、これらのオプションはすべて無効になっています。

検索境界

読み取りメソッドは、バーコードの検索と検出を行う画像領域を指定するLogicalRectangle型のパラメーターを受け取ります。画像全体を検索するには、LogicalRectangle.Emptyを渡します。当然のことながら、検索領域を小さくすると検出速度が速くなり、検索領域を大きくすると検出速度が遅くなります。

バーコード体系

読み取りメソッドは、バーコードの検索と検出を行う画像領域を指定するBarcodeSymbology型のパラメーターを受け取ります。また、特殊な値であるBarcodeSymbology.Unknownを渡して、使用可能なすべてのバーコードを検索することもできます。

バーコードの種類が事前にわかっている場合は、対応するバーコード体系のみ(複数も可)を渡すことを強くお勧めします。検索するバーコード体系の数が少ないほど検出速度は速くなり、検索するバーコード体系の数が多いほど検出速度は遅くなります。

BarcodeEngine.GetSupportedSymbologiesメソッドは、LEADTOOLSでサポートされているすべてのバーコード体系(BarcodeSymbology)を含む配列を返します。これらのバーコード体系の全てが、サポートがロック解除したLEADTOOLSのレベルとバックエンドサポートアセンブリの存在に従い現在のBarcodeReaderオブジェクトによって利用できるというわけではないかもしれません(使える)。このBarcodeReaderオブジェクトで現在使用できるバーコード体系のサブセットを取得するため、いつでもGetAvailableSymbologiesを使用できます。

読まれたオプション

バーコードの読み取り時に使用する追加オプションも用意されています。これらのオプションは、検索パラメーターを微調整する場合や、認識速度と精度を向上させる可能性がある既知の追加情報を提供する場合に使用します。これらのオプションの抽象基本クラスはBarcodeReadOptionsです。LEADTOOLSは、派生クラスを各々のシンボル(またはバーコード体系のグループ)に提供します。詳細については、「BarcodeReadOptions」を参照してください。

BarcodeReaderクラスには、各バーコード体系(または共通バーコード体系のグループ)のデフォルトオプションが含まれます。これらのオプションを取得するには、対象のバーコード体系を渡してGetDefaultOptionsメソッドを呼び出します。その後で、返されたBarcodeReadOptionsのメンバを変更できます(または、適切な派生クラスにキャストしてからそのメンバを変更します)。

また、いずれかの派生BarcodeReadOptionsクラスのインスタンスを作成し、単一のオプションまたはオプションの配列をパラメーターとして受け取るReadBarcodeメソッドおよびReadBarcodesメソッドでそのインスタンスを直接使用することもできます。

デフォルトオプションは1つの場所でBarcodeReaderオブジェクトにより用いられるオプションを簡単に変更する簡単な方法を提供します、そして、アプリケーションでオプションオブジェクトを保持する必要はありません。すべての読まれたメソッドは、明示的なオプション(またはオプションを必要とするもののための使用null)を必要としないバージョンを持っています。

ただし、場合によっては明示的なオプションを使用しなければならないことがあります。たとえば、特定の画像の読み取りを微調整する場合や、複数のスレッドと単一のBarcodeReaderで個別のオプションを使用してバーコードを読み取る場合などです。このような場合は、明示的なオプションを使用して、これらのオプションの一部または全部をオーバーライドできます。メソッドに渡された明示的なオプションの中でバーコード体系に必要なオプションが見つからない場合は、クラスに格納されているデフォルトのバージョンが使用されます。BarcodeReader.ReadBarcodes(RasterImage image、LogicalRectangle searchBounds、int maximumBarcodes、BarcodeSymbology[]バーコード体系、BarcodeReadOptions[]オプション)サンプルは、2つのスレッドを作成する方法を示します:水平バーコードを読み取るためのスレッドと垂直バーコードを読み取るためのスレッド。同じBarcodeReaderを使用して両方のスレッドで画像からすべてのバーコードを読み取ります。

デフォルトオプションは、LoadOptionsSaveOptionsメソッドを用いたXMLファイルまたはストリームとしてロードまたは保存されることもできます。

サンプル

このサンプルは、imageですべてのバーコードを読みます

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Forms
Imports Leadtools.Barcode
Imports Leadtools.ImageProcessing

      
Public Sub BarcodeReader_Example()
   Dim imageFileNames() As String = _
   { _
      Path.Combine(LEAD_VARS.ImagesDir, "Barcode1.tif"), _
      Path.Combine(LEAD_VARS.ImagesDir, "Barcode2.tif") _
   }
   ' Create a Barcode engine
   Dim engine As New BarcodeEngine()

   ' Get the Barcode reader instance
   Dim reader As BarcodeReader = engine.Reader

   ' Load the image
   Using codecs As New RasterCodecs()
      For Each imageFileName As String In imageFileNames
         Using image As RasterImage = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1)
            ' Read all the barcodes in this image
            Dim barcodes() As BarcodeData = reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, Nothing)

            ' Print out the barcodes we found
            Console.WriteLine("{0} contains {1} barcodes", imageFileName, barcodes.Length)
            For i As Integer = 0 To barcodes.Length - 1
               Dim barcode As BarcodeData = barcodes(i)
               Console.WriteLine("  {0} - {1} - {2}", i + 1, barcode.Symbology, barcode.Value)
            Next
            Console.WriteLine("-----------------")
         End Using
      Next
   End Using
End Sub

Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms;
using Leadtools.Barcode;
using Leadtools.ImageProcessing;

      
public void BarcodeReader_Example()
{
   string[] imageFileNames =
   {
      Path.Combine(LEAD_VARS.ImagesDir, "Barcode1.tif"),
      Path.Combine(LEAD_VARS.ImagesDir, "Barcode2.tif")
   };
   // Create a Barcode engine
   BarcodeEngine engine = new BarcodeEngine();

   // Get the Barcode reader instance
   BarcodeReader reader = engine.Reader;

   // Load the image
   using(RasterCodecs codecs = new RasterCodecs())
   {
      foreach(string imageFileName in imageFileNames)
      {
         using(RasterImage image = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1))
         {
            // Read all the barcodes in this image
            BarcodeData[] barcodes = reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, null);

            // Print out the barcodes we found
            Console.WriteLine("{0} contains {1} barcodes", imageFileName, barcodes.Length);
            for(int i = 0; i < barcodes.Length; i++)
            {
               BarcodeData barcode = barcodes[i];
               Console.WriteLine("  {0} - {1} - {2}", i + 1, barcode.Symbology, barcode.Value);
            }
            Console.WriteLine("-----------------");
         }
      }
   }
}

static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Barcode;
using Leadtools.ImageProcessing;

      
public async Task BarcodeReader_Example()
{
   string[] imageFileNames =
   {
      @"Assets\Barcode1.tif",
      @"Assets\Barcode2.tif"
   };
   // Create a Barcode engine
   BarcodeEngine engine = new BarcodeEngine();

   // Get the Barcode reader instance
   BarcodeReader reader = engine.Reader;

   // Load the image
   using(RasterCodecs codecs = new RasterCodecs())
   {
      foreach(string imageFileName in imageFileNames)
      {
         StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(imageFileName);
         using(RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)))
         {
            // Read all the barcodes in this image
            BarcodeData[] barcodes = reader.ReadBarcodes(image, LeadRectHelper.Empty, 0, null);
            if (barcodes == null)
            {
               Debug.WriteLine("No barcodes found");
               return;
            }

            // Print out the barcodes we found
            Debug.WriteLine("{0} contains {1} barcodes", imageFileName, barcodes.Length);
            for(int i = 0; i < barcodes.Length; i++)
            {
               BarcodeData barcode = barcodes[i];
               Debug.WriteLine("  {0} - {1} - {2}", i + 1, barcode.Symbology, barcode.Value);
            }
            Debug.WriteLine("-----------------");
         }
      }
   }
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms;
using Leadtools.Barcode;
using Leadtools.ImageProcessing;
using Leadtools.Examples;

public void BarcodeReader_Example(RasterImage image, string imageFileName)
{
   // Create a Barcode engine
   BarcodeEngine engine = new BarcodeEngine();
   // Get the Barcode reader instance
   BarcodeReader reader = engine.Reader;

   // Load the image
   RasterCodecs codecs = new RasterCodecs();

   // Read all the barcodes in this image
   BarcodeData[] barcodes = reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, null);

   // Print out the barcodes we found
   Console.WriteLine("{0} contains {1} barcodes", imageFileName, barcodes.Length);
   for(int i = 0; i < barcodes.Length; i++)
   {
      BarcodeData barcode = barcodes[i];
      Console.WriteLine("  {0} - {1} - {2}", i + 1, barcode.Symbology, barcode.Value);
   }
   Console.WriteLine("-----------------");
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Forms
Imports Leadtools.Barcode
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Color

Public Sub BarcodeReader_Example(ByVal image As RasterImage, ByVal imageFileName As String)
   ' Create a Barcode engine
   Dim engine As BarcodeEngine = New BarcodeEngine()
   ' Get the Barcode reader instance
   Dim reader As BarcodeReader = engine.Reader

   ' Load the image
   Dim codecs As RasterCodecs = New RasterCodecs()

   ' Read all the barcodes in this image
   Dim barcodes As BarcodeData() = reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, Nothing)

   ' Print out the barcodes we found
   Console.WriteLine("{0} contains {1} barcodes", imageFileName, barcodes.Length)
   Dim i As Integer = 0
   Do While i < barcodes.Length
      Dim barcode As BarcodeData = barcodes(i)
      Console.WriteLine("  {0} - {1} - {2}", i + 1, barcode.Symbology, barcode.Value)
      i += 1
   Loop
   Console.WriteLine("-----------------")
End Sub
必要条件

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

参照

参照

BarcodeReaderメンバ
Leadtools.Barcode名前空間
BarcodeSymbology列挙体
BarcodeDataクラス
BarcodeReader.ReadBarcode
BarcodeReader.ReadBarcodes
LEADTOOLSバーコードによるプログラミング
サポートされているバーコード体系
バーコードサポートのロック解除
読み取りバーコードチュートリアル
LEADTOOLSのUPC/EANバーコード
LEADTOOLSの2 of 5バーコード
LEADTOOLSのGS1 DataBar/RSS-14バーコード
LEADTOOLSのCODE128バーコード
LEADTOOLSのUSPSと4-状態バーコード
LEADTOOLSのMSIバーコード(パルス幅変調)
LEADTOOLSのCodabarバーコード
LEADTOOLSのその他のバーコード
LEADTOOLSのDatamatrixバーコード
LEADTOOLSのPDF417とMicroPDF417バーコード
LEADTOOLSのMicroPDF417バーコード
LEADTOOLSのQRバーコード

Leadtools.Barcodeは、バーコードモジュールのライセンスと、解除キーが必要です。詳細は、以下を参照してください。LEADTOOLSツールキット機能