IRONSOFTWAREHOME
与其他组件比较

Google ML Kit条形码扫描与IronBarcode:.NET开发者需要知道的内容

Curtis Chau
Curtis Chau
Updated: 2026年4月26日

Google ML Kit 在 Android 上的条形码扫描功能确实令人印象深刻。 它为 Google Lens 提供动力,可以处理损坏和部分遮蔽的条形码,无需网络通话即可在设备上工作,并且支持各种 1D 和 2D 格式。 当.NET开发人员在条形码库比较中遇到这种情况时,这些事实是准确的。 对比文章经常忽略的一点是,ML Kit 没有.NET SDK、没有NuGet包、也没有 C# API。 本文面向在列表中发现 ML Kit 的开发人员,他们需要了解"在.NET项目中使用 ML Kit"在实践中究竟意味着什么,以及托管代码的等效实现方式。

什么是 Google ML Kit 条形码扫描?

Google ML Kit 条形码扫描是一个原生移动库。 那不是一个可以绕过的限制; 这是产品的设计。 ML Kit 提供两种版本:

  • Android: 通过Google Maven作为com.google.mlkit:barcode-scanning(Kotlin/Java)分发。 需要目标设备上的Google Play服务。处理从相机帧、文件URI或位图构建的InputImage对象。
  • iOS: 通过CocoaPods分发为GoogleMLKit/BarcodeScanning。 使用 Swift 或 Objective-C。

没有dotnet add package google-mlkit-barcode。 没有using Google.MLKit.BarcodeScanning;。 Google 没有发布 ML Kit 的.NET绑定。

社区维护的Xamarin和MAUI绑定(如Xamarin.GooglePlayServices.MLKit.BarcodeScanning)在不同时间存在过,但它们面临一个共同的挑战:ML Kit经常更新其Android和iOS SDK,而由个人或小团队维护的绑定项目在基础API变更时可能落后或无效。 没有Google官方的.NET NuGet包用于ML Kit条形码扫描器。

ML 套件的优势

了解 ML Kit 出现在条形码比较中的原因有助于理解相关背景信息。 在原生 Android 系统上:

-**设备端推理:**无需服务器往返。ML Kit 的模型使用 Google Play 服务在本地运行,这意味着扫描时延迟低且无需网络依赖。 -损伤容限: ML 模型比许多基于阈值的解码器更能处理损坏、部分遮挡或低分辨率的条形码。 对于面向消费者的、扫描现实世界条形码的应用程序来说,这是一个真正的差异化优势。

  • Google Lens 集成: ML Kit 的扫描器与 Google Lens 条形码检测所使用的技术栈相同。 这是一个很强的质量信号。 -**移动设备上的格式广度:**原生支持 QR Code、EAN-13、EAN-8、Code 128、Code 39、Code 93、Codabar、ITF、PDF417、Data Matrix、Aztec 和 UPC-A/UPC-E。 -**零配置:**只需三行 Kotlin 代码片段即可生成一个可用的扫描器,无需调整阈值或选择解码器策略。

这些都是实实在在的优势。 对于.NET开发人员来说,问题不在于 ML Kit 不好,而在于他们不付出大量努力就无法使用 ML Kit。

.NET开发现状

当.NET开发人员需要扫描条形码时,ML Kit 的实际路径如下所示:

没有异步/等待的C# API。 ML Kit使用Android的Task API,并结合addOnFailureListener回调。 这些与.NET的await不对应。 任何绑定层都必须适应基于回调的 Android 异步和 .NET 的 TPL——这是一个不平凡的转换,社区绑定对此的处理并不一致。

没有.NET依赖注入集成。 BarcodeScanning.getClient(options)是一个静态工厂调用,返回一个Android BarcodeScanner对象。 没有.NET接口可以注册,没有IServiceCollection.AddBarcodeScanner(),也无法将其注入到ASP.NET Core中间件或Azure Functions中。

不支持ASP.NET Core或 Azure 函数。ML Kit 需要 Android 或 iOS 运行时环境。 它无法在 Linux 上的 Web API 进程、Azure 函数、Windows 服务器或 Docker 容器中运行。 如果您的用例是服务器端条形码处理(接受图像并返回条形码数据的 REST 端点、文档处理管道、批处理作业),则无论绑定是否可用,ML Kit 在架构上都是不兼容的。

