如何在 C# OCR 中读取车牌

如何使用 IronOCR 用 C# 阅读车牌。

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 的 ReadLicensePlate 方法使用先进的 OCR 技术从车辆图像中自动提取车牌号码。 此单一方法调用可高精度处理车牌,为自动车辆管理系统返回车牌文本和置信度分数。

在管理大量车辆图像时,手动读取车牌既费时又容易出错。 使用 IronOCR 等工具实现此过程的自动化,可以提供更高效、更准确的解决方案。 IronOCR 的 ReadLicensePlate 方法可以通过编程从图像中提取车牌号码,在提高数据准确性的同时节省大量时间。

在本指南中,我们将演示如何使用 IronOCR 进行车牌识别,并通过示例和可定制的配置实现无缝流程。 通过利用这些方法,开发人员可以自动读取车牌号码,从而提高停车管理、收费或安全监控等任务的效率。

要使用此功能,您还必须安装IronOcr.Extension.AdvancedScan软件包。

快速入门:立即提取车牌号码

使用 IronOCR 的 ReadLicensePlate 只需调用一个方法,您就可以通过编程从任何图像中提取车牌文本。 它可随时使用--只需加载图片、调用方法,即可立即获得车牌号码和信心。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronOCR

    PM > Install-Package IronOcr

  2. 复制并运行这段代码。

    OcrLicensePlateResult result = new IronTesseract().ReadLicensePlate(new OcrInput("plate.jpg"));
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronOCR,免费试用!
    arrow pointer

如何用 C# 阅读车牌?

要在 IronOCR 中读取车牌,我们采用以下步骤:

  • 我们利用 ReadLicensePlate 方法,该方法将 OcrInput 作为输入参数。 与该库的标准 Read 对应方法相比,该方法针对车牌进行了更多优化。
  • 我们可以选择配置 IronOCR,将车牌中可能存在的特定字符列入白名单,以加快车牌号码的处理速度。

请注意

  • 该方法目前仅适用于英语、中文、日语、韩语和拉丁字母脚本。
  • 在 .NET Framework 上使用高级扫描功能需要项目在 x64 架构上运行。

输入车牌是什么样子的?

显示 "8TRS777 "的加利福尼亚州车牌--车牌读取演示示例

如何配置车牌 OCR?

:path=/static-assets/ocr/content-code-examples/how-to/read-license-plate-read-license-plate.cs
using IronOcr;
using System;

var ocr = new IronTesseract();
ocr.Configuration.WhiteListCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";

using var inputLicensePlate = new OcrInput();
inputLicensePlate.LoadImage("plate.jpeg");

// Read license plate
OcrLicensePlateResult result = ocr.ReadLicensePlate(inputLicensePlate);

// Retrieve license plate number and confidence value
string output = $"{result.Text}\nResult Confidence: {result.Confidence}";

Console.WriteLine(output);
Imports Microsoft.VisualBasic
Imports IronOcr
Imports System

Private ocr = New IronTesseract()
ocr.Configuration.WhiteListCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"

Dim inputLicensePlate = New OcrInput()
inputLicensePlate.LoadImage("plate.jpeg")

' Read license plate
Dim result As OcrLicensePlateResult = ocr.ReadLicensePlate(inputLicensePlate)

' Retrieve license plate number and confidence value
Dim output As String = $"{result.Text}" & vbLf & "Result Confidence: {result.Confidence}"

Console.WriteLine(output)
$vbLabelText   $csharpLabel

我应该期待什么样的结果?

调试控制台显示车牌 OCR 结果:加利福尼亚州,车牌 8TRS777,置信度 95.87%

该代码演示了如何将图像作为OcrInput导入,并将其与ReadLicensePlate方法一起使用,以从车牌中提取文本。 输出结果显示了与输入图像中显示的车牌匹配的提取文本,以及指示 OCR 准确性的置信度。

文本:从 OCR 输入中提取的文本。

信心:一个 double 属性,表示平均每个字符的统计准确性置信度,1 表示最高,0 表示最低。

