画像ファイル(JPEG、PNG、GIF、TIFF、SVG、BMP)からバーコードを読み取る方法

Hairil related to 画像ファイル(JPEG、PNG、GIF、TIFF、SVG、BMP)からバーコードを読み取る方法
ハイリル ハシミ ビン オマル
2023年3月19日
更新済み 2025年2月8日
共有:
This article was translated from English: Does it need improvement?
Translated
View the article in English


今日から無料トライアルでIronBarcodeをあなたのプロジェクトで使い始めましょう。

最初のステップ:
green arrow pointer

画像から直接バーコードを読み取る

IronBarcodeの主要な機能の一つは、複数の画像形式でバーコードを即座に読み取る能力です。 IronBarcodeが現在サポートしている画像フォーマットは次のとおりです。

* スケーラブル・ベクター・グラフィックス(SVG)

* ジョイント・フォトグラフィック・エキスパート・グループ(JPEG)

* ポータブルネットワークグラフィックス(PNG)

* グラフィックス交換フォーマット(GIF)

* タグ付き画像ファイル形式(TIFF)

* ビットマップ画像ファイル(BMP)

これはオープンソースライブラリのIronDrawingの助けを借りて可能になっています。 次に、IronBarcodeを実際に使用してバーコードを読み取る方法を見てみましょう。

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
$vbLabelText   $csharpLabel
QRcodeintro related to 画像から直接バーコードを読み取る
サンプルテストQRコード
Code128intro related to 画像から直接バーコードを読み取る
サンプルテストバーコード

サンプル内のバーコード値を知りたいですか?コードスニペットを使って試してみましょう! IronBarcodeを使用するには、まずMicrosoft Visual StudioのNuGetパッケージマネージャーを介してプロジェクトにIronBarcodeライブラリをインストールする必要があります。次の図に示すように行います。 これにより、IronBarcode の BarcodeReader.Read() メソッドを利用してバーコード画像を直接読み取ることができます。

上記のコード スニペットから、IronBarcode が単純さを提供していることがわかります。ユーザーはファイル名文字列またはファイルパス文字列をメソッドのパラメーターとして指定することで、プロジェクト内にすでに含まれている画像ファイルを読み取るためにBarcodeReader.Read() を使用するだけで済みます。 ベストプラクティスとして、ファイルパスをメソッドに指定する際は逐語的文字列リテラル "@" を使用することを推奨します。これを含めないと、ユーザーがファイルパス文字列に複数のエスケープ文字 "\" を追加する必要があります。

BarcodeReader.Read() メソッドの呼び出しの最後に Values() メソッドを付けると、バーコードの値を System.String [] オブジェクトとして取得できます。

コンソールに結果を表示するには、string [] 配列に格納されている値を反復するために foreach ループを使用し、ループブロック内でイテレータ変数をパラメータとして Console.WriteLine() メソッドを呼び出します。

このメソッドは、1次元バーコード形式(Codabar、Code128、Code39、Code93、EAN13、EAN18、ITF、MSI、UPCA、UPCE)を読み取ることができるだけでなく、2次元バーコード形式(Aztec、DataMatrix、QRCode)もさまざまな画像形式で読み取ることができます。

バーコードリーダーオプションの設定

バーコード読み取りが遅すぎると感じていますか? 画像のバーコードが小さすぎてIronBarcodeが読み取れませんか? 画像の特定の領域だけを読み取りたいですか? さまざまな種類のバーコードが含まれている画像から特定の種類のバーコードのみを読み取りたいですか? 全体的な読書パフォーマンスを向上させたいですか? もう心配はいりません!

BarcodeReaderOptionsは、ユーザーがバーコードリーダーの動作を調整または調節して、上記のすべての問題に対処できるようにします。 では、BarcodeReaderOptions で利用可能なすべての調整可能なプロパティについて、1つずつ詳しく見ていきましょう。

クロップエリア (CropArea)

