Jak odczytywać tablice rejestracyjne w C# OCR

Jak odczytywać tablice rejestracyjne w języku C# za pomocą IronOCR

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

Metoda ReadLicensePlate IronOCR automatycznie wyodrębnia numery tablic rejestracyjnych z obrazów pojazdów, wykorzystując zaawansowaną technologię OCR. To pojedyncze wywołanie metody pozwala przetwarzać tablice rejestracyjne z dużą dokładnością, zwracając zarówno tekst tablicy, jak i wynik pewności dla systemów automatycznego zarządzania pojazdami.

W przypadku zarządzania dużą ilością zdjęć pojazdów ręczne odczytywanie tablic rejestracyjnych jest czasochłonne i podatne na błędy ludzkie. Zautomatyzowanie tego procesu za pomocą narzędzia takiego jak IronOCR zapewnia bardziej wydajne i dokładne rozwiązanie. Metoda ReadLicensePlate IronOCR może programowo wyodrębnić numery tablic rejestracyjnych z obrazów, oszczędzając znaczną ilość czasu i poprawiając dokładność danych.

W tym przewodniku pokażemy, jak używać IronOCR do rozpoznawania tablic rejestracyjnych, omawiając przykłady i konfigurowalne ustawienia, które sprawiają, że proces przebiega płynnie. Wykorzystując te metody, programiści mogą zautomatyzować odczyt tablic rejestracyjnych, zwiększając efektywność zadań takich jak zarządzanie parkingami, pobieranie opłat drogowych czy nadzór bezpieczeństwa.

Aby użyć tej funkcji, należy również zainstalować pakiet IronOcr.Extension.AdvancedScan.

Szybki start: Natychmiastowe wyodrębnianie numerów rejestracyjnych

Za pomocą pojedynczego wywołania metody ReadLicensePlate IronOCR można programowo wyodrębnić tekst tablicy rejestracyjnej z dowolnego obrazu. Jest gotowe do użycia — wystarczy załadować obraz, wywołać metodę i od razu uzyskać zarówno numer rejestracyjny, jak i poziom pewności.

  1. Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr
  2. Skopiuj i uruchom ten fragment kodu.

    OcrLicensePlateResult result = new IronTesseract().ReadLicensePlate(new OcrInput("plate.jpg"));
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak odczytać numer rejestracyjny w języku C#?

Aby odczytać tablicę rejestracyjną w IronOCR, wykonujemy następujące kroki:

  • Używamy metody ReadLicensePlate, która jako parametr wejściowy przyjmuje OcrInput. Ta metoda jest bardziej optymalizowana dla tablic rejestracyjnych niż standardowy odpowiednik Read biblioteki.
  • Opcjonalnie możemy skonfigurować IronOCR tak, aby dodać do białej listy określone znaki, które mogą występować w numerze rejestracyjnym, co przyspieszy przetwarzanie numerów rejestracyjnych.

Zwróć uwagę

  • Metoda ta działa obecnie tylko w przypadku alfabetów angielskiego, chińskiego, japońskiego, koreańskiego i łacińskiego.
  • Korzystanie z zaawansowanego skanowania w środowisku .NET Framework wymaga, aby projekt działał na architekturze x64.
    )}]

Jak wygląda tablica rejestracyjna z tekstem źródłowym?

Tablica rejestracyjna stanu Kalifornia z numerem '8TRS777' - przykład do demonstracji odczytu tablic rejestracyjnych

Jak skonfigurować OCR dla tablic rejestracyjnych?

: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

Jakich rezultatów mogę się spodziewać?

Konsola debug pokazująca wyniki OCR tablicy rejestracyjnej: stan Kalifornia, tablica 8TRS777, pewność 95,87%

Kod demonstruje, jak zaimportować obraz jako OcrInput i użyć go z metodą ReadLicensePlate, aby wyodrębnić tekst z tablicy rejestracyjnej. Wynik pokazuje wyodrębniony tekst, który pasuje do tablicy rejestracyjnej widocznej na obrazku wejściowym, wraz z poziomem pewności wskazującym dokładność OCR.

