IRONSOFTWAREHOME
VIDÉOS

Passer de Kit ML de GoogleBarcode Scanning à IronBarcode

Curtis Chau
Curtis Chau
Updated: 20 juin 2026

Ce guide s'adresse aux équipes se trouvant dans l'une des deux situations suivantes : soit vous portez une application Android vers .NET MAUI ou .NET 9 et devez remplacer le lecteur de codes-barres de ML Kit par une alternative gérée, soit on vous a recommandé Kit ML de Googlelors d'une discussion sur les codes-barres multiplateformes et vous avez découvert — en voulant ajouter le package NuGet — qu'il n'existe pas.

Google ML Kit Barcode Scanning est une bibliothèque native pour Android et iOS. Il est fourni comme une dépendance Maven (com.google.mlkit:barcode-scanning:17.3.0 intégré ou com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 non intégré) pour Kotlin/Java et comme un CocoaPod (GoogleMLKit/BarcodeScanning) pour Swift. ML Kit est un produit autonome depuis juin 2020 et ne nécessite plus Firebase, mais il n'y a pas de SDK .NET officiel, pas de dotnet add package google-mlkit-barcode, et pas d'API C# de Google. Des liaisons Xamarin/MAUI maintenues par la communauté sont apparues au fil des ans, mais elles se cassent lorsque ML Kit met à jour son SDK sous-jacent.

IronBarcode est une bibliothèque .NET native qui s'installe depuis NuGet, s'intègre aux modèles .NET standard et fonctionne sous Windows, Linux, macOS, Docker, Azure et AWS. Ce guide explique comment traduire les modèles que vous avez écrits en Kotlin ou Java en code C# équivalent.

Le contexte du portage

Lors du passage de ML Kit à IronBarcode, plusieurs éléments changent structurellement, et pas seulement syntaxiquement :

Les callbacks deviennent des valeurs de retour. ML Kit utilise l'API Task d'Android avec addOnSuccessListener et addOnFailureListener. Le BarcodeReader.Read() d'IronBarcode retourne une collection de manière synchrone. Vous l'itérez directement. Aucun enregistrement de rappel, aucune coordination des threads.

Pas d'objet scanner. ML Kit vous oblige à construire un objet BarcodeScannerOptions, à appeler BarcodeScanning.getClient(options) pour obtenir une instance de scanner, puis à appeler scanner.process(inputImage). Code-barres IronBarcode utilise des méthodes statiques — BarcodeReader.Read() est le point d'entrée. Il n'y a aucune instance à gérer ou à supprimer.

Pas de construction InputImage. Le InputImage de ML Kit doit être construit à partir d'une source spécifique à Android : InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation) ou InputImage.fromMediaImage(image, rotation). Code-barres IronBarcode accepte une chaîne de chemin de fichier, un Stream, un byte[] ou un System.Drawing.Bitmap. Aucun contexte Android, aucune URI, aucune métadonnée de rotation.

Pas de Google Play Services. Le modèle non groupé de ML Kit fonctionne via les Google Play Services. La variante groupée embarque le modèle dans l'APK (ajoutant environ 2,4 Mo) et évite la vérification des Play Services, mais aucune des variantes n'est disponible sur les cibles .NET. Code-barres IronBarcode ne présente aucune dépendance de ce type ; il fonctionne de manière identique sur toutes les plateformes prises en charge par .NET .

Configuration rapide en .NET

Supprimez tous les packages de liaison Xamarin/MAUI ML Kit présents dans votre projet, puis installez IronBarcode:

dotnet add package BarCode

Ajoutez la clé de licence au démarrage de l'application — dans Program.cs, MauiProgram.cs ou Startup.cs selon le type de votre application :

// NuGet: dotnet add package BarCode
using IronBarCode;

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

La licence peut être définie à tout moment avant le premier appel BarcodeReader.Read() ou BarcodeWriter.CreateBarcode(). Un essai gratuit est disponible ; Le mode d'essai génère des filigranes pour les codes-barres, mais n'en restreint pas la lecture.