CropAreaは、BarcodeReaderOptionsで利用可能なIronSoftware.Drawing.CropRectangle型のプロパティであり、ユーザーがIronBarcodeに読み取りを希望する画像内の領域を指定することができます。 これにより、バーコードリーダーが画像全体をスキャンする必要がなくなるため、読み取り性能が向上し、読み取りエリアが指定されているため、読み取り精度も向上します。

CropArea プロパティを設定するには、新しい Rectangle 型オブジェクトをインスタンス化し、矩形の座標、幅、長さを引数として指定してください。 受け入れられる測定単位はピクセル(px)です。 CropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height)

バーコードタイプを期待

デフォルトでは、IronBarcode でサポートされているすべてのバーコードは画像内でスキャンされます。 しかし、ユーザーが画像内で読み取り可能なバーコードの種類を既に知っている場合、または特定のバーコードのみを読み取りたい場合、このプロパティを設定して特定の種類のバーコードのみを読むようにすることで、読み取りのパフォーマンスと精度が大幅に向上します。これは、バーコードリーダーがバーコードコレクション全体を通して解釈し、読み取る必要がなくなるためです。

このプロパティを使用するには、単にBarcodeEncoding列挙型のフィールドの1つにExpectBarcodeTypesを設定します。 IronBarcodeでサポートされているすべてのバコードタイプについて学び、それぞれのタイプからのサンプルバコードを見てみましょう。

  • AllOneDimensional : 線形タイプのバーコード。これには、Codabar、Code128、Code39、Code93、EAN13、EAN18、ITF、MSI、UPCA、UPCEバーコードが含まれます。

  • AllTwoDimensional:これには、グリッド、マトリックス、スタックバーコードが含まれます。2次元バーコードに分類されるバーコードタイプには、Aztec、DataMatrix、QRCodeバーコードがあります。

  • Aztec : Aztec 2Dバーコードフォーマット。Aztecコードは、Andrew Longacre, Jr.とRobert Husseyによって1995年に発明された2Dバーコードの一種です。中心のフィンダーパターンがアステカのピラミッドに似ていることにちなんで名付けられたAztecコードは、周囲の空白の「クワイエットゾーン」を必要としないため、他のマトリックスバーコードよりもスペースを節約する可能性があります。以下はAztecバーコードの例です。
  • アステカバーコードのサンプル
    アステックバーコード
  • Codabar : Codabarは、1972年にPitney Bowes Corpによって開発された線形バーコードシンボル体系です。Codabarは数値データ(数字)のみをエンコードします。以下にCodabarバーコードの例を示します。
  • Codabarバーコードサンプル
    コーダバー バーコード
  • Code128 : Code 128は、ISO/IEC 15417:2007で定義された高密度線形バーコードシンボル体系です。英数字または数字のみのバーコードに使用されます。以下はCode128バーコードの例です。
  • Code128バーコードのサンプル
    Code128バーコード
  • Code39 : Code 39は可変長の離散バーコードシンボル体系です。Code 39の仕様は43文字を定義し、大文字のアルファベット(AからZ)で構成されています。以下にCode39バーコードの例を示します。
  • Code39 バーコードサンプル
    Code39 バーコード
  • Code93 : Code 93 は1Dバーコード形式です。Code 93 は 1982 年にインターメックによって設計されたバーコードシンボルで、Code 39 よりも高密度でデータセキュリティを向上させるために作られました。Code 93 は次の ASCII 文字のみをエンコードすることをサポートしています: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - . $ / + % SPACE。以下は Code93 バーコードの例です。
  • Code93バーコードサンプル
    Code93バーコード
  • DataMatrix: Data Matrixは、マトリックスとも呼ばれる、正方形または長方形のパターンに配置された黒と白の「セル」またはモジュールで構成される2次元バーコードです。エンコードされる情報はテキストまたは数値データです。通常のデータサイズは数バイトから最大1556バイトまでです。以下はDataMatrixバーコードの例です。
  • DataMatrixバーコードサンプル
    データマトリックス バーコード
  • EAN13 : 国際商品番号(European Article Number、または EAN とも呼ばれる)は、特定の製造業者からの特定の包装構成での特定の小売製品タイプを識別するために、グローバル貿易で使用されるバーコードの記号体系および番号付けシステムを記述する標準です。EAN-13 は、長さが 12 または 13 桁の数字(数字)コンテンツのみをエンコードすることができます。短いバーコードには、番号の先頭に自動的に末尾のゼロ (000) が付加されます。以下に EAN13 バーコードの例を示します。
  • EAN13バーコードサンプル
    EAN13バーコード
  • EAN8 : EAN-8はEAN/UPCシンボル体系のバーコードで、より長い国際標準品番(EAN-13)コードから派生しています。EAN-8は7または8桁の長さの数字(桁)コンテンツのみを符号化できます。より短いバーコードには、番号の先頭に末尾にゼロ(000)が自動的に追加されます。以下はEAN8バーコードの例です
  • EAN8バーコードサンプル
    EAN8バーコード
  • IntelligentMail : Intelligent Mailの2Dバーコード形式。Intelligent Mailバーコード(「IMバーコード」または「USPS OneCodeバーコード」または「IMB」とも呼ばれる)は、アメリカ合衆国で使用される65バーのバーコードです。「Intelligent Mail」という用語は、アメリカ合衆国郵便公社が提供する国内郵便配達のサービスを指します。IMバーコードは、その前任者であるPOSTNETおよびPLANETよりも多くの情報と機能を提供することを目的としています。ご注意ください、IronBarcodeはこのタイプのバーコードを読み取ることしかできません。以下は、このタイプのバーコードの例です。
  • インテリジェントメール バーコード サンプル
    インテリジェントメールバーコード
  • ITF : ITF-14は、グローバル・トレード・アイテム・ナンバーをエンコードするためのGS1によるインタリーブド2オブ5(ITF)バーコードの実装です。ITF-14シンボルは通常、商品のパッケージレベル、例えば24缶入りのスープのケースボックスなどで使用されます。ITF-14は常に14桁をエンコードします。ITFは数値データのみをエンコードします。桁数が奇数の場合、自動的に「0」が前に付加されます。以下はITFバーコードの例です。
  • ITFバーコードサンプル
    ITFバーコード
  • MaxiCode : MaxiCode 2Dバーコード形式。MaxiCodeは、もともとユナイテッド・パーセル・サービスによって作成され使用されていたパブリックドメインの機械可読のシンボルシステムです。パッケージの発送の追跡と管理に適しており、バーコードに似ていますが、代わりに六角形のグリッドに配置されたドットを使用します。IronBarcodeは 読み取りのみ可能であることに注意してください。以下は、このタイプのバーコードの例です。
  • MaxiCodeバーコードサンプル
    マキシコード バーコード
  • MSI : MSIはMSIデータコーポレーションによって開発されたバーコードシンボルで、元のPlesseyコードシンボルに基づいています。この種類のバーコードは数値のみを受け入れます。以下はMSIタイプのバーコードの例です。
  • MSIバーコードのサンプル
    MSIバーコード
  • PDF417:PDF417は、主に輸送、身分証明書、在庫管理などのさまざまなアプリケーションで使用される積層型リニアバーコード記号形式です。PDFはPortable Data File(ポータブルデータファイル)の略です。417は、コード内の各パターンが4つのバーとスペースで構成され、各パターンが17ユニットの長さであることを示しています。PDF417のシンボル体系は、1991年にシンボル・テクノロジーズのDr. Ynjiun P. Wangによって発明されました。(Wang 1993)これはISO標準15438です。以下にPDF417バーコードの例を示します。
  • PDF417 バーコード サンプル
    PDF417バーコード
  • Plessey : Plesseyコードはパルス幅変調に基づく1D線形バーコードのシンボル体系であり、1971年にイギリスに拠点を置くThe Plessey Company PLCによって開発されました。このバーコードタイプは数値のみを受け入れます。以下はPlesseyバーコードの例です。
  • プレスマーバーコードサンプル
    プレスリーバーコード
  • QRCode : QRコード(Quick Response Codeから省略)は、1994年に日本の自動車産業向けに初めて設計されたマトリックスバーコード(または2次元バーコード)の商標です。バーコードは、取り付けられているアイテムに関する情報を含む機械読み取り可能な光学ラベルです。QRコードは、データを効率的に格納するために、4つの標準化されたエンコーディングモード(数字、英数字、バイト/バイナリ、漢字)を使用します。また、拡張機能も使用可能です。以下はQRコードバーコードの例です。
  • QRCodeバーコードサンプル
    QRコード バーコード
  • Rss14 : Reduce Space Symbology 14バーコードフォーマット。1Dバーコードまたはスタック型2Dバーコードを表す場合があります。RSS 14バーコード(Reduce Space Symbology)は、14桁のEAN.UCC商品識別コードを、適切に設定されたPOSレーザースキャナーで全方向からスキャンできるシンボルにエンコードします。これは、EAN InternationalとUniform Code Council, Inc.から提供される、空間制約のある識別用の最新のバーコードタイプです。RSSバーコードは、他のバーコードシンボルを許すにはサイズが小さすぎる食料品業界や医療分野をターゲットとして特定されています。IronBarcodeは読み取り専用で、このタイプのバーコードを処理できます。以下はRss14バーコードの例です。
  • 1D Rss14 バーコードサンプル
    1次元 RSS14 バーコード
    2D Rss14 バーコードサンプル
    2次元RSS14バーコード
  • UPCA : ユニバーサル商品コード(UPC)は、アメリカ合衆国、カナダ、イギリス、オーストラリア、ニュージーランド、ヨーロッパなどの国々で店舗内の商品追跡に広く使用されているバーコード記号です。UPC(技術的にはUPC-Aを指す)は、それぞれの商品にユニークに割り当てられた12桁の数字で構成されています。関連するEANバーコードとともに、UPCはGS1の仕様に基づき、販売地点での商品スキャンに主に使用されるバーコードです。UPCAは長さ12または13桁の数字のみをエンコードすることができます。短いバーコードには数字の先頭に自動的に先行ゼロ(000)が追加されます。以下はUPCAバーコードの例です
  • UPCAバーコードサンプル
    UPC-Aバーコード
  • UPCE : より小さなパッケージに12桁のUPCバーコードが収まらない場合のために、UPC-Eという「ゼロ抑制」バージョンのUPCが開発されました。このバージョンでは、ナンバーシステムの数字、メーカーコードの末尾のゼロ、および製品コードの先頭のゼロが省略されます。UPCEは7桁または8桁の数値(数字)内容のみをエンコードできます。以下にUPCEバーコードの例を示します。
  • UPCEバーコードサンプル
    UPCEバーコード