Tekst: Tekst wyodrębniony z danych wejściowych OCR.

Pewność: Właściwość double wskazująca statystyczną pewność dokładności średniej każdego znaku, gdzie jeden jest najwyższa a 0 najniższa.

Aby uzyskać większą kontrolę nad procesem OCR, możesz zapoznać się z zaawansowanymi opcjami konfiguracji, które pozwalają precyzyjnie dostosować ustawienia rozpoznawania znaków.


Jak mogę wyodrębnić tablice rejestracyjne ze zdjęć samochodów?

Metoda ta sprawdza się również w przypadku obrazów przedstawiających samochód z tablicą rejestracyjną. Kod jest taki sam jak powyżej, zmieniono jedynie obraz wejściowy. Można również wyodrębnić współrzędne pikselowe obszaru, w którym na zdjęciu znajduje się tablica rejestracyjna.

Jakie zdjęcia samochodów sprawdzają się najlepiej?

Samochód Skoda w ciemnoszarym kolorze z tablicą rejestracyjną Maharashtra MH 20 EE 7602 zaparkowany na brukowanym chodniku

Aby uzyskać optymalne wyniki, upewnij się, że zdjęcia samochodów mają:

  • Dobra widoczność tablicy rejestracyjnej
  • Dobre warunki oświetleniowe (unikaj odblasków i cieni)
  • Minimalne zniekształcenie kątowe
  • Odpowiednia rozdzielczość (rozważ dostosowanie ustawień DPI w przypadku obrazów o niskiej rozdzielczości)

Jak uzyskać współrzędne lokalizacji tablicy rejestracyjnej?

: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

Jakie informacje zawiera wynik?

Wynik debugowania w Visual Studio pokazujący wykrytą tablicę rejestracyjną MH20EE7602 z współrzędnymi i wymiarami pola bbox

Przykład pokazuje, jak metoda ReadLicensePlate może być zastosowana do obrazu samochodu. Metoda zwróci również współrzędne prostokąta, w którym znajduje się tablica rejestracyjna na obrazie.

Ta metoda jest zoptymalizowana pod kątem wyszukiwania wyłącznie pojedynczych tablic rejestracyjnych i umożliwia ich wyszukiwanie w zdjęciach stockowych.

Jak przetwarzać wiele tablic rejestracyjnych?

W przypadku wielu obrazów pojazdów można je efektywnie przetwarzać za pomocą operacji wsadowych:

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

W przypadku przetwarzania na dużą skalę warto rozważyć wdrożenie funkcji wielowątkowości w celu maksymalizacji wydajności.

Jak mogę poprawić dokładność rozpoznawania tablic rejestracyjnych?

Aby zwiększyć dokładność wykrywania tablic rejestracyjnych, warto rozważyć następujące techniki optymalizacji:

Zastosuj filtry przetwarzania wstępnego obrazu

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

Dowiedz się więcej o dostępnych filtrach obrazu i technikach korekcji obrazu, aby zoptymalizować swoje obrazy wejściowe.

Obsługa różnych warunków oświetleniowych

W przypadku trudnych warunków oświetleniowych należy zastosować odpowiednie korekty:

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

Jak monitorować wydajność OCR?

Podczas przetwarzania dużych partii tablic rejestracyjnych śledzenie postępów pomaga w zarządzaniu zasobami systemowymi:

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

Aby uzyskać szczegółowe informacje na temat monitorowania wydajności, zapoznaj się z funkcjami śledzenia postępów w IronOCR.

Jak to się ma do innych dokumentów o podobnej tematyce?

Specjalistyczne możliwości IronOCR w zakresie odczytu dokumentów wykraczają poza tablice rejestracyjne. Ta sama technologia wizji komputerowej, która służy do wykrywania tablic rejestracyjnych, może być zastosowana do:

Jakie są typowe zastosowania?