仅限摄像头或帧输入 — 没有文件,没有PDF。 ML Kit的ByteBuffer或Android文件系统上的文件URI构建。 没有处理 PDF 文档、迭代页面或处理多页 TIFF 的概念。 服务器端文档处理完全超出了该产品的范围。

Google Play服务依赖(解包模型)。 未捆绑的ML模型变体(com.google.android.gms:play-services-mlkit-barcode-scanning)通过Google Play服务运行。 没有Play服务的设备——自定义Android版本、某些企业设备、Amazon Fire平板电脑——无法使用该变体。 捆绑模型选项(com.google.mlkit:barcode-scanning)无需Play服务但会增加大约2.4 MB的APK大小。

将 Android ML Kit 代码移植到.NET

如果您有一个带有 ML Kit 条形码扫描功能的现有 Android 应用,并且您正在将其移植到.NET MAUI或.NET 9,以下是翻译内容。 Kotlin 代码使用了 ML Kit 的回调模式; C# 代码使用了IronBarcode的同步 API。

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

结构上的差异不仅仅体现在句法上。 ML Kit版本设置一个扫描器对象,构建一个scanner.process(),并注册成功和失败回调。 如果您需要在继续之前获得结果,您必须协调回调执行与您的其他逻辑——通常通过Java中的CountDownLatch或Kotlin中的协程来实现。

IronBarcode的BarcodeReader.Read()同步返回一个结果集合。 你立即迭代它。 没有回调注册,没有线程同步,也不需要单独管理扫描器对象。

对于移植 Android 代码的团队来说,多条形码场景的模式转换如下所示:

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

ExpectBarcodeTypes标志等同于ML Kit的setBarcodeFormats()。 设置此设置可以缩小搜索范围并提高性能,但与 ML Kit 不同,不设置此设置不会中断读取IronBarcode将尝试所有支持的格式。

格式覆盖率比较

这两款工具都涵盖了主流的 2D 和 1D 格式。 重叠部分相当大。

翻译格式ML Kit(Android)IronBarcode
二维码
EAN-13
EAN-8
UPC-A
UPC-E
代码 128
代码 39
代码93
科达巴尔
国际电信联盟
PDF417
数据矩阵
阿兹特克
代码 11
MSI Plessey
药典
交错式 2/5通过国际运输论坛
RSS-14 / GS1 数据条
微型 QR
MaxiCode

IronBarcode支持50多个符号体系,涵盖读取和生成。 ML Kit 的格式列表固定为 Google 模型自带的格式列表——您无法添加自定义符号系统。

##IronBarcode的优势

除了阅读之外, IronBarcode还涵盖了完整的条形码工作流程:

生成。ML Kit 完全没有生成 API——它读取条形码,但不创建条形码。 IronBarcode可将任何受支持的格式生成为 PNG、JPEG、SVG、HTML 或二进制数据。

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

二维码定制。QRCodeWriter支持嵌入徽标、更改颜色和纠错级别——这些功能 ML Kit 不具备,因为 ML Kit 本身并不生成任何内容。

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

PDF处理。 BarcodeReader.Read("document.pdf")能够本地读取PDF每一页的条形码。 无需图像提取步骤,无需使用单独的 PDF 库逐页循环——它直接处理 PDF。

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

IronBarcode**支持服务器端和云端运行,**可在Windows、Linux、macOS、Docker、Azure Functions和AWS Lambda上运行。 无需谷歌Play服务,没有摄像头,也没有移动运行时环境。

二进制输出。 byte[]—对在不写入磁盘时以HTTP响应返回条形码图像的API非常有用。

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

功能对比

特征Google ML Kit 条形码IronBarcode
.NET / C# API无(无NuGet包)是的 — using IronBarCode;
NuGet 软件包NoneBarCode
条形码读取是的(仅限安卓/iOS系统)是的(所有平台)
条形码生成是的(50多种格式)
二维码生成
二维码标志嵌入
PDF 输入支持是的(母语)
文件输入(PNG/JPEG)是的(通过 InputImage URI)
摄像头/帧输入是的(主要用例)通过图像文件
服务器端处理
ASP.NET Core支持
Azure Functions
Docker / Linux
Windows 应用支持否(仅限安卓/iOS系统)
Google Play 服务部门是(非捆绑模型)
Firebase依赖否(自2020年起独立)
异步/等待C# API同步
一张图中包含多个条形码
社区.NET绑定社区维护的,不是官方的不适用(原生.NET)
定价免费(设备API)749 美元起永久