複数のバーコードを予期する

IronBarcodeはデフォルトで画像内のすべてのバーコードをスキャンし、画像全体をスキャンして読み取ったバーコードの値を文字列配列に追加します。 しかし、ユーザーが画像ファイル内の複数のバーコードを読み取りたくない場合、このプロパティをfalseに設定することで、バーコードリーダーはバーコードの値が見つかった時点でスキャンを停止します。 これにより、IronBarcodeのパフォーマンスと読取り速度が再び向上します。

イメージフィルターズ

BarcodeReaderOptionsに追加できるプロパティの1つは、画像フィルタのコレクションです。 画像フィルターは、IronBarcodeに供給される生の画像を前処理するために重要です。 BarcodeReaderOptions 内で画像フィルターを適用するには、ユーザーはまず使用する ImageFilter コレクションを開始して指定する必要があります。

MaxParallelThreads (最大並列スレッド数)

IronBarcodeは、並列スレッドの実行の量を有効にしたり調整したりすることも可能であり、これによりプロセスの速度と効率が向上します。 並列スレッドとは、異なるプロセッサコア上で複数のスレッドを同時に実行することを意味します。 IronBarcodeのMaxParallelThreadプロパティのデフォルト値は4です。ユーザーは、自分のマシンの能力やリソース量に基づいて調整することができます。