要对 OCR 过程进行更精确的控制,您可以探索高级配置选项来微调字符识别设置。


如何从汽车图片中提取车牌?

该方法对于包含车牌的汽车图像也同样有效。 代码与上面的代码相同,只是更改了输入图片。 您还可以提取车牌所在区域的像素坐标。

哪种类型的汽车图片效果最好?

深灰色斯柯达汽车,显示马哈拉施特拉邦车牌 MH 20 EE 7602,停在砖砌人行道上

为达到最佳效果,请确保您的汽车图片具有以下特征

  • 车牌清晰可见
  • 良好的照明条件(避免眩光或阴影)
  • 尽量减少角度变形
  • 足够的分辨率(考虑调整 DPI 设置,以适应低分辨率的图像)

如何获取车牌位置坐标?

:path=/static-assets/ocr/content-code-examples/how-to/read-license-plate-read-from-car.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

var ocr = new IronTesseract();
using var inputLicensePlate = new OcrInput();
inputLicensePlate.LoadImage("car_license.jpg");

// Read license plate
OcrLicensePlateResult result = ocr.ReadLicensePlate(inputLicensePlate);

// Retrieve license plate coordinates
RectangleF rectangle = result.Licenseplate;

// Write license plate value and coordinates in a string
string output = $"License Plate Number:\n{result.Text}\n\n"
              + $"License Plate Area_\n"
              + $"Starting X: {rectangle.X}\n"
              + $"Starting Y: {rectangle.Y}\n"
              + $"Width: {rectangle.Width}\n"
              + $"Height: {rectangle.Height}";

Console.WriteLine(output);
Imports Microsoft.VisualBasic
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

Private ocr = New IronTesseract()
Private inputLicensePlate = New OcrInput()
inputLicensePlate.LoadImage("car_license.jpg")

' Read license plate
Dim result As OcrLicensePlateResult = ocr.ReadLicensePlate(inputLicensePlate)

' Retrieve license plate coordinates
Dim rectangle As RectangleF = result.Licenseplate

' Write license plate value and coordinates in a string
Dim output As String = $"License Plate Number:" & vbLf & "{result.Text}" & vbLf & vbLf & $"License Plate Area_" & vbLf & $"Starting X: {rectangle.X}" & vbLf & $"Starting Y: {rectangle.Y}" & vbLf & $"Width: {rectangle.Width}" & vbLf & $"Height: {rectangle.Height}"

Console.WriteLine(output)
$vbLabelText   $csharpLabel

结果包括哪些信息?

Visual Studio 调试输出,显示检测到的车牌 MH20EE7602 及边界框坐标和尺寸

该示例展示了如何将ReadLicensePlate方法应用于汽车图像。 该方法还会返回车牌在图像中所在的矩形坐标。

该方法经过优化,仅用于查找单个车牌,并且能够在图库图片中搜索车牌。

如何处理多个车牌?

在处理多张车辆图像时,您可以使用批处理操作对其进行高效处理:

using IronOcr;
using System.IO;
using System.Threading.Tasks;

public async Task ProcessMultipleLicensePlates(string[] imagePaths)
{
    var ocr = new IronTesseract();

    // Configure for optimal performance
    ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;

    var tasks = imagePaths.Select(async path => 
    {
        using var input = new OcrInput();
        input.LoadImage(path);

        var result = await Task.Run(() => ocr.ReadLicensePlate(input));

        return new { 
            FilePath = path, 
            PlateNumber = result.Text, 
            Confidence = result.Confidence 
        };
    });

    var results = await Task.WhenAll(tasks);

    // Process results
    foreach (var result in results)
    {
        Console.WriteLine($"File: {result.FilePath}");
        Console.WriteLine($"Plate: {result.PlateNumber} (Confidence: {result.Confidence:P})");
    }
}
using IronOcr;
using System.IO;
using System.Threading.Tasks;

