跳至页脚内容
使用 IRONOCR
如何在C#中对车牌执行OCR

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

车牌识别已成为许多行业的基本工具,从交通管理和停车系统到执法和收费解决方案。 通过利用光学字符识别(OCR)技术,开发人员可以高效地从图像中提取文本,实现车牌识别过程的自动化。 在本教程中,我们将展示如何使用IronOCR,一个强大的C# OCR库,从图像中准确读取车牌。 凭借与OpenCV源代码的无缝集成,用于计算机视觉任务,IronOCR提供了一个强大的解决方案,即使从复杂或噪声图像来源中也能识别文本。 无论您是处理清晰的车牌图像还是完整的车辆照片,本指南都将引导您使用现代OCR技术构建一个可靠的车牌识别系统。

如何使用C#进行车牌识别

  1. 安装C#库以使用车牌识别
  2. 将车牌图像导入到新的OcrImageInput实例中。
  3. 应用图像过滤器以提高C#中的文本提取效果。
  4. 通过指定照片中的车牌区域来提高识别速度。
  5. 使用OcrLicensePlateResult实例打印提取的文本。

IronOCR 入门

IronOCR是一个基于Tesseract OCR引擎的C#库,专为提高.NET应用程序中文本识别项目的高精度和高效性而设计。 适合处理噪声或低质量图像,IronOCR包括强大的图像预处理功能,如自动降噪和灰度转换,提高文本提取的清晰度。

IronOCR的一些突出功能包括:

  • 高OCR准确性:优化以支持多种语言和字体,IronOCR即使在处理复杂或扭曲的文本时也表现出色。
  • 图像和PDF支持:可以从多种图像格式和PDF文件中读取文本,使其适用于不同的文档类型。
  • 与OpenCV的集成:通过OpenCV支持,IronOCR可以执行计算机视觉任务,如检测图像中特定的文本区域,这对车牌识别尤其有用。
  • 高级预处理:包括灰度转换、旋转、去倾斜和对比度增强等过滤器,以提高识别质量。
  • 灵活的输入选项:支持多页文档和可调区域,让开发人员可以专注于选定区域的OCR处理,以获得更快和更针对性的结果。

凭借这些功能,IronOCR是构建要求精确、灵活及易于与其他计算机视觉工具集成的OCR应用程序的强大解决方案。

创建 Visual Studio 项目

首先打开Visual Studio并选择"创建新项目"。 这将带您进入一个页面,在这里可以选择要构建的项目类型(在我们的案例中,我们将制作一个控制台应用程序)。 选择所需的应用程序类型并单击"下一步"。

Visual Studio项目类型

现在,给您的项目命名并选择其将保存的位置。

项目名称和位置

最后,选择您的目标.NET框架并点击"创建"按钮。 这将创建项目,如下所示。

创建的项目

下一步是安装IronOCR库,以便开始处理车牌。

安装IronOCR

要在您的C#项目中开始使用IronOCR,您需要从NuGet安装IronOCR包。 IronOCR兼容.NET Framework和.NET Core,使其易于集成到各种.NET应用程序中。

步骤1:打开包管理器控制台

在Visual Studio中,导航到工具 > NuGet包管理器 > 包管理器控制台

步骤2:安装IronOCR包

在包管理器控制台中输入以下命令:

Install-Package IronOcr

此命令安装IronOCR库,包括项目中运行OCR功能所需的所有依赖项。 由于我们的应用程序需要使用计算机视觉的高级功能,如车牌检测,您也可以通过以下方式安装可选的IronOcr.ComputerVision.Windows包:

Install-Package IronOcr.ComputerVision.Windows

确保安装IronOCR.Extensions.AdvancedScan扩展,以便您可以利用其强大的ReadLicensePlate方法:

Install-Package IronOcr.Extensions.AdvancedScan

或者,您可以使用工具 > NuGet包管理器 > 为解决方案管理NuGet包安装这些包并搜索您需要的包:

NuGet包管理器

设置代码

最后,我们必须在代码顶部添加必要的导入和using语句:

using IronOcr;
using IronOcr;
Imports IronOcr
$vbLabelText   $csharpLabel

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

在本节中,我们将创建一个程序,使用IronOCR,一个擅长从图像中提取文本的Tesseract OCR引擎,来读取车牌。 为了实现车辆检测,我们可能还会结合其他机器学习库。 值得注意的是,IronOCR与OpenCV集成,这是一个领先的开源计算机视觉库,允许我们进行对象检测任务,如识别车辆和车牌。

车牌示例图像

我们将使用以下车牌:

车牌示例

对车牌执行OCR的示例代码

using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrImageInput("licensePlate.jpeg"))
{
    // Fixes digital noise and makes the image easier to read
    input.DeNoise();
    input.ToGrayScale();

    // Reads the license plate information and stores it for further use
    OcrLicensePlateResult result = ocr.ReadLicensePlate(input);

    // Saves the license plate text to a string variable
    string output = result.Text;

    // Outputs the license plate text to the console
    Console.WriteLine(output);
}
using IronOcr;

var ocr = new IronTesseract();