マルチスレッド

このプロパティは、IronBarcode が並行して複数の画像を読み取ることを可能にします。 MultihreadedのデフォルトはTrueです。そのため、複数のスレッドが自動的に管理され、バッチバーコード読み取りタスクのパフォーマンスを向上させます。

RemoveFalsePositive

このプロパティは、偽陽性のバーコード読み取りを削除します。 誤ったポジティブなバーコード読み取りとは、バーコードの値を誤って読み取ったにもかかわらず、それが有効であると認識されることを意味します。 これはシーケンシングエラーやバーコードラベリングまたは準備プロセスでのエラーなど、シーケンシングプロセスにおけるエラーが原因で発生する可能性があります。 したがって、RemoveFalsePositiveをtrueに設定することで、誤検出のバーコード読み取りを削除し、バーコード読み取りの精度を向上させます。 しかし、ユーザーが精度を犠牲にしてパフォーマンスを求める場合、このプロパティをFalseに設定すると役立ちます。このプロパティのデフォルト値はTrueです。

ScanMode

IronBarcodeが画像内のバーコードをスキャンし、検出する方法を定義します。

  • 自動: 自動画像前処理と最適なリーダーオプションが設定された状態でバーコードを読み取ります。 最良の結果とパフォーマンスのために推奨されます。
  • OnlyDetectionModel: 画像をスキャンしてバーコードを検出し、それらの位置をIronSoftware.Drawing.PointFの配列として返します。 このモードは検出されたバーコードを読み取りません。 それは各バーコードの位置のみを返します。
  • MachineLearningScan: 機械学習検出を使用して画像をスキャンし、バーコードを読み取ります。
  • OnlyBasicScan: バーコードを機械学習検出、画像の自動前処理、またはリーダーオプションの設定なしで読み取ります。

    このオプションはIronBarCode.Slim単独で使用できます。