Rozpoznawanie tablic rejestracyjnych za pomocą IronOCR umożliwia różne zastosowania:

  • Zarządzanie parkingami: Automatyzacja rejestrowania wjazdów/wyjazdów oraz przetwarzania płatności
  • Pobieranie opłat: przyspieszenie identyfikacji pojazdów na punktach poboru opłat
  • Nadzór bezpieczeństwa: Śledzenie ruchu pojazdów w obszarach o ograniczonym dostępie
  • Zarządzanie flotą: monitorowanie pojazdów firmowych i logistyki
  • Organy ścigania: Szybka identyfikacja pojazdów będących przedmiotem zainteresowania

Każdy przypadek użycia korzysta z wysokiej dokładności IronOCR i możliwości przetwarzania obrazów w czasie rzeczywistym, dzięki czemu nadaje się zarówno do przetwarzania wsadowego, jak i do zastosowań na żywo.

Często Zadawane Pytania

Jak odczytać tablice rejestracyjne z obrazów w C#?

Możesz odczytać tablice rejestracyjne w C# za pomocą metody ReadLicensePlate w IronOCR. Po prostu utwórz instancję IronTesseract i wywołaj ReadLicensePlate z OcrInput zawierającym obraz tablicy rejestracyjnej. Metoda zwraca OcrLicensePlateResult z wyodrębnionym tekstem tablicy i wskaźnikiem pewności.

Jakie pakiety muszę zainstalować do rozpoznawania tablic rejestracyjnych?

Aby używać funkcji rozpoznawania tablic rejestracyjnych w IronOCR, należy zainstalować zarówno główny pakiet IronOCR, jak i pakiet IronOcr.Extension.AdvancedScan z NuGet. Rozszerzenie AdvancedScan dostarcza specjalistyczną metodę ReadLicensePlate.

Czy mogę wyodrębnić tablice rejestracyjne za pomocą jednego wiersza kodu?

Tak, IronOCR pozwala na wyodrębnienie tekstu tablic rejestracyjnych za pomocą jednego wiersza kodu: OcrLicensePlateResult result = new IronTesseract().ReadLicensePlate(new OcrInput("plate.jpg")); To natychmiast zwraca zarówno numer tablicy, jak i wskaźnik pewności.

Jakie języki są obsługiwane przy rozpoznawaniu tablic rejestracyjnych?

Metoda ReadLicensePlate w IronOCR obecnie obsługuje tablice rejestracyjne z alfabetami angielskim, chińskim, japońskim, koreańskim i łacińskim. Metoda jest specjalnie zoptymalizowana dla tych zestawów znaków.

Jak mogę poprawić dokładność odczytywania tablic rejestracyjnych?

Możesz poprawić dokładność w IronOCR, dodając na białą listę konkretne znaki pojawiające się na tablicach rejestracyjnych, upewniając się, że obraz zawiera tylko tablicę rejestracyjną bez nagłówków lub stopek oraz używając wysokiej jakości obrazów. Metoda ReadLicensePlate jest już zoptymalizowana specjalnie dla rozpoznawania tablic rejestracyjnych.

Jakie są wymagania systemowe dotyczące rozpoznawania tablic rejestracyjnych na .NET Framework?

Podczas korzystania z zaawansowanych funkcji skanowania IronOCR, w tym ReadLicensePlate na .NET Framework, Twój projekt musi działać na architekturze x64. Wymóg ten zapewnia optymalną wydajność funkcji rozpoznawania tablic rejestracyjnych.

Jakie informacje zwraca rozpoznawanie tablic rejestracyjnych?

Metoda ReadLicensePlate w IronOCR zwraca obiekt OcrLicensePlateResult zawierający wyodrębniony tekst tablicy rejestracyjnej oraz wskaźnik pewności. Pozwala to na odzyskanie numeru tablicy i ocenę wiarygodności wyniku OCR.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 5,571,678 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronOcr
uruchom próbkę obserwuj, jak twój obraz staje się tekstem z możliwością wyszukiwania.