跳至页脚内容
条形码工具

How to Understand QR Code Recognition with Deep Learning

快速响应(QR)码已成为我们数字生活的重要组成部分,方便了无缝的数据共享和信息检索。 识别图像中的QR码是深度学习的一个有价值的应用,深度学习是人工智能的一个子集。 在本文中,我们将在.NET/C#中指导您构建深度学习二维码识别系统的过程。

理解基于深度学习的QR码识别

深度学习是机器学习的一个分支,涉及训练神经网络从数据中学习复杂模式。 在QR码识别的背景下,可以训练深度学习模型来识别和解码不同大小、不同方向和不同条件下的图像中的QR码。 卷积神经网络(CNNs)是图像类任务(如QR码识别)的流行选择,因为它们能够捕捉复杂的视觉特征。

在本文中,我们将使用ML.NET Model Builder来训练我们的模型。

ML.NET Model Builder

Model Builder is a powerful tool provided by Microsoft as part of the ML.NET框架的一部分,用于在.NET/C#中构建机器学习模型。 它简化和加速了创建自定义机器学习模型的过程,而无需深入了解机器学习算法或广泛的编码专业知识。Model Builder设计为用户友好和易访问,非常适合希望在其应用程序中利用机器学习能力的开发者。 Model Builder支持AutoML,它会自动探索不同的机器学习算法和设置,以帮助您找到最适合您场景的算法。

训练QR码识别模型

使用Model Builder训练QR码识别模型涉及一系列步骤,这些步骤将引导您完成创建和训练模型的过程。 在本分步骤指南中,我们将逐步引导如何在.NET/C#中使用Model Builder训练QR码模型的每个阶段。

步骤1:设置您的环境

在开始实施之前,确保您具备以下前提条件:

  • Visual Studio:下载并安装Visual Studio,一个用于.NET开发的多功能集成开发环境(IDE)。
  • Model Builder:您可以通过单击此处下载ML.NET Model Builder。

步骤2:数据准备

我们需要QR码图像来训练我们的模型。 You can get QR Code Images from Kaggle or Roboflow. 在本示例中,我已从Roboflow下载了QR码图像。

步骤3:打开Model Builder

打开Visual Studio项目。

右键单击项目>添加>机器学习模型...

如何理解基于深度学习的QR码识别:图1

将出现以下窗口。

如何理解基于深度学习的QR码识别:图2

给模型命名并单击添加按钮。 将出现以下窗口:

如何理解基于深度学习的QR码识别:图3

向下滚动,在计算机视觉下找到“对象检测”。

如何理解基于深度学习的QR码识别:图4

步骤4:选择训练环境

选择对象检测,因为我们必须从给定的数据集中检测QR码。 根据您的偏好选择本地或Azure。 在本示例中,我们选择本地。

单击本地后,将出现以下窗口:

如何理解基于深度学习的QR码识别:图5

根据您的选择选择本地CPU或GPU。您也可以选择Azure。 为此,您应拥有一个有效的Azure订阅。 选择您的测试环境后,单击下一步按钮。 将出现以下窗口。

如何理解基于深度学习的QR码识别:图6

步骤5:选择数据

选择数据是训练过程的最重要部分。 如前所述,我将在RoboFlow中获取数据。 打开RoboFlow,搜索QR码。 数据可能有白色QR码或有很多本地特征。 我正在使用QR检测计算机视觉数据集进行本教程。 选择格式后下载数据。 我选择了COCO格式下载此数据,因为此格式将进一步用于数据预处理和图像识别。

如何理解基于深度学习的QR码识别:图7

既然您有了数据,让我们回到Visual Studio。 选择上面下载的COCO文件的输入路径。 您也可以选择Vott,但为此,您需要为您的数据创建一个Vott文件。 将出现以下窗口。

如何理解基于深度学习的QR码识别:图8

现在,单击下一步骤按钮并转到训练选项卡。

如何理解基于深度学习的QR码识别:图9

步骤6:训练QR码检测模型

现在,单击开始训练模型以开始训练。 Model Builder将自动转换为二进制图像并相应地使用首选神经网络。 我们不需要指定任何东西。 Model Builder最棒的地方在于,即使是深度学习背景较少的开发人员也可以训练、测试和使用模型。