public async Task ProcessMultipleLicensePlates(string[] imagePaths)
{
    var ocr = new IronTesseract();

    // Configure for optimal performance
    ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;

    var tasks = imagePaths.Select(async path => 
    {
        using var input = new OcrInput();
        input.LoadImage(path);

        var result = await Task.Run(() => ocr.ReadLicensePlate(input));

        return new { 
            FilePath = path, 
            PlateNumber = result.Text, 
            Confidence = result.Confidence 
        };
    });

    var results = await Task.WhenAll(tasks);

    // Process results
    foreach (var result in results)
    {
        Console.WriteLine($"File: {result.FilePath}");
        Console.WriteLine($"Plate: {result.PlateNumber} (Confidence: {result.Confidence:P})");
    }
}
Imports IronOcr
Imports System.IO
Imports System.Threading.Tasks

Public Async Function ProcessMultipleLicensePlates(imagePaths As String()) As Task
    Dim ocr As New IronTesseract()

    ' Configure for optimal performance
    ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock

    Dim tasks = imagePaths.Select(Async Function(path)
                                      Using input As New OcrInput()
                                          input.LoadImage(path)

                                          Dim result = Await Task.Run(Function() ocr.ReadLicensePlate(input))

                                          Return New With {
                                              .FilePath = path,
                                              .PlateNumber = result.Text,
                                              .Confidence = result.Confidence
                                          }
                                      End Using
                                  End Function)

    Dim results = Await Task.WhenAll(tasks)

    ' Process results
    For Each result In results
        Console.WriteLine($"File: {result.FilePath}")
        Console.WriteLine($"Plate: {result.PlateNumber} (Confidence: {result.Confidence:P})")
    Next
End Function
$vbLabelText   $csharpLabel

对于大规模处理,请考虑实施多线程功能,以最大限度地提高性能。

如何提高车牌识别准确性?

为提高车牌检测的准确性,请考虑以下优化技术:

应用图像预处理过滤器

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();

// Load and preprocess the image
input.LoadImage("blurry_plate.jpg");
input.Deskew();  // Correct image rotation
input.DeNoise(); // Remove background noise
input.EnhanceResolution(225); // Upscale for better clarity
input.Sharpen(); // Enhance edge definition

var result = ocr.ReadLicensePlate(input);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();

// Load and preprocess the image
input.LoadImage("blurry_plate.jpg");
input.Deskew();  // Correct image rotation
input.DeNoise(); // Remove background noise
input.EnhanceResolution(225); // Upscale for better clarity
input.Sharpen(); // Enhance edge definition

var result = ocr.ReadLicensePlate(input);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    ' Load and preprocess the image
    input.LoadImage("blurry_plate.jpg")
    input.Deskew() ' Correct image rotation
    input.DeNoise() ' Remove background noise
    input.EnhanceResolution(225) ' Upscale for better clarity
    input.Sharpen() ' Enhance edge definition

    Dim result = ocr.ReadLicensePlate(input)
End Using
$vbLabelText   $csharpLabel

了解有关可用图像过滤器图像校正技术的更多信息,以优化输入图像。

处理不同的照明条件

对于具有挑战性的照明场景,应进行适当的修正:

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();

input.LoadImage("dark_plate.jpg");
input.Contrast(1.5); // Increase contrast
input.Brightness(1.2); // Adjust brightness
input.Binarize(); // Convert to black and white for clarity

var result = ocr.ReadLicensePlate(input);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();

input.LoadImage("dark_plate.jpg");
input.Contrast(1.5); // Increase contrast
input.Brightness(1.2); // Adjust brightness
input.Binarize(); // Convert to black and white for clarity

var result = ocr.ReadLicensePlate(input);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("dark_plate.jpg")
    input.Contrast(1.5) ' Increase contrast
    input.Brightness(1.2) ' Adjust brightness
    input.Binarize() ' Convert to black and white for clarity

    Dim result = ocr.ReadLicensePlate(input)
End Using
$vbLabelText   $csharpLabel

如何监控 OCR 性能?

在处理大批量车牌时,跟踪进度有助于管理系统资源:

