跳過到頁腳內容
條碼工具

如何用深度學習理解QR碼識別

快速響應 (QR) 代碼已成為我們數位生活中不可或缺的一部分,有助於無縫的數據共享和信息檢索。 識別圖像中的 QR 代碼是深度學習(人工智能的一個子集)的一個有價值的應用。 在本文中,我們將指導您使用 .NET/C# 中的深度學習構建 QR 代碼識別系統的過程。

理解使用深度學習的 QR 代碼識別

深度學習是機器學習的一個分支,涉及訓練神經網絡從數據中學習複雜模式。 在 QR 代碼識別的背景下,深度學習模型可以訓練來識別和解碼不同大小、方向和條件的圖像中的 QR 代碼。 卷積神經網絡 (CNN) 是圖像任務(如 QR 代碼識別)的流行選擇,因為它們能夠捕獲複雜的視覺特徵。

在本文中,我們將使用ML.NET 模型生成器訓練我們的模型。

ML.NET 模型生成器

Model Builder is a powerful tool provided by Microsoft as part of the ML.NET框架的一部分,用於在 .NET/C# 中構建機器學習模型的強大工具。 它簡化並加快了創建自定義機器學習模型的過程,無需對機器學習算法或廣泛的編程專長有深入了解。模型生成器的設計友好易用,是開發者在應用中利用機器學習能力的絕佳工具。 模型生成器支持 AutoML,這會自動探索不同的機器學習算法和設置,以幫助您找到最適合您場景的算法。

訓練 QR 代碼識別模型

使用模型生成器訓練 QR 代碼識別模型需經過一系列步驟,這些步驟會指導您創建和訓練模型的過程。 在此詳細指南中,我們將指導您每一步使用 .NET/C# 中模型生成器訓練 QR 代碼模型的過程。

步驟 1:設置您的環境

在我們深入實施之前,請確保您滿足以下先決條件:

  • Visual Studio:下載並安裝 Visual Studio,這是一個用於 .NET 開發的多功能集成開發環境 (IDE)。
  • 模型生成器:您可以通過點擊此處下載 ML.NET 模型生成器。

步驟 2:數據準備

我們需要 QR 代碼圖像來訓練模型。 You can get QR Code Images from Kaggle or Roboflow. 在此示例中,我已從 Roboflow 下載 QR 代碼圖像。

步驟 3:打開模型生成器

打開 Visual Studio項目。

右鍵點擊項目 > 添加 > 機器學習模型...

理解使用深度學習的 QR 代碼識別:圖 1

接著的窗口將出現。

理解使用深度學習的 QR 代碼識別:圖 2

給模型命名並點擊“添加”按鈕。 以下窗口將出現:

理解使用深度學習的 QR 代碼識別:圖 3

向下滾動,在計算機視覺下找到“物體檢測”。

理解使用深度學習的 QR 代碼識別:圖 4

步驟 4:選擇訓練環境

選擇物體檢測,因為我們必須從給定數據集中檢測 QR 代碼。 根據您的喜好選擇本地或 Azure。 在此示例中,我們選擇本地。

單擊本地後,將出現以下窗口:

理解使用深度學習的 QR 代碼識別:圖 5

根據需要選擇本地 CPU 或 GPU。您也可以選擇 Azure。 為此,您應具有有效的 Azure 訂閱。 選擇測試環境後,單擊下一步按鈕。 以下窗口將出現。

理解使用深度學習的 QR 代碼識別:圖 6

步驟 5:選擇數據

選擇數據是訓練過程中最重要的一部分。 如前所述,我將從Robo Flow獲取數據。 打開 RoboFlow,搜索 QR 代碼。 數據可能有白色 QR 代碼或具有許多本地特徵。 在本教程中,我正在使用 QR 檢測計算機視覺數據集。 選擇格式後,下載數據。 我選擇了 COCO 格式來下載這些數據,因為該格式將在數據預處理和圖像識別中使用。

理解使用深度學習的 QR 代碼識別:圖 7

現在您已經有了數據,讓我們回到 Visual Studio。 選擇上述 COCO 文件的輸入路徑。 您也可以選擇 Vott,但對此,您需要為您的數據創建 Vott 文件。 以下窗口將出現。

理解使用深度學習的 QR 代碼識別:圖 8

現在,單擊下一步按鈕並轉到訓練選項卡。

理解使用深度學習的 QR 代碼識別:圖 9

步驟 6:訓練 QR 代碼檢測模型

現在,單擊開始訓練模型以開始訓練。 模型生成器將自動轉換為二進制圖像並相應地使用首選的神經網絡。 我們不需要指定任何內容。 模型生成器最好的地方是,具有最少深度學習背景的開發人員也可以訓練、測試和使用模型。

理解使用深度學習的 QR 代碼識別:圖 10

模型生成器將根據指定的數據集訓練模型,並顯示訓練進度。 上述訓練將根據系統的不同而有所耗時。 模型將逐個採集所有 QR 代碼並學習它們的特徵。 完成訓練後,您可以將任何測試 QR 代碼圖像傳遞給模型測試您的模型。

步驟 7:評估模型

訓練後,模型生成器將評估模型在驗證數據上的表現。

您將看到評估指標,如準確性、精度、召回率和 F1-得分。 這些指標評估模型的性能。

步驟 8:使用

現在我們的模型已經訓練完成,QR 代碼檢測器已經準備就緒,我們需要使用該模型來檢測代碼,然後解碼檢測到的 QR 代碼。 此模型只會檢測給定輸入中是否包含任何快速響應代碼。 這不會解碼 QR 代碼。 對於 QR 代碼解碼,我們需要一個第三方庫。 Iron Barcode 是讀取 QR 代碼圖像的最佳庫。 在進一步了解之前,讓我們先了解一下 Iron Barcode。

Iron Barcode - QR 代碼解碼庫

IronBarcode 是一個專門針對 QR 代碼工作的 .NET 庫,QR 代碼是一種廣泛用於編碼信息(如 URLs、文本、聯繫方式等)的二維條碼。 該庫通過提供直觀的工具來生成具有可自定義特徵(如大小、顏色和錯誤校正)的 QR 代碼,簡化了 QR 代碼的創建。

此外,IronBarcode 能夠從嵌入圖像中的 QR 代碼提取信息,這使得在 .NET 應用中無縫集成 QR 代碼生成和解碼能力成為不可或缺的資源。

在本教程中,如果模型檢測到 QR 代碼,我們將使用它進行解碼。

安裝 Iron Barcode NuGet 包

在 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

結論

總結一下,模型生成器和 IronBarcode 庫對於想在 .NET 專案中操作 QR 代碼的開發人員是個寶貴的搭配。 模型生成器使得創建和訓練 QR 代碼識別模型的困難工作變得簡單。 當您添加 IronBarcode 庫後,事情會變得更加簡單——它可以方便地從圖像中讀取 QR 代碼。 這種組合不僅可以改善庫存和營銷任務,還可以讓您的應用更加有趣。 當模型生成器和 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 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。