IRONSOFTWAREHOME
COMPARAR COM OUTROS COMPONENTES

Código de barras do Google ML Kit Scanning vs IronBarcode: O que os Desenvolvedores .NET Precisam Saber

Curtis Chau
Curtis Chau
Updated: 26 de abril de 2026

A capacidade de leitura de código de barras do Google ML Kit no Android é realmente impressionante. Ele alimenta o Google Lens, lida com códigos danificados e parcialmente ocultos, funciona no dispositivo sem necessidade de chamada de rede e suporta uma ampla gama de formatos 1D e 2D. Quando os desenvolvedores .NET se deparam com isso em uma comparação de bibliotecas de código de barras, esses fatos são precisos. O que os artigos de comparação frequentemente omitem é que o ML Kit não possui SDK for .NET , pacote NuGet ou API para C#. Este artigo destina-se a desenvolvedores que encontraram o ML Kit em uma lista e precisam entender o que "usar o ML Kit em um projeto .NET " realmente significa na prática — e como é o equivalente em código gerenciado.

O que é a leitura de código de barras do Google ML Kit?

O Código de barras do Google ML Kit Scanning é uma biblioteca nativa para dispositivos móveis. Essa não é uma limitação que possa ser contornada; Trata-se do design do produto. O ML Kit é enviado em duas versões:

  • Android: Distributed via Google Maven as com.google.mlkit:barcode-scanning (Kotlin/Java). Requer Google Play Services no dispositivo de destino. Processa objetos InputImage construídos a partir de quadros de câmera, URIs de arquivos ou bitmaps.
  • iOS: Distributed via CocoaPods as GoogleMLKit/BarcodeScanning. Utiliza Swift ou Objective-C.

Não há dotnet add package google-mlkit-barcode. Não há using Google.MLKit.BarcodeScanning;. O Google não publica uma biblioteca .NET para o ML Kit.

Bindings para Xamarin e MAUI mantidos pela comunidade (tais como BarcodeScanning.Native.Maui ou Xamarin.GooglePlayServices.MLKit.BarcodeScanning) existiram em diversos momentos, mas compartilham um desafio comum: o ML Kit atualiza seus SDKs de Android e iOS com frequência, e projetos de binding mantidos por indivíduos ou pequenas equipes podem ficar para trás ou quebrar quando a API subjacente muda. Não há um pacote NuGet .NET de primeira mão do Google para o scanner de códigos de barras do ML Kit.

O que o ML Kit faz bem

Entender por que o ML Kit aparece em comparações de códigos de barras é um contexto útil. Não Android nativo:

  • Inferência no dispositivo: Sem comunicação com o servidor. O modelo do ML Kit é executado localmente usando o Google Play Services, o que significa baixa latência e nenhuma dependência de rede no momento da análise.
  • Tolerância a danos: O modelo de aprendizado de máquina lida com códigos de barras danificados, parcialmente obscurecidos ou de baixa resolução melhor do que muitos decodificadores baseados em limiares. Isso representa um diferencial real para aplicativos voltados ao consumidor que analisam códigos do mundo real.
  • Integração com o Google Lens: o scanner do ML Kit utiliza a mesma tecnologia que alimenta a detecção de código de barras do Google Lens. Isso é um sinal de alta qualidade.
  • Ampla variedade de formatos em dispositivos móveis: Código QR, EAN-13, EAN-8, Code 128, Code 39, Code 93, Codabar, ITF, PDF417, Data Matrix, asteca e UPC-A/UPC-E são todos suportados nativamente.
  • Configuração zero: Um pequeno trecho de código Kotlin de três linhas pode produzir um scanner funcional sem a necessidade de ajustar limites ou escolher uma estratégia de decodificação.

Essas são qualidades legítimas. A questão para os desenvolvedores .NET não é que o ML Kit seja ruim — é que o ML Kit não está disponível para eles sem um trabalho significativo.

A realidade do desenvolvimento .NET

Quando um desenvolvedor .NET precisa ler códigos de barras, o caminho do ML Kit na prática se parece com isto:

Sem API async/await C#. O ML Kit usa a API Task do Android com callbacks addOnSuccessListener e addOnFailureListener. Esses não mapeiam para o Task<t> e await do .NET. Qualquer camada de vinculação precisa se adaptar entre o comportamento assíncrono baseado em callbacks do Android e a TPL do .NET — uma tradução complexa que as vinculações da comunidade fazem de forma inconsistente.