読書速度

名前が示すように、Speedプロパティを使用すると、ユーザーはIronBarcodeリーダーのパフォーマンスをさらに最適化できます。 RemoveFalsePositive プロパティに似ており、このプロパティを調整すると、精度を犠牲にしてパフォーマンスが向上します。 それは、ReadingSpeed列挙型を受け入れます。以下に示すように4つのレベルがあります。

  • 高速: Speed プロパティをこの値に設定すると、最速のバーコード読み取りが可能になりますが、精度が低下します。 このプロセスでは画像の前処理をスキップするため、しばしばバーコード結果が空になります。 入力画像が鮮明でクリアな場合のみ、この設定を使用してください。
  • バランス: この設定は 推奨されます Speed プロパティに対して。 それは、バーコードリーダーが検出できるように、画像に対して軽い処理を適用してバーコード領域を明確にし、目立たせることで、精度と読み取り性能のバランスを取ります。 ほとんどの場合、この設定でIronBarcodeはバーコード画像を読み取り、正確な出力を生成するのに十分です。
  • 詳細: ReadingSpeed.Balanced 設定を使用しても読み取りからバーコード値を生成できなかった場合、ユーザーは ReadingSpeed.Detailed を選択することができます。 IronBarcodeは、画像に対して中程度の処理を行い、バーコード領域をさらに明確にし、バーコードリーダーがバーコードを検出しやすくします。 この設定は、小さなまたは不鮮明なバーコード画像を検出するのに非常に便利です。
  • ExtremeDetail: この設定は、CPUを多用するプロセスのため最も推奨されない設定です。バーコード画像に対して大規模な処理が行われ、リーダーがバーコードを読み取ることができるようになります。 これはIronBarcodeの読み取りパフォーマンスを大幅に低下させます。 ユーザーは、この設定を選択する前に、画像の前処理/フィルター適用を行うことを推奨します。

    ただし、この設定はCPU集約型であり、読み取りパフォーマンスに影響を与える可能性があることに注意してください。 ユーザーは、この設定を使用する前に他の設定を試してみることをお勧めします。 ReadingSpeed.DetailedRemoveFalsePositive を "True" に設定した組み合わせは、コンソールに警告を出力します。 ただし、読み取りには影響せず、無視できます。 -->

    ただし、この設定はCPU集約型であり、読み取りパフォーマンスに影響を与える可能性があることに注意してください。 ユーザーは、この設定を使用する前に他の設定を試してみることをお勧めします。 ReadingSpeed.ExtremeDetailRemoveFalsePositiveを「True」に設定した組み合わせで、コンソールに警告が表示されます。 ただし、読み取りには影響せず、無視できます。 -->