Lecture des codes-barres : Kotlin vers C#

Lecture de code-barres unique de base

Voici un exemple typique de lecture ML Kit en Kotlin, scannant un seul code QR à partir d'un URI de fichier :

// 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

L'équivalent en C# avec IronBarcode:

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}");
}

Le résultat est immédiatement disponible en tant que valeur de retour. barcode.Value correspond à barcode.rawValue. barcode.Format correspond à barcode.format. La gestion des erreurs utilise un bloc try/catch standard au lieu d'un écouteur d'erreurs séparé.

Lecture de plusieurs codes-barres

ML Kit scanne un seul InputImage et retourne une liste. Pour plusieurs codes-barres dans une image, vous itérez la liste du listener de succès :

// 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

Avec IronBarcode, définissez ExpectMultipleBarcodes = true dans BarcodeReaderOptions et itérez la collection de résultats :

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);
}

Spécification du format : définir BarcodeFormats sur BarcodeReaderOptions

ML Kit vous oblige à spécifier les formats de recherche via setBarcodeFormats(). Si vous l'omettez, ML Kit effectue une recherche dans tous les formats. Code-barres IronBarcode fonctionne de la même manière : omettre les contraintes de format permet de tout rechercher, mais spécifier les types attendus améliore les performances.

Kit ML KotlinCode-barres IronBarcode C#
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_FORMATSOmettez ExpectBarcodeTypes

Utilisation des indicateurs de format dans 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);

La combinaison OU bit à bit fonctionne de la même manière que la liste de format vararg de ML Kit.

Accès au résultat : valeur brute et format

L'objet résultat de ML Kit expose rawValue (un String?) et format (une constante Int). Le résultat d'IronBarcode expose Value (un string) et Format (une valeur énumérée BarcodeEncoding).

// Kit 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
// Code-barres IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
C#

barcode.Value est toujours une chaîne non nulle dans Code-barres IronBarcode — si la lecture a réussi, la valeur est présente. barcode.Format est le membre énuméré BarcodeEncoding, que vous pouvez comparer directement : if (barcode.Format == BarcodeEncoding.QRCode).

Qu'est-ce qui change dans .NET ?

Une API synchrone remplace les fonctions de rappel. Il s'agit du changement structurel le plus important. Le scanner.process() de ML Kit retourne un Task<List<Barcode>> au sens Android — vous chaînez les listeners. Le BarcodeReader.Read() d'IronBarcode retourne le résultat en ligne. Si vous avez besoin de l'exécuter hors du thread UI dans une application MAUI, enveloppez-le dans 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;
    });
}

Pas de paramètre de contexte. Chaque appel de ML Kit qui construit un InputImage nécessite un Context Android. Code-barres IronBarcode n'a besoin que d'un chemin de fichier ou d'un flux. Supprimer le contexte d'exécution des codes-barres simplifie considérablement le code.

Pas de Google Play Services. Le modèle standard de ML Kit fonctionne via Play Services — BarcodeScanning.getClient() vérifie la disponibilité de Play Services à l'exécution et lève une exception si non disponible. Code-barres IronBarcode n'effectue aucun contrôle de service en cours d'exécution. Soit elle lit l'image, soit elle lève une exception standard.

Gestion standard des exceptions. Le addOnFailureListener de ML Kit reçoit une sous-classe de Exception Java. En .NET, les échecs apparaissent sous la forme d'exceptions System.Exception standard, capturables de manière classique avec try/catch.

Lecture de documents PDF

ML Kit ne prend pas en charge le format PDF. InputImage.fromFilePath() avec un URI .pdf échoue soit ou ne lit que la première page en tant qu'image rasterisée, selon la version Android. Si votre scénario de migration implique des documents (traitement de factures, manifestes logistiques, numérisation de formulaires), Code-barres IronBarcode gère nativement les 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}");
}

Aucune étape d'extraction d'image, aucune bibliothèque PDF tierce, aucune boucle d'itération de page avec rendu séparé. Indiquez le chemin d'accès au PDF et récupérez toutes les valeurs des codes-barres ainsi que leurs numéros de page.

