使用 IRONOCR

如何在 C# 中進行車牌 OCR(教程)

已更新 2023年12月19日
分享:

在本教程中,我們將學習程式化的車牌識別。我們將採用一些樣本車牌圖像並提取車牌號碼。我們將開發一個 C# 和 .NET 程式來執行自動車牌識別。本教程簡單易懂,即使是初學者 C# 程式設計師也適用。

有很多可用的庫來執行 OCR。其中一些是付費的,有些難以使用,有些則不高效或不準確。要找到一個免費、高效、易於使用且能提供準確結果的庫可能非常困難。我找到了並使用了 IronOCR;它對開發是免費的,並為商業用途提供 1 個月的免費試用,易於使用,高效,支持多線程,支持 150 多種語言,除此之外還提供更高的準確性。它將執行從車牌檢測到獲得車牌號碼的所有任務。

IronOCR

IronOCR 由 Iron Software 開發和維護的庫,幫助 C# 軟體工程師在 .NET 專案中進行 OCR、條碼掃描和文字提取。

IronOCR的功能

  • 從多種格式如圖像中讀取文本 (JPEG、PNG、GIFF、TIFF、BMP), 流 和 PDFs
  • 使用多種濾鏡如去斜去噪二值化提高解析度膨脹等來修正低品質的掃描和照片
  • 從超過 20 種條碼格式中讀取條碼並 QR碼支援
  • 利用最新版本的 Tesseract OCR,調校以提供最佳效能
  • 匯出 可搜索的PDF檔, HTML, 和圖片內容文字。

讓我們開發一個讀取車牌號碼的演示應用程式。

建立 Visual Studio 專案

第一步是建立一個 Visual Studio 專案。

開啟 Visual Studio。點擊「建立新專案」,並選擇專案範本 (我已選擇控制台應用程式範本來作為此展示應用程式,但您可以根據需要或偏好選擇其他範本。). 點擊「下一步」按鈕,並命名項目 (我將它命名為「車牌OCR」,但您可以命名為任何名稱。). 點擊「下一步」按鈕,選擇目標 .NET 框架。最後,點擊「創建」按鈕來創建專案。專案將會如下面所示創建。

如何在 C# 中執行車牌光學字符識別(教程),圖 1:為我們的車牌 OCR 專案建立 Visual Studio 專案

為我們的車牌 OCR 專案創建一個 Visual Studio 專案

現在,我們需要安裝 IronOCR 庫以在我們的專案中使用它。最簡單的方法是通過 NuGet 套件管理器安裝它。

安裝 IronOCR NuGet 套件

點擊頂部選單列的工具,然後選擇 NuGet 套件管理員 > 管理方案的 NuGet 套件,如下所示。

如何在 C# 中進行車牌 OCR(教程),圖 2:在 Visual Studio 中定位 NuGet 套件管理員 UI

在 Visual Studio 中定位 NuGet 套件管理器 UI

以下視窗將出現。

如何在C#中進行車牌OCR(教程),圖 3:Visual Studio 中的 NuGet 套件管理器 UI

Visual Studio 中的 NuGet 套件管理器 UI

點擊「瀏覽」,並搜尋 IronOCR。選擇 IronOCR 套件,然後點擊安裝按鈕,如下所示。

如何在 C# 中進行車牌的 OCR (教學),圖 4:在 NuGet 包管理器 UI 中安裝 IronOCR 庫

在NuGet套件管理器UI中安裝IronOCR庫

IronOCR庫將被安裝並準備使用。

使用光學字符識別讀取車牌

讓我們來寫一個讀取車牌的程式。IronOCR 是一個基於Tesseract的OCR引擎,用來從圖像中提取文字,所以如果我們需要實現電腦視覺來檢測車輛,就可能需要使用其他機器學習庫。IronOCR 支持 OpenCV,這是一個開源且市場領先的檢測模型。IronOCR 可以與 OpenCV 結合使用,以執行物體檢測,如汽車檢測或車牌檢測。

我們將讀取以下的車牌號:

如何在 C# 中進行車牌識別 (教學),圖 5:車牌圖像,車牌號碼清晰可見

一个清楚可见车牌号码的车牌图片

現在,我們來寫程式碼。

添加以下命名空間:

using IronOcr;
using IronOcr;
Imports IronOcr
VB   C#

然後新增以下代碼:

var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate3.jpg"))
{
    input.DeNoise(); // fixes digital noise and poor scanning
    input.ToGrayScale();
    var result = ocr.Read(Input);
    Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate3.jpg"))
{
    input.DeNoise(); // fixes digital noise and poor scanning
    input.ToGrayScale();
    var result = ocr.Read(Input);
    Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput("D:\Liscence Plate\plate3.jpg")
	input.DeNoise() ' fixes digital noise and poor scanning
	input.ToGrayScale()
	Dim result = ocr.Read(Input)
	Console.WriteLine(result.Text)
End Using
VB   C#

這執行以下操作:

  • 初始化 IronTesseract 物件,使用預設設定。
  • 創建一個新的 OcrInput 用輸入影像檔案填充的物件。
  • 調用 去噪, 其可移除數位雜訊。此過濾器應僅在雜訊預期發生時使用;在我們的情況下,監控影片或照片通常充滿雜訊。
  • 調用 ToGrayScale 濾鏡,使每個像素變成灰色。 (這可能會提高速度)。
  • 通過 Read 方法從 OcrInput 對象讀取文本,該方法返回一個 OcrResult 物件。OcrInput 是首選的輸入類型,因為它允許 多頁文件的OCR,並在讀取之前允許圖像被增強,以獲得更快、更準確的結果。
  • result.Text 返回從車牌中提取的所有內容。

我們可以看到從檢測到的車牌提取了正確的車牌號碼。

如何在 C# 中進行車牌 OCR(教程),圖 6:IronOCR 正確檢測並提取車牌圖像中的數字

IronOCR 正確地檢測並提取了車牌圖像中的數字

假設我們沒有單獨的車牌圖像,而是有整輛車的照片。現在,我們需要掃描車牌區域並執行文字識別。

掃描汽車的車牌號碼

我們可以使用 System.Drawing.Rectangle 來指定我們將讀取車牌的區域。測量單位始終是像素。

我們將使用以下示例圖像文件。

如何在 C# 中進行車牌 OCR(教程),圖 7:顯示車牌的汽車全景後視圖

完整的汽車後視圖,車牌清晰可見

我們將會看到這不僅提升了速度,也避免了讀取不必要的文字。

var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    // a 41% improvement on speed
    var contentArea = new CropRectangle(x: 365, y: 240, height: 80, width: 29);
    input.AddImage(@"D:\Liscence Plate\plate1.jpg", contentArea);
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    // a 41% improvement on speed
    var contentArea = new CropRectangle(x: 365, y: 240, height: 80, width: 29);
    input.AddImage(@"D:\Liscence Plate\plate1.jpg", contentArea);
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput()
	' a 41% improvement on speed
	Dim contentArea = New CropRectangle(x:= 365, y:= 240, height:= 80, width:= 29)
	input.AddImage("D:\Liscence Plate\plate1.jpg", contentArea)
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
VB   C#

這導致41%的速度提升,並允許我們具體說明。我們指定該區域的起始座標 (x 和 y) 偵測區域的寬度和高度。

内容區域 (OCR 裁剪) 當讀取 PDF 時,亦支援。

自動車牌照識別

IronOCR 利用 OpenCV 來使用計算機視覺檢測圖像中存在文字的區域。它執行圖像處理技術並使用檢測模型來檢測牌照。IronOCR 中使用的計算機視覺技術會判斷文字區域的位置,然後使用 Tesseract 嘗試讀取這些區域。

我們需要安裝 IronOcr.ComputerVision.Windows 來使用車牌檢測模型。

在 Package Manager Console 中使用以下命令。

PM> Install-Package IronOcr.ComputerVision.Windows

這將提供必要的程序集以使用IronOCR Computer Vision與我們的模型文件。

以下範例代碼將自動偵測汽車的車牌。

var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate1.jpg"))
{
    input.FindTextRegion();
    OcrResult result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate1.jpg"))
{
    input.FindTextRegion();
    OcrResult result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput("D:\Liscence Plate\plate1.jpg")
	input.FindTextRegion()
	Dim result As OcrResult = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
VB   C#

使用 尋找文字區域 將使用電腦視覺來檢測 OcrInput 物件每張圖像中的車牌區域。

摘要

在本教程中,我們學習了如何使用 IronOCR 並開發了一個簡單的程式來讀取汽車的車牌。 我們看到 IronOCR 使我們能夠從模糊或低解析度圖像中讀取文字,它高效、準確、支援127多種語言並且完全準確,開發是免費的,生產上也沒有任何限制。

總結來說,IronOCR 提供了:

  • 用於 C# 的 OCR 來掃描和讀取圖像及 PDF
  • .NET OCR 庫,擁有 127 多個全球語言套件
  • 輸出為文字、結構化數據或可搜索的 PDF
  • 支援 .NET 6、5、Core、Standard、Framework

IronOCR 屬於 Iron Suite. 此套件包含其他非常有用的庫,例如 IronPDF 用於讀取和寫入 PDF, IronXL 用於操作 Excel 文件,和 IronWebScraper 用於從網站提取數據。 您可以 購買 兩個庫的價格包含 Iron Suite 授權.

< 上一頁
如何在C#中進行駕照的OCR
下一個 >
如何從 C# 教程中獲取發票文本

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 2,433,305 查看許可證 >