Sem integração de injeção de dependência .NET. BarcodeScanning.getClient(options) é uma chamada de fábrica estática que retorna um objeto BarcodeScanner do Android. Não há interface .NET para registrar, não IServiceCollection.AddBarcodeScanner(), nenhuma maneira de injetá-lo em middleware ASP.NET Core ou Azure Functions.

Não há suporte para ASP.NET Core ou Azure Functions. O ML Kit requer o contexto de execução do Android ou iOS. Não pode ser executado em um processo de API da Web no Linux, em uma Função do Azure, no Windows Server ou em um contêiner Docker. Se o seu caso de uso for o processamento de código de barras no servidor — um endpoint REST que aceita uma imagem e retorna dados de código de barras, um pipeline de processamento de documentos, um trabalho em lote — o ML Kit é arquiteturalmente incompatível, independentemente da disponibilidade de qualquer integração.

Apenas entrada de câmera ou quadro — sem arquivo, sem PDF. O InputImage do ML Kit pode ser construído a partir de um Bitmap, um ByteBuffer ou de um URI de arquivo no sistema de arquivos Android. Não existe o conceito de processar um documento PDF, iterar páginas ou lidar com um TIFF de várias páginas. O processamento de documentos no servidor está completamente fora do escopo do produto.

Dependência do Google Play Services (modelo desvinculado). A variante de modelo ML desvinculada (com.google.android.gms:play-services-mlkit-barcode-scanning) roda através do Google Play Services. Dispositivos sem Play Services — builds Android personalizados, certos dispositivos empresariais, tablets Amazon Fire — não podem usar essa variante. A opção de modelo vinculado (com.google.mlkit:barcode-scanning) funciona sem Play Services, mas adiciona cerca de 2,4 MB ao tamanho do APK.

Adaptando o código do Android ML Kit for .NET

Se você já possui um aplicativo Android com leitura de código de barras ML Kit e está migrando-o para .NET MAUI ou .NET 9, aqui está a tradução. O código Kotlin utiliza o padrão de retorno de chamada (callback) do ML Kit; O código C# utiliza a API síncrona do IronBarcode.

// Android Kotlin: ML Kit
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE, Barcode.FORMAT_CODE_128)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, uri)
scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        for (barcode in barcodes) {
            val rawValue = barcode.rawValue
            val format = barcode.format
        }
    }
    .addOnFailureListener { e -> Log.e("MLKit", e.message ?: "") }
Text
// .NET C#: IronBarcode
// NuGet: dotnet add package BarCode
using IronBarCode;

var results = BarcodeReader.Read("captured-image.jpg");
foreach (var barcode in results)
{
    Console.WriteLine($"{barcode.Format}: {barcode.Value}");
}

A diferença estrutural vai além da sintaxe. A versão do ML Kit configura um objeto scanner, constrói um InputImage, chama scanner.process() e registra callbacks para sucesso e falha. Se você precisar do resultado antes de prosseguir, deve coordenar a execução de callback com o restante da sua lógica — tipicamente através de um CountDownLatch em Java ou coroutines em Kotlin.

O BarcodeReader.Read() do IronBarcode retorna uma coleção de resultados de forma síncrona. Você executa o processo imediatamente. Não há registro de callback, nenhuma sincronização de threads, nenhum objeto scanner separado para gerenciar.

Para equipes que estão migrando código Android, a tradução de padrões para cenários com múltiplos códigos de barras é a seguinte:

// .NET C#:IronBarcode— reading multiple barcodes with options
using IronBarCode;

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

var results = BarcodeReader.Read("image.jpg", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
}
C#

A flag ExpectBarcodeTypes é equivalente ao setBarcodeFormats() do ML Kit. Configurar essa opção restringe a busca e melhora o desempenho, mas, diferentemente do ML Kit, deixá-la desativada não interrompe a leitura — o IronBarcode tentará todos os formatos suportados.

Comparação de Cobertura de Formatos

Ambas as ferramentas abrangem os formatos 2D e 1D mais comuns. A sobreposição é substancial.