using (var input = new OcrImageInput("licensePlate.jpeg"))
{
    // Fixes digital noise and makes the image easier to read
    input.DeNoise();
    input.ToGrayScale();

    // Reads the license plate information and stores it for further use
    OcrLicensePlateResult result = ocr.ReadLicensePlate(input);

    // Saves the license plate text to a string variable
    string output = result.Text;

    // Outputs the license plate text to the console
    Console.WriteLine(output);
}
Imports IronOcr

Private ocr = New IronTesseract()

Using input = New OcrImageInput("licensePlate.jpeg")
	' Fixes digital noise and makes the image easier to read
	input.DeNoise()
	input.ToGrayScale()

	' Reads the license plate information and stores it for further use
	Dim result As OcrLicensePlateResult = ocr.ReadLicensePlate(input)

	' Saves the license plate text to a string variable
	Dim output As String = result.Text

	' Outputs the license plate text to the console
	Console.WriteLine(output)
End Using
$vbLabelText   $csharpLabel

OCR输出

代码细节:

  • 初始化var ocr = new IronTesseract(); 创建一个新的IronTesseract类实例,它提供进行光学字符识别(OCR)的方法。

  • 图像输入using语句创建一个新的OcrImageInput对象,使用指定的图像文件"licensePlate.jpeg"。 这个对象被设计为保存用于OCR处理的图像数据。

  • 图像预处理

    • input.DeNoise();应用一个数字降噪滤镜,以提高图像质量,使OCR引擎更容易读取文本。
    • input.ToGrayScale();将图像转换为灰度,这可以提高识别准确性和处理速度。
  • 车牌识别OcrLicensePlateResult result = ocr.ReadLicensePlate(input);使用ReadLicensePlate方法分析处理过的图像,并提取任何检测到的车牌信息,将结果存储在一个OcrLicensePlateResult对象中。

  • 输出存储:通过访问result.Text,其中包含从车牌中识别出的文本,车牌文本被存储在字符串变量output中。

  • 控制台输出:最后,Console.WriteLine(output);打印提取的车牌文本到控制台进行验证。

从汽车扫描车牌号码

如果我们有一张整辆车的图像,而不仅仅是一张车牌,我们可以指定一个矩形区域,以专注于车牌区域。 我们可以使用System.Drawing.Rectangle以像素定义该区域。

原始图像

我们将使用以下图像文件进行示例:

带车牌的汽车

通过指定感兴趣区域,我们提高了处理速度,避免提取不必要的文本。

实现代码

using IronOcr;
using System.Drawing;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    var contentArea = new Rectangle(x: 252, y: 282, width: 148, height: 47);
    input.LoadImage("CarPlate.jpeg", contentArea);
    OcrLicensePlateResult result = ocr.ReadLicensePlate(input);
    Console.WriteLine(result.Text);
}
using IronOcr;
using System.Drawing;

var ocr = new IronTesseract();

using (var input = new OcrInput())
{
    var contentArea = new Rectangle(x: 252, y: 282, width: 148, height: 47);
    input.LoadImage("CarPlate.jpeg", contentArea);
    OcrLicensePlateResult result = ocr.ReadLicensePlate(input);
    Console.WriteLine(result.Text);
}
Imports IronOcr
Imports System.Drawing

Private ocr = New IronTesseract()

Using input = New OcrInput()
	Dim contentArea = New Rectangle(x:= 252, y:= 282, width:= 148, height:= 47)
	input.LoadImage("CarPlate.jpeg", contentArea)
	Dim result As OcrLicensePlateResult = ocr.ReadLicensePlate(input)
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

聚焦OCR输出

代码细节:

  • 初始化var ocr = new IronTesseract();创建一个新的IronTesseract类实例,它负责执行OCR操作。
  • OCR输入using (var input = new OcrInput())语句创建一个新的OcrInput对象,将用于加载和处理用于OCR的图像。
  • 定义感兴趣区域var contentArea = new Rectangle(x: 252, y: 282, width: 148, height: 47);定义图像中的一个矩形区域(contentArea)。 这个矩形指定了车牌预计所在的坐标和尺寸(宽度和高度)。
  • 加载图像input.LoadImage("CarPlate.jpeg", contentArea);加载指定的图像文件("CarPlate.jpeg")并聚焦于定义的矩形(contentArea),以将OCR处理限制于该特定区域。
  • 读取车牌OcrLicensePlateResult result = ocr.ReadLicensePlate(input);调用ReadLicensePlate方法,分析输入图像的车牌字符,并返回一个包含提取文本的OcrLicensePlateResult对象。
  • 输出Console.WriteLine(result.Text);将识别出的车牌文本打印到控制台。

自动车牌识别

IronOCR利用OpenCV识别图像中的文本区域,采用各种图像处理技术。 此功能使程序能够通过定位图像中的文字区域来检测车牌,然后利用Tesseract读取这些区域。

安装

要启用车牌检测模型,请通过包管理器控制台安装所需的包:

使用自动区域检测车牌的示例:

var ocr = new IronTesseract();