拡張コード39モードを使用

この設定により、コード39形式のバーコードが拡張モードで読み取り、解釈され、完全なASCII文字セットが適用されるようになります。 UseCode39ExtendedModeTrueに設定すると、Code39バーコードのより正確な読み取りが可能になります。

画像からバーコードを高度読み取り

すべてのオプションを把握し、ユーザーがパフォーマンスや精度を向上させるためにどのように調整できるかを学んだところで、これをコードにどのように適用できるか見てみましょう。 以下のコードスニペットは、デモンストレーションを行うものです。

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-2.cs
using IronBarCode;
using System;

BarcodeReaderOptions myOptions = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional, //or AllTwoDimensional
    ExpectMultipleBarcodes = true, // Default is true
    MaxParallelThreads = 2, // Default is 4
    Speed = ReadingSpeed.Detailed, // 4 levels of speed. Default is Balanced
    CropArea = new IronSoftware.Drawing.Rectangle(x: 242, y: 1124, width: 359, height: 378), // Units are in px
    ImageFilters = new ImageFilterCollection { new BinaryThresholdFilter() }, // Assign to image filter object name
    Multithreaded = true, // Default is true
    UseCode39ExtendedMode = true, // Default is true

};

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg", myOptions); // Image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myOptions As New BarcodeReaderOptions() With {
	.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
	.ExpectMultipleBarcodes = True,
	.MaxParallelThreads = 2,
	.Speed = ReadingSpeed.Detailed,
	.CropArea = New IronSoftware.Drawing.Rectangle(x:= 242, y:= 1124, width:= 359, height:= 378),
	.ImageFilters = New ImageFilterCollection From {New BinaryThresholdFilter()},
	.Multithreaded = True,
	.UseCode39ExtendedMode = True
}

Private myBarcode = BarcodeReader.Read("image_file_path.jpg", myOptions) ' Image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
$vbLabelText   $csharpLabel

コードスニペットから、BarcodeReaderOptionsを使用するには、まずそれを初期化し、その後、上記のプロパティに従ってBarcodeReaderOptionsのプロパティを決定して調整できることがわかります。 初期化されたBarcodeReaderOptionsは、その後、画像ファイルと一緒にBarcodeReader.Read()メソッドの引数として使用できます。これにより、画像からバーコードを読み取る際にBarcodeReaderOptionsのすべての設定が適用されます。

Hairil related to 画像からバーコードを高度読み取り
ハイリル ハシミ ビン オマル
ソフトウェアエンジニア
すべての優れたエンジニアと同じように、Hairilは熱心な学習者です。C#、Python、およびJavaの知識を洗練させ、その知識を活かしてIron Softwareのチームメンバーに価値を提供しています。Hairilはマレーシアのマラ工科大学(Universiti Teknologi MARA)で化学およびプロセス工学の学士号を取得し、Iron Softwareチームに加わりました。