使用 IRONOCR

如何在C#中OCR车牌(教程)

更新 2023年十二月19日
分享:

在本教程中,我们将学习编程式车牌识别。我们将获取一些车牌图像样本并提取车牌号码。我们将开发一个 C# 和 .NET 程序来执行车牌自动识别。本教程简单易学,即使是 C# 程序初学者也能轻松掌握。

有许多可用来执行 OCR 的库。其中有些是付费的,有些难以使用,有些效率不高或不准确。要找到一个免费、高效、易用且结果准确的库可能非常困难。我发现并使用了 IronOCR;它对开发是免费的,对商业用途提供 1 个月的免费试用期,易于使用,效率高,提供多线程,支持 150 多种语言,除此之外还提供更好的准确性。它可以执行从车牌检测到获取车牌号码的所有任务。

IronOCR

IronOCR 是由 Iron Software 开发和维护的一个库,可帮助 C# 软件工程师在 .NET 项目中执行 OCR、条形码扫描和文本提取。

IronOCR 的功能

  • 从图像等多种格式中读取文本 (JPEG、PNG、GIFF、TIFF、BMP), 信息流和 PDF 文件
  • 使用 "纠偏"、"去噪"、"二值化"、"增强分辨率"、"缩小 "等大量滤镜纠正低质量扫描和照片
  • 读取 20 多种条形码格式的条形码,以及 支持二维码
  • 利用最新版本的 魔方 OCR,调整性能

  • 导出 可搜索的 PDF、HTML 和图像内容文本。

让我们开发一个读取车牌号码的演示程序。

创建一个 Visual Studio 项目

第一步是创建一个 Visual Studio 项目。

打开 Visual Studio。点击 "创建新项目",然后选择项目模板 (我为该演示应用程序选择了控制台应用程序模板,但您也可以根据自己的要求或偏好选择任何模板).点击 "下一步 "按钮,并为项目命名 (我把它命名为 "车牌 OCR",但你可以给它起任何名字).点击 "Next(下一步)"按钮,选择目标 .NET Framework。最后,点击 "Create(创建)"按钮创建项目。创建的项目如下图所示。

如何在 C# 中 OCR 车牌(教程),图 1:为我们的车牌 OCR 项目创建 Visual Studio 项目

为我们的车牌 OCR 项目创建一个 Visual Studio 项目

现在,我们需要安装 IronOCR 库,以便在项目中使用它。最简单的方法是通过 NuGet 包管理器安装。

安装 IronOCR NuGet 软件包

单击顶部菜单栏中的 "工具",然后选择 NuGet 包管理器 > Manage NuGet Packages for Solution,如下图所示。

如何在 C# 中 OCR 车牌(教程),图 2:在 Visual Studio 中找到 NuGet 包管理器用户界面

在 Visual Studio 中定位 NuGet 包管理器用户界面

将出现以下窗口。

如何在 C# 中 OCR 车牌(教程),图 3:Visual Studio 中的 NuGet 包管理器用户界面

Visual Studio中的NuGet软件包管理器用户界面

点击浏览,搜索 IronOCR。选择 IronOCR 软件包并点击安装按钮,如下图所示。

如何在 C# 中 OCR 车牌(教程),图 4:在 NuGet 包管理器用户界面中安装 IronOCR 库

在 NuGet 软件包管理器用户界面安装 IronOCR 库

IronOCR 库将被安装并准备就绪。

使用光学字符识别技术读取车牌

让我们编写一个读取车牌的程序。IronOCR 是一个 Tesseract OCR 引擎,用于从图像中提取文本,因此如果我们需要实现计算机视觉来检测车辆,可能需要使用其他机器学习库。IronOCR 支持 OpenCV,这是一个开源的、市场领先的检测模型。IronOCR 可与 OpenCV 配合使用,执行对象检测,如汽车检测或车牌检测。

我们将读取以下车牌:

如何在 C# 中 OCR 车牌(教程),图 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#

其功能如下

  • 初始化 钢铁魔方 对象的默认设置。
  • 创建一个新的 OcrInput 对象填充了一个输入图像文件。
  • 调用 去噪音它可以去除数字噪音。这种滤波器只能在预计会出现噪点的地方使用;在我们的案例中,CCTV 视频或图片通常都会充满噪点。
  • 调用 灰度 滤镜,将每个像素都变成灰色 (这可能会提高速度).
  • 通过 Read 方法从一个 OcrInput 对象中读取文本,该方法返回一个 OcrResult 对象。OcrInput "是首选的输入类型,因为它允许 多页文件的 OCR 识别它还可以在读取前对图像进行增强,以获得更快、更准确的结果。
  • 结果文本 返回从车牌中提取的全部内容。

我们可以看到,从检测到的车牌中提取到了正确的车牌号码。

如何在 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 "来使用车牌检测模型。

在软件包管理器控制台中使用以下命令。

PM> Install-Package IronOcr.ComputerVision.Windows

这将提供必要的程序集,以便在我们的模型文件中使用 IronOCR 计算机视觉。

以下示例代码将自动检测汽车的车牌。

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 可以提供

  • 用于扫描和读取图像和 PDF 的 C# OCR
  • 带有 127+ 全局语言包的 .NET OCR 库
  • 以文本、结构化数据或可搜索 PDF 的形式输出
  • 支持 .NET 6、5、核心、标准、框架

IronOCRIron Suite.该套件包含其他非常有用的库,如 IronPDF 用于读写 PDF 文件、 IronXL 用于操作 Excel 文件,以及 IronWebScrapper 用于从网站提取数据。您可以 购买 铁艺套房只需支付两个图书馆的费用 许可证.

< 前一页
如何在C#中OCR 驾照
下一步 >
如何在 C# 教程中从发票获取文本

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 2,319,721 查看许可证 >