using (var input = new OcrImageInput("CarPlate.jpeg"))
{
    input.FindTextRegion();
    OcrLicensePlateResult result = ocr.ReadLicensePlate(input);
    Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();

using (var input = new OcrImageInput("CarPlate.jpeg"))
{
    input.FindTextRegion();
    OcrLicensePlateResult result = ocr.ReadLicensePlate(input);
    Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()

Using input = New OcrImageInput("CarPlate.jpeg")
	input.FindTextRegion()
	Dim result As OcrLicensePlateResult = ocr.ReadLicensePlate(input)
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

自动OCR输出

代码细节:

  • 初始化:创建一个IronTesseract类实例,将用于通过Tesseract引擎进行光学字符识别(OCR)。
  • 图像输入:使用指定的图像文件("CarPlate.jpeg")实例化一个新的OcrImageInput对象。 这个对象将作为OCR过程的输入,并且在using语句中封装以确保正确的资源管理。
  • 文本区域检测:在input对象上调用FindTextRegion()方法。 该方法使用计算机视觉技术自动识别图像中可能包含文本的区域,特别是针对车牌。
  • 车牌识别:调用ReadLicensePlate方法分析检测到的文本区域,提取车牌号码。 结果存储在一个OcrLicensePlateResult对象中,该对象包含识别的文本及任何关联的元数据。
  • 输出:检测到的车牌文本打印到控制台,允许用户查看提取的车牌号码。

IronOCR授权

IronOCR许可证

对于想要自己尝试IronOCR的人来说,IronOCR提供免费试用版,让您可以访问其提供的完整工具范围,这意味着您可以在自己的项目中尝试这些工具,然后再购买许可证。 一旦您的免费试用到期,IronOCR许可的价格从仅$liteLicense开始。 它还提供可选附加项,如无版税再分发覆盖、不断的支持和持续的产品更新,需额外收费。

除此之外,如果您发现自己需要使用除IronOCR之外的更多Iron Software产品,例如用于PDF相关任务的IronPDF或用于处理Word文档的IronWord,那么Iron Software也提供Iron Suite,这是获得整个工具范围的好方法,价格也很优惠。

结论

在本指南中,我们探索了如何使用IronOCR在C#中构建一个可靠的车牌识别系统。 凭借其强大的文本提取功能和与OpenCV的集成,IronOCR为需要从车辆图像中准确识别文本的应用提供了一种高效、易于使用的解决方案。 从预处理图像到设置特定的检测区域,IronOCR利用为嘈杂或复杂图像量身定制的工具简化了OCR过程,如交通与监控画面中的车牌。

无论您是在为交通监控、停车执法还是任何需要自动车牌识别的应用程序开发,IronOCR提供了一个无缝集成到.NET环境中的全面库。 通过遵循这些步骤,您可以部署OCR驱动的解决方案,从而提高各种现实场景中效率和准确性。 通过如选择区域和降噪等附加功能,IronOCR确保您的车牌识别任务优化以获得最佳结果。

常见问题解答

我如何使用OCR在C#中识别车牌号码?

您可以使用IronOCR在C#中识别车牌号码,方法是使用IronTesseract类创建一个OCR实例,加载包含车牌的图像,应用预处理滤波器,如降噪,然后使用ReadLicensePlate方法提取文本。

使用OCR进行车牌识别有什么好处?

使用OCR进行车牌识别可以自动化文字提取过程,提供高准确性和效率。IronOCR通过提供多种图像格式支持和计算机视觉集成,增强了这一点,使其成为交通管理和执法等应用的理想选择。

我该如何处理OCR处理中的噪声或低质量图像?

IronOCR提供强大的图像预处理功能,如自动降噪和灰度转换,即使在处理噪声或低质量图像时也能提高文字提取准确度。

是否可以将OCR处理集中在图像的特定区域?

是的,IronOCR允许您在图像中指定感兴趣的矩形区域,以集中OCR处理,提高文字提取的速度和准确性,如车牌区域。

我如何在Visual Studio项目中开始使用OCR?

要在Visual Studio项目中开始使用OCR,请创建一个新的控制台应用程序,通过NuGet安装IronOCR包,并使用IronOCR类和方法实现OCR逻辑。此设置允许您在应用程序中轻松执行OCR任务。

IronOCR为车牌识别提供了哪些功能?

IronOCR提供高OCR准确性,与OpenCV集成以增强计算机视觉任务,先进的预处理滤波器,与多种图像和PDF格式兼容,使其成为车牌识别的多用途工具。

IronOCR如何与计算机视觉任务集成?

IronOCR与OpenCV集成,执行各种计算机视觉任务,如自动文本区域检测,提升OCR流程,以实现车牌识别等应用。

IronOCR 提供哪些授权选项?

IronOCR提供免费试用以及多种授权选项,起价为轻量级授权。还提供附加组件和Iron Suite,适用于希望在不同应用中扩展功能的用户。

OCR技术可以应用于整个车辆图像吗?

可以,IronOCR可以用于整个车辆图像。通过指定车牌区域,您可以将OCR处理集中在所需区域,避免不必要的文字提取,提高处理效率。

Kannaopat Udonpant
软件工程师
在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。