跳過到頁腳內容
條碼工具

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

快速回應 (QR) 碼已成為我們數位生活中不可或缺的一部分,促進了無縫資料共享和資訊檢索。 辨識影像中的二維碼是深度學習(人工智慧的一個分支)的重要應用。 在本文中,我們將指導您使用深入學習在 .NET/C# 中構建 QR 代碼識別系統的過程。

利用深度學習理解二維碼識別

深度學習是機器學習的一個分支,它涉及訓練神經網路從資料中學習複雜的模式。 在二維碼辨識領域,可以訓練深度學習模型來辨識和解碼不同尺寸、方向和條件下的影像中的二維碼。 卷積神經網路(CNN)能夠捕捉複雜的視覺特徵,因此是二維碼識別等基於圖像的任務的熱門選擇。

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

ML.NET 模型建構器

模型建構器是微軟提供的強大工具,作為ML.NET框架的一部分,用於在 .NET/C# 中建立機器學習模型。 它簡化並加速了創建自訂機器學習模型的過程,無需深入了解機器學習演算法或具備豐富的編碼經驗。模型建構器設計友善易用,是希望在其應用程式中利用機器學習功能的開發人員的理想工具。 模型建構器支援 AutoML,它會自動探索不同的機器學習演算法和設置,幫助您找到最適合您場景的演算法和設定。

訓練二維碼辨識模型

使用模型建構器訓練二維碼辨識模型涉及一系列步驟,這些步驟將引導您完成建立和訓練模型的過程。 在本逐步指南中,我們將引導您完成使用 .NET/C# 中的模型建構器訓練二維碼模型的每個階段。

步驟 1:設定環境

在深入實施之前,請確保您已具備以下先決條件:

  • Visual Studio:下載並安裝Visual Studio ,這是一個功能強大的 .NET 開發整合開發環境 (IDE)。
  • 模型建構器:您可以點擊此處下載 ML.NET 模型建構器。

步驟二:資料準備

我們需要二維碼圖片來訓練我們的模型。 您可以從KaggleRoboflow取得二維碼圖片。 本範例中使用的二維碼圖片來自 Roboflow。

步驟 3:開啟模型建構器

開啟 Visual Studio 專案。

右鍵點選項目 > 新增 > 機器學習模型...

如何利用深度學習理解二維碼辨識:圖 1

將會彈出以下視窗。

如何利用深度學習理解二維碼辨識:圖 2

輸入模型名稱,然後點選"新增"按鈕。 將出現以下視窗:

如何利用深度學習理解二維碼辨識:圖 3

向下捲動,在"電腦視覺"下找到"目標檢測"。

如何利用深度學習理解二維碼辨識:圖 4

步驟 4:選擇訓練環境

選擇目標檢測,因為我們需要從給定的資料集中檢測二維碼。 根據個人喜好選擇本地或 Azure。 本範例選擇本機模式。

點擊"本地"後,將出現以下視窗:

如何利用深度學習理解二維碼辨識:圖 5

根據您的選擇,可以選擇本機 CPU 或 GPU。您也可以選擇 Azure。 為此,您需要擁有有效的 Azure 訂閱。 選擇測試環境後,按一下"下一步"按鈕。 將出現以下視窗。

如何利用深度學習理解二維碼辨識:圖 6

步驟 5:選擇數據

選擇資料是訓練過程中最重要的部分。 如前所述,我將從Robo Flow取得數據。 開啟 RoboFlow,搜尋二維碼。 資料可能包含白色二維碼或具有許多本地化特徵。 本教程中使用的是二維碼檢測電腦視覺資料集。 選擇格式下載資料。 我選擇 COCO 格式下載此數據,因為該格式將用於後續的數據預處理和影像辨識。

如何利用深度學習理解二維碼辨識:圖 7

現在你已經有了數據,讓我們回到 Visual Studio 吧。 選擇上面下載的 COCO 檔案的輸入路徑。 您也可以選擇 Vott,但為此,您需要為您的資料建立 Vott 檔案。 將出現以下視窗。

如何利用深度學習理解二維碼辨識:圖 8

現在,點擊"下一步"按鈕,然後轉到"訓練"標籤。

如何運用深度學習理解二維碼辨識:圖 9

步驟 6:訓練二維碼偵測模型

現在,點擊"開始訓練模型"開始訓練。 模型建構器將自動轉換為二值影像,並相應地使用首選神經網路。 我們無需具體說明任何內容。 模型建構器最大的優點在於,即使是深度學習背景有限的開發人員也可以訓練、測試和使用模型。

如何利用深度學習理解二維碼辨識:圖 10

模型建構器將在指定的資料集上訓練模型並顯示訓練進度。 上述訓練所需時間取決於系統狀況。 該模型將逐一讀取所有二維碼並學習其特徵。 訓練完成後,您可以透過向模型傳遞任何測試二維碼圖像來測試您的模型。

步驟 7:評估模型

訓練完成後,模型建構器將評估模型在驗證資料上的表現。

您會看到準確率、精確率、召回率和 F1 分數等評估指標。 這些指標用於評估模型的性能。

步驟 8:食用

現在我們的模型已經訓練完成,二維碼檢測器也已準備就緒,我們需要使用該模型來檢測二維碼,然後解碼檢測到的二維碼。 此模型僅偵測給定輸入是否包含二維碼。 這樣無法解碼二維碼。 對於二維碼解碼,我們需要一個第三方函式庫。 Iron Barcode 是讀取二維碼影像的最佳函式庫。 在繼續之前,讓我們先來了解一下Iron Barcode。

Iron Barcode——二維碼解碼庫

IronBarcode是一個專門用於處理二維碼的 .NET 函式庫,二維碼是一種廣泛用於編碼 URL、文字、聯絡資訊等資訊的二維條碼。 該程式庫透過為開發者提供直覺的工具來簡化二維碼的創建,這些工具可以產生具有可自訂功能(如大小、顏色和糾錯)的二維碼。

此外,IronBarcode 能夠從嵌入圖像中的二維碼中提取訊息,使其成為將二維碼生成和解碼功能無縫整合到 .NET 應用程式中的不可或缺的資源。

在本教程中,我們將使用它來解碼模型偵測到的二維碼。

安裝 Iron Barcode NuGet 套件

在 NuGet 套件管理器控制台中輸入以下命令以下載IronBarcode NuGet 套件

Install-Package BarCode

上述命令將安裝 Iron Barcode 軟體包,並在我們的專案中加入引用。

如何利用深度學習理解二維碼辨識:圖 11

解碼二維碼

編寫以下程式碼來讀取偵測到的單一二維碼。

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

以下是輸出結果:

如何利用深度學習理解二維碼辨識:圖 12

結論

總之,對於想要使用二維碼的 .NET 開發人員來說,模型建構器和 IronBarcode 函式庫是一個非常有價值的組合。 模型建構器使創建和訓練二維碼識別模型這項棘手的工作變得非常簡單。 而當你添加 IronBarcode 庫時,事情就變得更加簡單了——它可以幫助輕鬆讀取圖片中的二維碼。 這種團隊合作不僅能更好地完成庫存和行銷任務,還能讓你的應用程式更有趣。 當模型建構器和 IronBarcode 結合在一起時,就像將超級智慧技術融入你的 .NET 應用程式一樣,為二維碼相關功能開啟了各種酷炫的可能性。 Iron Barcode商業許可證價格非常低廉,並提供免費試用許可證

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。