IRONSOFTWAREHOME
ビデオ

Google ML KitバーコードスキャニングからIronBarcodeへの移行

Curtis Chau
Curtis Chau
Updated: 2026年6月20日

このガイドは、次の2つの状況のいずれかに該当するチームを対象としています。1つ目は、Androidアプリケーションを.NET MAUIまたは.NET 9に移植していて、ML Kitのバーコードスキャナーを管理された代替手段に置き換える必要がある場合、2つ目は、クロスプラットフォームのバーコードに関する議論でGoogle ML Kitが推奨されたものの、 NuGetパッケージを追加しようとしたときにそれが存在しないことに気づいた場合です。

Google ML Kit バーコードスキャンは、Android および iOS 用のネイティブライブラリです。 Maven依存関係として出荷します(com.google.mlkit:barcode-scanning:17.3.0 バンドルまたは com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 非バンドル)Kotlin/Java用、CocoaPod (GoogleMLKit/BarcodeScanning)としてSwift用。 ML Kitは2020年6月からスタンドアロン製品であり、Firebaseを必要としなくなりましたが、公式 for .NET SDKはなく、dotnet add package google-mlkit-barcodeもなく、GoogleからのファーストパーティC# APIもありません。 コミュニティが保守するXamarin/MAUIバインディングは年々登場していますが、ML Kitがその基礎となるSDKをアップデートする際に壊れます。

IronBarcodeは、 NuGetからインストールでき、標準的な.NETパターンと統合され、Windows、Linux、macOS、Docker、Azure、AWS上で動作するネイティブ.NETライブラリです。 このガイドでは、KotlinまたはJavaで記述したパターンを同等のC#コードに変換する方法を示します。

移植のコンテキスト

ML KitからIronBarcodeに移植する際には、構文だけでなく構造的にもいくつかの点が変わります。

コールバックが戻り値になります。 ML KitはAndroidのTask APIをaddOnFailureListenerと共に使用します。 IronBarcodeのBarcodeReader.Read()はコレクションを同期的に返します。 直接反復処理します。 コールバック登録なし、スレッド調整なし。

スキャナーオブジェクトなし。 ML Kitではscanner.process(inputImage)を呼び出す必要があります。 IronBarcodeは静的メソッドを使用します—BarcodeReader.Read()がエントリーポイントです。 管理または処分すべきインスタンスは存在しません。

InputImageの構築なし。 ML KitのInputImageはAndroid固有のソースから構築する必要があります: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation), またはInputImage.fromMediaImage(image, rotation)。 IronBarcodeはファイルパス文字列、Stream, byte[], またはSystem.Drawing.Bitmapを受け入れます。 Androidコンテキストも、URIも、回転メタデータもありません。

Google Playサービスなし。 バンドルされていないML KitモデルはGoogle Playサービスを通じて実行されます。 バンドルされたバリアントは、モデルをAPK内に配信し(約2.4 MB追加)、Playサービスチェックを回避しますが、どちらのバリアントも.NETターゲットでは使用できません。 IronBarcodeにはそのような依存関係はなく、 .NETがサポートするあらゆるプラットフォームで同じように動作します。

.NETでのクイックセットアップ

プロジェクト内にXamarin/MAUI ML Kitのバインディングパッケージが存在する場合はすべて削除してから、 IronBarcodeをインストールしてください。

dotnet add package BarCode

アプリケーション起動時にライセンスキーを追加してください—Program.cs, MauiProgram.cs, またはStartup.csにおいて、アプリタイプに応じて。

// NuGet: dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

ライセンスは最初のBarcodeWriter.CreateBarcode()呼び出しの前のいつでも設定できます。 無料トライアルをご利用いただけます。 トライアルモードでは透かしによってバーコードが生成されますが、読み取りには影響しません。

バーコードの読み取り:KotlinからC#へ

基本的な単一バーコード読み取り

以下は、ファイルURIから単一のQRコードをスキャンする、Kotlinで記述された典型的なML Kitの読み込み例です。

// Android Kotlin — ML Kit
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        val barcode = barcodes.firstOrNull()
        if (barcode != null) {
            Log.d("MLKit", "Value: ${barcode.rawValue}")
            Log.d("MLKit", "Format: ${barcode.format}")
        }
    }
    .addOnFailureListener { e ->
        Log.e("MLKit", "Scan failed: ${e.message}")
    }
Text

IronBarcodeを使用したC#での同等のコード:

using IronBarCode;

try
{
    var results = BarcodeReader.Read("captured-image.jpg");
    var barcode = results.FirstOrDefault();
    if (barcode != null)
    {
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Format: {barcode.Format}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Scan failed: {ex.Message}");
}

結果は戻り値として即座に取得できます。 barcode.rawValueに対応しています。 barcode.formatに対応しています。 エラー処理では、別途エラーリスナーを用意するのではなく、標準的なtry/catchを使用します。

複数バーコード読み取り

ML Kitは1つのInputImageをスキャンし、リストを返します。1つの画像に複数のバーコードがある場合は、サクセスリスナーのリストを反復処理します:

// Android Kotlin — ML Kit, multiple barcodes
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        for (barcode in barcodes) {
            val rawValue = barcode.rawValue
            val format = barcode.format
            processBarcode(rawValue, format)
        }
    }
    .addOnFailureListener { e -> Log.e("MLKit", e.message ?: "Unknown error") }
Text

IronBarcodeでは、BarcodeReaderOptions内で設定し、結果コレクションを反復処理します:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
    ProcessBarcode(barcode.Value, barcode.Format);
}

フォーマット指定: setBarcodeFormats を BarcodeReaderOptions に設定

ML Kitでは、setBarcodeFormats()を介してどのフォーマットを探すか指定する必要があります。 省略した場合、ML Kitはすべてのフォーマットを検索します。 IronBarcode同様の仕組みで動作します。フォーマット制約を省略するとすべてが検索されますが、想定される型を指定するとパフォーマンスが向上します。

MLキット KotlinIronBarcode C# (IronBarcodeC#)
Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
Barcode.FORMAT_CODE_39BarcodeEncoding.Code39
Barcode.FORMAT_CODE_93BarcodeEncoding.Code93
Barcode.FORMAT_EAN_13BarcodeEncoding.EAN13
Barcode.FORMAT_EAN_8BarcodeEncoding.EAN8
Barcode.FORMAT_UPC_ABarcodeEncoding.UPCA
Barcode.FORMAT_UPC_EBarcodeEncoding.UPCE
Barcode.FORMAT_PDF417BarcodeEncoding.PDF417
Barcode.FORMAT_DATA_MATRIXBarcodeEncoding.DataMatrix
Barcode.FORMAT_AZTECBarcodeEncoding.Aztec
Barcode.FORMAT_ITFBarcodeEncoding.ITF
Barcode.FORMAT_CODABARBarcodeEncoding.Codabar
Barcode.FORMAT_ALL_FORMATSExpectBarcodeTypes 省略

IronBarcodeでフォーマットフラグを使用する方法:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};

var results = BarcodeReader.Read("product-image.jpg", options);

ビットごとのOR演算は、ML Kitの可変長引数フォーマットリストと同じように機能します。

結果へのアクセス: rawValue とフォーマット

ML Kitの結果オブジェクトは、Int定数)を公開します。 IronBarcodeの結果は、BarcodeEncoding列挙値)を公開します。

// MLキット Kotlin — result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
Text
//IronBarcode C# (IronBarcodeC#)— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
C#

IronBarcodeではbarcode.Valueは常にnullでない文字列です—読み取りが成功した場合、値が存在します。 BarcodeEncoding列挙メンバであり、直接比較できます: if (barcode.Format == BarcodeEncoding.QRCode)

.NETで何が変わったのか

**コールバックではなく同期APIを採用。**これが最も重要な構造変更点です。 ML KitのTask<List<Barcode>>を返します—リスナーをチェーンします。 IronBarcodeのTask.Run()でラップしてください:

using IronBarCode;

// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
    // update UI on main thread
    MainThread.BeginInvokeOnMainThread(() =>
    {
        ResultLabel.Text = barcode.Value;
    });
}

コンテキストパラメータなし。 ML Kitのすべての呼び出しでInputImageを構築するにはAndroid Contextが必要です。 IronBarcodeに必要なのは、ファイルパスまたはストリームのみです。 バーコードロジックからコンテキストスレッド処理を排除することで、コードが大幅に簡素化されます。

Google Play Servicesなし。 標準のML Kitモデルは、Play Servicesを介して実行されます—BarcodeScanning.getClient()は実行時にPlay Servicesの可用性を確認し、利用できない場合はスローします。 IronBarcodeには実行時サービスチェック機能はありません。 画像を読み込むか、標準例外をスローするかのどちらかです。

標準例外処理。 ML KitのExceptionサブクラスを受け取ります。 .NETでは、失敗は標準のSystem.Exceptionスローとして表面化し、通常の方法でtry/catchでキャッチできます。

PDF文書の読み込み

ML KitはPDFをサポートしていません。 URI InputImage.fromFilePath() の場合、Androidのバージョンによっては失敗するか、ラスター画像として最初のページのみを読むかのいずれかです。 文書(請求書処理、物流マニフェスト、フォームスキャンなど)を扱う場合、 IronBarcodeはPDFをネイティブに処理できます。

using IronBarCode;

// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format}{barcode.Value}");
}

画像抽出ステップなし、サードパーティ製PDFライブラリなし、ページ反復ループと個別レンダリングなし。 PDFファイルのパスを渡すと、すべてのバーコード値とそのページ番号が返されます。

新しい機能:生成

ML Kitはバーコードを生成するのではなく、読み取るだけです。 移植後のアプリケーションでラベル、チケット、またはQRコードを作成する必要がある場合、 IronBarcodeは同じパッケージでそれらの機能も提供します。

配送ラベル用コード128:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
    .ResizeTo(400, 120)
    .SaveAsPng("shipping-label.png");

QRコード生成:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
    .SaveAsPng("tracking-qr.png");

ロゴとカラー入りのQRコード:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
    .AddBrandLogo("company-logo.png")
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
    .SaveAsPng("product-qr.png");

HTTPレスポンスのバーコードをバイト配列として返します。

using IronBarCode;

// In an.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

return File(barcodeBytes, "image/png");
C#

これらのパターンには、ML Kitに相当するものはありません。 これらは、モバイル専用スキャナーではなく、完全な.NETバーコードライブラリを使用しているため利用できる新しい機能です。

サーバーサイドバッチ処理

ML Kitは呼び出しごとに1枚の画像を処理し、Android/iOSランタイムを必要とし、サーバーサイド実行の概念はありません。 IronBarcodeはファイルをループ処理し、 ASP.NET Core上で動作し、通常通りスケーリングします。

using IronBarCode;

// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();

foreach (var file in imageFiles)
{
    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Faster,
        ExpectMultipleBarcodes = false
    };

    var results = BarcodeReader.Read(file, options);
    foreach (var barcode in results)
    {
        allResults.Add((file, barcode.Value, barcode.Format));
    }
}

// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
    Console.WriteLine($"{file}: [{format}] {value}");
}

画像フォルダを読み込み、バーコードを抽出し、結果を集計するという一連の処理は、ML Kitでは実行できません。 これは標準的なIronBarcodeのワークフローです。

機能比較

フィーチャーGoogle MLキットIronBarcode
.NET NuGetパッケージNoneBarCode
C# / .NET APINoneはい
バーコード読み取りはい(Android/iOS)はい(全プラットフォーム対応)
バーコード生成なしはい
QRコード生成なしはい
QRロゴ埋め込みなしはい
PDF入力なしはい
複数ページ文書のサポートなしはい
カメラ/フレーム入力はい画像ファイル経由
サーバーサイドへのデプロイなしはい
.NET Coreなしはい
Azure Functionsなしはい
Docker / Linuxなしはい
Google Play開発者サービスが必要ですアンバンドルバリアントのみなし
Firebase依存なし(2020年6月以降独立)なし
同期型.NET APIなしはい
依存性注入に対応なしはい(静的API)
ExpectMultipleBarcodes オプション結果リスト経由BarcodeReaderOptions
フォーマット仕様setBarcodeFormats()ExpectBarcodeTypes
速度と精度のトレードオフ固定(モデルベース)ReadingSpeed 列挙
価格無料(オンデバイス、モバイルのみ)$999(Lite)から(永続)
プラットフォームAndroid、iOSWindows、Linux、macOS、Docker、Azure、AWS

移行チェックリスト

Androidのコードベースを移植する場合、または非公式のXamarin ML Kitバインディングを置き換える場合は、プロジェクト内でこれらのパターンを検索し、上記の翻訳を適用してください。

  • Gradleファイルのcom.google.mlkit:barcode-scanning →削除、BarCode NuGet追加
  • BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
  • BarcodeScanning.getClient(options) →削除(IronBarcodeにスキャナーインスタンスなし)
  • InputImage.fromFilePath(context, uri) →ファイルパス文字列引数
  • InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream)またはバイト配列オーバーロード
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> }Read()の戻り値を反復
  • .addOnFailureListener { e -> }Read()周囲にtry/catch
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATSExpectBarcodeTypes 省略
  • using Google.MLKit.BarcodeScanning; (Xamarinバインディング) →using IronBarCode;
  • MauiProgram.cs, Program.cs, またはStartup.csに設定する必要があります

コールバックベースのコードから同期コードへの構造的な変更が主な作業内容です。 書式定数と結果フィールド名は直接対応しています。 PDFおよび生成機能のサポートは完全に付加的な機能であり、移行作業は不要で、新しいコードを追加するだけで済みます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。