API概念图

由于没有官方的.NET ML Kit API,因此这种映射是概念性的——它显示了每个 ML Kit 操作的意图以及IronBarcode 的等效操作。

ML Kit(Kotlin/Java 概念)IronBarcode(.NET C#)
BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
.setBarcodeFormats(FORMAT_QR_CODE)ExpectBarcodeTypes = BarcodeEncoding.QRCode
BarcodeScanning.getClient(options)静态——无需扫描仪对象
InputImage.fromFilePath(context, uri)传递给BarcodeReader.Read()的文件路径字符串
InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream)或字节数组重载
scanner.process(inputImage)BarcodeReader.Read(path, options)
.addOnSuccessListener { barcodes -> }返回值Read() — 直接迭代
.addOnFailureListener { e -> }标准尝试/接球
barcode.rawValuebarcode.Value
barcode.formatbarcode.Format
barcode.boundingBox结果对象的区域数据
Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
无生成 APIBarcodeWriter.CreateBarcode()
无生成 APIQRCodeWriter.CreateQrCode()
Speed / 模型选择ReadingSpeed.Balanced / .Faster / .Detailed

何时考虑使用IronBarcode

**将 Android 应用移植到.NET MAUI或.NET 9。**如果您的 Android 应用使用 ML Kit 进行条形码扫描,并且您正在构建一个.NET等效版本,那么IronBarcode就是自然之选。 概念转换很简单——读取文件,获取结果,迭代值。

**服务器端条形码处理。**任何涉及扫描条形码的 HTTP 端点、处理上传图像的后台作业或从 PDF 中提取条形码的文档工作流程的场景。 ML Kit 无法参与上述任何活动。

Windows桌面应用程序。Windows平台上的WinForms、WPF或.NET MAUI 。 ML Kit 完全无法在 Windows 系统上运行。

没有Google Play服务的环境。 如果您的Android部署包含没有Google Play服务的设备——企业硬件,自定义AOSP构建,Amazon Fire设备——则无捆绑的ML Kit模型不可用,只有较大捆绑版本可用。 IronBarcode没有这样的依赖项。

**生成与读取并存。**如果您需要同时生成和读取条形码(例如,打印货运标签和验证扫描结果), IronBarcode可以在同一个库中处理这两项操作。 ML Kit 既不处理数据生成,也不处理服务器端读取。

无论是 Azure 还是 AWS 部署, Azure Functions、Linux 上的 Azure 应用服务、AWS Lambda 都无法托管 ML Kit。 IronBarcode的目标客户都是他们。

授权和定价

Google ML Kit条形码扫描的设备API对于Android和iOS应用是免费的。没有每次扫描费用,也不需要商业许可证。 这种定价模型适合其预期环境——一个通过Maven和CocoaPods分发的本机移动库。

IronBarcode是一个商业性的.NET库,采用永久授权:

-Lite: 749 美元 — 1 位开发者,1 个项目地点 -Plus: 1499 美元——最多可供 3 位开发者使用 Professional: 2,999 美元——最多 10 位开发人员 -无限: 5,999 美元 — 无限开发者

提供免费试用; 试验水印生成了条形码。 对于已经运行服务器基础设施以处理文档的团队来说,许可证成本通常是维护一个非官方ML Kit绑定所需的工程努力的一小部分。

结论

Google ML Kit 条形码扫描是一个精心设计的库,它能够完美地完成其设计目标:在 Android 和 iOS 设备上快速准确地扫描条形码。 与IronBarcode的比较与其说是比较哪个库更好,不如说是比较哪个库能够在你需要的场景下运行。

如果你正在用 Kotlin 为 Android 编写应用程序并使用摄像头进行扫描,那么 ML Kit 是一个绝佳的选择。但如果你正在用 C# 为.NET编写应用程序——无论是 Web API、文档处理服务、Windows 应用程序、云函数还是跨平台的 MAUI 应用——Google ML Kit 都无法满足你的需求。 没有NuGet包,没有 C# API,也没有 Google 支持的在托管代码中使用它的途径。 IronBarcode是一个原生的.NET库,涵盖了.NET支持的所有平台上的读取和生成功能。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

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

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户