FormatoKit de ML (Android)IronBarcode
Código QRSimSim
EAN-13SimSim
EAN-8SimSim
UPC-ASimSim
UPC-ESimSim
Código 128SimSim
Código 39SimSim
Código 93SimSim
CodabarSimSim
ITFSimSim
PDF417SimSim
Matriz de dadosSimSim
astecaSimSim
Código 11NãoSim
MSI PlesseyNãoSim
Código farmacêuticoNãoSim
Intercalado 2 de 5Via ITFSim
Barra de dados RSS-14 / GS1NãoSim
Micro QRNãoSim
MaxiCodeNãoSim

O IronBarcode suporta mais de 50 simbologias entre leitura e geração. A lista de formatos do ML Kit é fixa e corresponde ao que o Google fornece com o modelo — não é possível adicionar simbologias personalizadas.

O que o IronBarcode adiciona

Além da leitura, o IronBarcode abrange todo o fluxo de trabalho de código de barras:

Geração. O ML Kit não possui nenhuma API de geração — ele lê códigos de barras, não os cria. O IronBarcode gera dados em qualquer formato suportado, como PNG, JPEG, SVG, HTML ou dados binários.

// Generate a Código 128 barcode to file
BarcodeWriter.CreateBarcode("SHIP-7834", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
C#

Personalização de código QR. O QRCodeWriter suporta a incorporação de logotipos, alterações de cores e níveis de correção de erros — recursos que não têm equivalente no ML Kit, pois o ML Kit não gera nada.

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

Processamento de PDF. BarcodeReader.Read("document.pdf") lê códigos de barras de cada página de um PDF nativamente. Sem etapa de extração de imagem, sem loop página por página com uma biblioteca PDF separada — ele lida com PDFs diretamente.

// Read all barcodes from every page of a PDF
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value}");
}

Servidor e nuvem. O IronBarcode funciona em Windows, Linux, macOS, Docker, Azure Functions e AWS Lambda. Não há necessidade de usar os Serviços do Google Play, nem de câmera, nem de ambiente de execução móvel.

Saída binária. .ToPngBinaryData() retorna um byte[] diretamente — útil para APIs que retornam imagens de código de barras como respostas HTTP sem escrever no disco.

// Generate barcode and return as byte array (e.g., in a web API)
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-8821", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

Comparação de recursos

RecursoCódigo de barras do Google ML KitIronBarcode
API .NET / C#Nenhum (nenhum pacote NuGet )Sim — using IronBarCode;
Pacote NuGetNoneBarCode
Leitura de código de barrasSim (somente para Android/iOS)Sim (todas as plataformas)
Geração de código de barrasNãoSim (mais de 50 formatos)
Geração de código QRNãoSim
Incorporação de logotipo QRNãoSim
Suporte para entrada de PDFNãoSim (nativo)
Entrada de arquivo (PNG/JPEG)Sim (via URI InputImage)Sim
Entrada de câmera/quadroSim (caso de uso principal)Por meio de arquivo de imagem
Processamento do lado do servidorNãoSim
Suporte ao ASP.NET CoreNãoSim
Azure FunctionsNãoSim
Docker / LinuxNãoSim
Suporte a aplicativos do WindowsNão (somente Android/iOS)Sim
Dependência de Google Play ServicesSim (modelo desagrupado)Não
Dependência FirebaseNão (autônomo desde 2020)Não
API Async/await em C#NãoSíncrono
Vários códigos de barras em uma única imagemSimSim
Vinculação .NET da comunidadeMantido pela comunidade, não de primeira parteN/A (nativo .NET)
PreçosGratuito (API no dispositivo)A partir de $999 perpétuo

Mapeamento conceitual de API

Como não existe uma API oficial do .NET ML Kit, este mapeamento é conceitual — ele mostra a intenção de cada operação do ML Kit e o equivalente no IronBarcode.

