在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在本教程中,我們將學習程式化的車牌識別。我們將採用一些樣本車牌圖像並提取車牌號碼。我們將開發一個 C# 和 .NET 程式來執行自動車牌識別。本教程簡單易懂,即使是初學者 C# 程式設計師也適用。
有很多可用的庫來執行 OCR。其中一些是付費的,有些難以使用,有些則不高效或不準確。要找到一個免費、高效、易於使用且能提供準確結果的庫可能非常困難。我找到了並使用了 IronOCR;它對開發是免費的,並為商業用途提供 1 個月的免費試用,易於使用,高效,支持多線程,支持 150 多種語言,除此之外還提供更高的準確性。它將執行從車牌檢測到獲得車牌號碼的所有任務。
IronOCR 由 Iron Software 開發和維護的庫,幫助 C# 軟體工程師在 .NET 專案中進行 OCR、條碼掃描和文字提取。
去斜
、去噪
、二值化
、提高解析度
、膨脹
等來修正低品質的掃描和照片利用最新版本的 Tesseract OCR,調校以提供最佳效能
讓我們開發一個讀取車牌號碼的演示應用程式。
第一步是建立一個 Visual Studio 專案。
開啟 Visual Studio。點擊「建立新專案」,並選擇專案範本 (我已選擇控制台應用程式範本來作為此展示應用程式,但您可以根據需要或偏好選擇其他範本。). 點擊「下一步」按鈕,並命名項目 (我將它命名為「車牌OCR」,但您可以命名為任何名稱。). 點擊「下一步」按鈕,選擇目標 .NET 框架。最後,點擊「創建」按鈕來創建專案。專案將會如下面所示創建。
為我們的車牌 OCR 專案創建一個 Visual Studio 專案
現在,我們需要安裝 IronOCR 庫以在我們的專案中使用它。最簡單的方法是通過 NuGet 套件管理器安裝它。
點擊頂部選單列的工具,然後選擇 NuGet 套件管理員 > 管理方案的 NuGet 套件,如下所示。
在 Visual Studio 中定位 NuGet 套件管理器 UI
以下視窗將出現。
Visual Studio 中的 NuGet 套件管理器 UI
點擊「瀏覽」,並搜尋 IronOCR。選擇 IronOCR 套件,然後點擊安裝按鈕,如下所示。
在NuGet套件管理器UI中安裝IronOCR庫
IronOCR庫將被安裝並準備使用。
讓我們來寫一個讀取車牌的程式。IronOCR 是一個基於Tesseract的OCR引擎,用來從圖像中提取文字,所以如果我們需要實現電腦視覺來檢測車輛,就可能需要使用其他機器學習庫。IronOCR 支持 OpenCV,這是一個開源且市場領先的檢測模型。IronOCR 可以與 OpenCV 結合使用,以執行物體檢測,如汽車檢測或車牌檢測。
我們將讀取以下的車牌號:
一个清楚可见车牌号码的车牌图片
現在,我們來寫程式碼。
添加以下命名空間:
using IronOcr;
using IronOcr;
Imports IronOcr
然後新增以下代碼:
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
這執行以下操作:
IronTesseract
物件,使用預設設定。去噪
, 其可移除數位雜訊。此過濾器應僅在雜訊預期發生時使用;在我們的情況下,監控影片或照片通常充滿雜訊。ToGrayScale
濾鏡,使每個像素變成灰色。 (這可能會提高速度)。Read
方法從 OcrInput
對象讀取文本,該方法返回一個 OcrResult
物件。OcrInput
是首選的輸入類型,因為它允許 多頁文件的OCR,並在讀取之前允許圖像被增強,以獲得更快、更準確的結果。result.Text
返回從車牌中提取的所有內容。我們可以看到從檢測到的車牌提取了正確的車牌號碼。
IronOCR 正確地檢測並提取了車牌圖像中的數字
假設我們沒有單獨的車牌圖像,而是有整輛車的照片。現在,我們需要掃描車牌區域並執行文字識別。
我們可以使用 System.Drawing.Rectangle
來指定我們將讀取車牌的區域。測量單位始終是像素。
我們將使用以下示例圖像文件。
完整的汽車後視圖,車牌清晰可見
我們將會看到這不僅提升了速度,也避免了讀取不必要的文字。
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
這導致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
使用 尋找文字區域
將使用電腦視覺來檢測 OcrInput
物件每張圖像中的車牌區域。
在本教程中,我們學習了如何使用 IronOCR 並開發了一個簡單的程式來讀取汽車的車牌。 我們看到 IronOCR 使我們能夠從模糊或低解析度圖像中讀取文字,它高效、準確、支援127多種語言並且完全準確,開發是免費的,生產上也沒有任何限制。
總結來說,IronOCR 提供了:
IronOCR 屬於 Iron Suite. 此套件包含其他非常有用的庫,例如 IronPDF 用於讀取和寫入 PDF, IronXL 用於操作 Excel 文件,和 IronWebScraper 用於從網站提取數據。 您可以 購買 兩個庫的價格包含 Iron Suite 授權.