如何理解基于深度学习的QR码识别:图10

Model Builder将在指定的数据集上训练模型并显示训练进度。 上面的训练将根据系统的情况花费时间。 模型将逐一获得所有QR码并学习其特征。 您可以通过将任何测试QR码图像传递给模型来测试您的模型,一旦训练完成。

步骤7:评估模型

经过训练后,Model Builder将评估模型在验证数据上的性能。

您将看到评估指标,例如准确性、精确度、召回率和F1得分。 这些指标评估模型的表现如何。

步骤8:使用

现在我们的模型已经训练完毕,QR码检测器已经准备就绪,我们需要使用该模型来检测代码,然后解码检测到的QR码。 此模型只检测给定输入中是否包含任意快速响应代码。 这并不会解码QR码。 对于QR码解码,我们需要一个第三方库。 Iron Barcode是读取QR码图像的最佳库。 在进一步进行之前,让我们先稍微了解一下Iron Barcode。

Iron Barcode - QR码解码库

IronBarcode是一个专门用于处理QR码的.NET库,这是一种广泛用于编码信息如URL、文本、联系人信息等的2D条形码。 该库通过提供直观的工具来生成具有自定义功能(如大小、颜色和错误修正)的QR码,简化了QR码的创建过程。

此外,IronBarcode可以从嵌入在图像中的QR码中提取信息,使其成为将QR码生成和解码功能无缝集成到.NET应用程序的重要资源。

在本教程中,如果我们的模型检测到QR码,我们将使用它来解码QR码。

安装Iron Barcode NuGet Package

在NuGet包管理器控制台中编写以下命令以下载IronBarcode NuGet包

Install-Package BarCode

上述命令将安装Iron Barcode包,并将其引用添加到我们的项目中。

如何理解基于深度学习的QR码识别:图11

解码QR码

编写以下代码以读取单个检测到的QR码。

using IronBarCode;

string qrCodeImagePath = "myQrCode.png";

// Quickly reads a single QR Code from the provided image path
var data = BarcodeReader.QuicklyReadOneBarcode(qrCodeImagePath);

// Outputs the decoded value from the QR Code
Console.WriteLine(data.Value.ToString());
using IronBarCode;

string qrCodeImagePath = "myQrCode.png";

// Quickly reads a single QR Code from the provided image path
var data = BarcodeReader.QuicklyReadOneBarcode(qrCodeImagePath);

// Outputs the decoded value from the QR Code
Console.WriteLine(data.Value.ToString());
Imports IronBarCode

Private qrCodeImagePath As String = "myQrCode.png"

' Quickly reads a single QR Code from the provided image path
Private data = BarcodeReader.QuicklyReadOneBarcode(qrCodeImagePath)

' Outputs the decoded value from the QR Code
Console.WriteLine(data.Value.ToString())
$vbLabelText   $csharpLabel

以下是输出:

如何理解基于深度学习的QR码识别:图12

结论

总而言之,Model Builder和IronBarcode库对于想要处理QR码的.NET开发人员来说是一个有价值的组合。 Model Builder使创建和训练用于QR码识别的模型的棘手工作变得非常简单。 而当您加上IronBarcode库时,事情变得更加简单 - 它可以轻松从图片中读取QR码。 这种合作不仅使库存和营销任务变得更好,而且也使您的应用程序更加有趣。 当Model Builder和IronBarcode结合在一起时,就像是将超级智能技术融入到您的.NET应用程序中,为QR码相关的事情开辟了各种酷的可能性。 Iron Barcode commercial license is available at a very low cost with a 试用许可证

Jordi Bardia
软件工程师
Jordi 最擅长 Python、C# 和 C++,当他不在 Iron Software 利用这些技能时,他就在游戏编程。分享产品测试、产品开发和研究的责任,Jordi 在持续的产品改进中增加了巨大的价值。多样的经验使他面临挑战并保持投入,他表示这是在 Iron Software 工作的最喜欢的方面之一。Jordi 在佛罗里达州迈阿密长大,并在佛罗里达大学学习计算机科学和统计学。