using IronOcr;

var ocr = new IronTesseract();

// Subscribe to progress events
ocr.OcrProgress += (sender, e) => 
{
    Console.WriteLine($"Processing: {e.ProgressPercent}% complete");
};

using var input = new OcrInput();
input.LoadImage("large_parking_lot.jpg");

var result = ocr.ReadLicensePlate(input);
using IronOcr;

var ocr = new IronTesseract();

// Subscribe to progress events
ocr.OcrProgress += (sender, e) => 
{
    Console.WriteLine($"Processing: {e.ProgressPercent}% complete");
};

using var input = new OcrInput();
input.LoadImage("large_parking_lot.jpg");

var result = ocr.ReadLicensePlate(input);
Imports IronOcr

Dim ocr As New IronTesseract()

' Subscribe to progress events
AddHandler ocr.OcrProgress, Sub(sender, e)
                                Console.WriteLine($"Processing: {e.ProgressPercent}% complete")
                            End Sub

Using input As New OcrInput()
    input.LoadImage("large_parking_lot.jpg")

    Dim result = ocr.ReadLicensePlate(input)
End Using
$vbLabelText   $csharpLabel

如需详细的性能监控,请探索 IronOCR 中的进度跟踪功能

这与其他文档阅读相比有何不同?

IronOCR 的专业文档阅读能力不仅限于车牌。 为车牌检测提供动力的计算机视觉技术同样可以应用于以下领域:

常见的使用案例有哪些?

使用 IronOCR 进行车牌识别可以实现各种应用:

  • 停车管理:自动出入记录和付款处理
  • 收费:加快收费站的车辆识别速度
  • 安全监控:跟踪禁区内的车辆行驶情况
  • 车队管理:监控公司车辆和物流
  • 执法:快速识别相关车辆

每个用例都受益于 IronOCR 的高准确性和实时处理图像的能力,使其既适用于批处理,也适用于实时应用。

常见问题解答

如何用 C# 从图像中读取车牌?

您可以使用 IronOCR 的 ReadLicensePlate 方法用 C# 阅读车牌。只需创建一个 IronTesseract 实例,然后使用包含车牌图像的 OcrInput 调用 ReadLicensePlate。该方法会返回一个 OcrLicensePlateResult,其中包含提取的车牌文本和置信度分数。

车牌识别需要安装什么软件包?

要使用 IronOCR 中的车牌识别功能,您需要安装 IronOCR 主软件包和来自 NuGet 的 IronOcr.Extension.AdvancedScan 软件包。AdvancedScan 扩展包提供了专门的 ReadLicensePlate 方法。

只需一行代码就能提取车牌吗?

是的,IronOCR 只需一行代码即可提取车牌文本:OcrLicensePlateResult result = new IronTesseract().ReadLicensePlate(new OcrInput("plate.jpg")); 这将立即返回车牌号码和置信度分数。

车牌识别支持哪些语言?

IronOCR 的 ReadLicensePlate 方法目前支持英文、中文、日文、韩文和拉丁字母脚本的车牌。该方法专门针对这些字符集进行了优化。

如何提高车牌读取的准确性?

您可以通过以下方法提高 IronOCR 的准确性:将车牌中出现的特定字符列入白名单,确保图片只包含车牌而不包含页眉或页脚,以及使用高质量图片。ReadLicensePlate 方法已专门针对车牌识别进行了优化。

.NET Framework 上车牌识别的系统要求是什么?

在 .NET Framework 上使用 IronOCR 的高级扫描功能(包括 ReadLicensePlate)时,您的项目必须在 x64 架构上运行。这一要求可确保车牌识别功能达到最佳性能。

车牌识别会返回哪些信息?

IronOCR 的 ReadLicensePlate 方法会返回一个 OcrLicensePlateResult 对象,其中包含提取的车牌文本和置信度分数。这样,您既可以检索车牌号码,也可以评估 OCR 结果的可靠性。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 5,384,824 | 版本: 2026.2 刚刚发布