Kit de ML (conceito Kotlin/Java)IronBarcode (.NET C#)
BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
.setBarcodeFormats(FORMAT_QR_CODE)ExpectBarcodeTypes = BarcodeEncoding.QRCode
BarcodeScanning.getClient(options)Estático — nenhum objeto scanner necessário
InputImage.fromFilePath(context, uri)String de caminho de arquivo passada para BarcodeReader.Read()
InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream) ou sobrecarga de array de bytes
scanner.process(inputImage)BarcodeReader.Read(path, options)
.addOnSuccessListener { barcodes -> }Valor de retorno de Read() — iterar diretamente
.addOnFailureListener { e -> }Tentativa/recepção padrão
barcode.rawValuebarcode.Value
barcode.formatbarcode.Format
barcode.boundingBoxDados da região no objeto de resultado
Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
Nenhuma API de geraçãoBarcodeWriter.CreateBarcode()
Nenhuma API de geraçãoQRCodeWriter.CreateQrCode()
Speed / seleção de modeloReadingSpeed.Balanced / .Faster / .Detailed

Quando considerar o IronBarcode

Migrar um aplicativo Android for .NET MAUI ou .NET 9. Se o seu aplicativo Android usa o ML Kit para leitura de código de barras e você está criando um equivalente em .NET , o IronBarcode é a solução ideal. A tradução do conceito é simples: ler um arquivo, obter um resultado e iterar sobre os valores.

Processamento de código de barras no servidor. Qualquer cenário que envolva um endpoint HTTP que escaneie códigos de barras, uma tarefa em segundo plano que processe imagens carregadas ou um fluxo de trabalho de documentos que extraia códigos de PDFs. O ML Kit não pode participar de nenhuma dessas iniciativas.

Aplicações de desktop do Windows. WinForms, WPF ou .NET MAUI no Windows. O ML Kit não funciona de jeito nenhum no Windows.

Ambientes sem Google Play Services. Se sua implantação Android inclui dispositivos que não possuem Google Play Services — hardware empresarial, builds AOSP personalizadas, dispositivos Amazon Fire — o modelo ML Kit desagrupado não está disponível e apenas a variante agrupada maior permanece.IronBarcode não possui essa dependência.

Geração e leitura simultâneas. Se você precisa gerar e ler códigos de barras — imprimir etiquetas de envio e verificar leituras, por exemplo — o IronBarcode realiza ambas as tarefas na mesma biblioteca. O ML Kit não lida nem com a geração nem com a leitura no lado do servidor.

Implantação no Azure ou na AWS. Azure Functions, Azure App Service no Linux, AWS Lambda — nenhuma dessas opções pode hospedar o ML Kit. A IronBarcode tem como alvo todos eles.

Licenciamento e Preços

A API no dispositivo do Código de barras do Google ML Kit Scanning é gratuita para aplicativos Android e iOS. Não há taxa por digitalização e não é necessária nenhuma licença comercial. Esse modelo de preços se ajusta ao seu contexto pretendido — uma biblioteca mobile nativa distribuída por meio do Maven e CocoaPods.

IronBarcode é uma biblioteca comercial .NET com licenças perpétuas:

  • Lite: US$ 749 — 1 desenvolvedor, 1 local de projeto
  • Plus: US$ 1.499 — até 3 desenvolvedores
  • Professional: US$ 2.999 — até 10 desenvolvedores
  • Ilimitado: US$ 5.999 — desenvolvedores ilimitados

Está disponível um período de teste gratuito; Os códigos de barras gerados pelas marcas d'água de teste. Para equipes que já rodam infraestrutura de servidor para processar documentos, o custo da licença é tipicamente uma pequena fração do esforço de engenharia necessário para manter um binding não oficial do ML Kit.

Conclusão

O Código de barras do Google ML Kit Scanning é uma biblioteca bem projetada que faz exatamente o que foi criada para fazer: ler códigos de barras de forma rápida e precisa em dispositivos Android e iOS. A comparação com o IronBarcode não se concentra tanto em qual biblioteca é melhor, mas sim em qual biblioteca existe no contexto em que você precisa dela.

Se você estiver programando em Kotlin para Android e digitalizando documentos com uma câmera, o ML Kit é uma excelente opção. Se estiver programando em C# for .NET — seja para uma API web, um serviço de processamento de documentos, um aplicativo Windows, uma função na nuvem ou um aplicativo MAUI multiplataforma — o Google ML Kit não oferece nada para você. Não existe pacote NuGet , API C# ou um caminho com suporte do Google para usá-lo em código gerenciado.IronBarcode é uma biblioteca nativa do .NET que abrange tanto a leitura quanto a geração de código em todas as plataformas suportadas pelo .NET .

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.