Nouvelles capacités : Génération

ML Kit ne génère pas de codes-barres — il ne fait que les lire. Si votre application portée a besoin de produire des étiquettes, des tickets ou des codes QR, Code-barres IronBarcode couvre ces besoins avec le même package.

Code 128 pour les étiquettes d'expédition :

using IronBarCode;

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

Génération de code QR :

using IronBarCode;

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

Code QR avec logo et couleur :

using IronBarCode;

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

Renvoyer le code-barres sous forme de tableau d'octets pour une réponse HTTP :

using IronBarCode;

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

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

Aucun de ces modèles n'a d'équivalent dans ML Kit. Ce sont de nouvelles fonctionnalités disponibles car vous travaillez avec une bibliothèque de codes-barres .NET complète plutôt qu'avec un scanner uniquement mobile.

Traitement par lots côté serveur

ML Kit traite une image par appel, nécessite un environnement d'exécution Android/iOS et ne prend pas en charge l'exécution côté serveur. Code-barres IronBarcode traite les fichiers en boucle, s'exécute sous ASP.NET Coreet s'adapte normalement :

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}");
}

Ce schéma — lecture d'un dossier d'images, extraction des codes-barres, agrégation des résultats — n'est pas possible avec ML Kit. Il s'agit d'un flux de travail standard Code-barres IronBarcode .

Comparaison des fonctionnalités

FonctionKit ML de GoogleCode-barres IronBarcode
Package NuGet .NETNoneBarCode
API C# / .NETNoneOui
Lecture de codes-barresOui (Android/iOS)Oui (toutes les plateformes)
génération de codes-barresNonOui
génération de code QRNonOui
Intégration de logo QRNonOui
Entrée PDFNonOui
Prise en charge des documents multipagesNonOui
Entrée caméra/imageOuiVia fichier image
Déploiement côté serveurNonOui
ASP.NET CoreNonOui
Azure FunctionsNonOui
Docker / LinuxNonOui
Services Google Play requisVariante non groupée uniquementNon
Dépendance FirebaseNon (autonome depuis juin 2020)Non
API .NET synchroneNonOui
Compatible avec l'injection de dépendancesNonOui (API statique)
Option ExpectMultipleBarcodesListe de résultats viaBarcodeReaderOptions
Spécification du formatsetBarcodeFormats()ExpectBarcodeTypes
Compromis vitesse/précisionFixe (basé sur un modèle)enum ReadingSpeed
TarifsGratuit (sur l'appareil, uniquement mobile)À partir de 749 $ (Lite) perpétuel
PlateformesAndroid, iOSWindows, Linux, macOS, Docker, Azure, AWS

Liste de contrôle de la migration

Si vous portez un code source Android ou remplacez une liaison non officielle du kit Xamarin ML, recherchez ces modèles dans votre projet et appliquez les traductions ci-dessus :

  • com.google.mlkit:barcode-scanning dans les fichiers Gradle → supprimer, ajouter BarCode NuGet
  • BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
  • BarcodeScanning.getClient(options) → retirer (pas d'instance de scanner dans IronBarcode)
  • InputImage.fromFilePath(context, uri) → argument de chaîne de chemin de fichier
  • InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream) ou surcharge de tableau d'octets
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> } → itérer la valeur de retour de Read()
  • .addOnFailureListener { e -> } → try/catch autour de Read()
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATS → omettre ExpectBarcodeTypes
  • using Google.MLKit.BarcodeScanning; (liaison Xamarin) → using IronBarCode;
  • IronBarCode.License.LicenseKey doit être défini dans MauiProgram.cs, Program.cs ou Startup.cs

Le principal travail consiste à passer d'un code basé sur des rappels à un code synchrone. Les constantes de format et les noms des champs de résultat sont des correspondances directes. La prise en charge des fichiers PDF et de la génération est purement additive ; elle ne nécessite aucune migration, seulement du nouveau code.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise