Jak odczytywać tablice rejestracyjne w języku C# za pomocą IronOCR
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.
-
Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr -
Skopiuj i uruchom ten fragment kodu.
OcrLicensePlateResult result = new IronTesseract().ReadLicensePlate(new OcrInput("plate.jpg")); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz bibliotekę C# do odczytu tablic rejestracyjnych
- Zaimportuj obraz tablicy rejestracyjnej do przetworzenia
- Upewnij się, że dokument zawiera wyłącznie obraz tablicy rejestracyjnej, bez nagłówków i stopek
- Użyj metody
ReadLicensePlate,aby wyodrębnić dane z obrazu - Użyj właściwości
OcrLicensePlateResult,aby wyświetlić i edytować wyodrębnione dane rejestracyjne
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 przyjmujeOcrInput. Ta metoda jest bardziej optymalizowana dla tablic rejestracyjnych niż standardowy odpowiednikReadbiblioteki. - 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.
- 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?

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)
Jakich rezultatów mogę się spodziewać?

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?

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)
Jakie informacje zawiera wynik?

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
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
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
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
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:
- Odczytywanie paszportów w celu weryfikacji tożsamości i podróży
- Przetwarzanie czeków MICR dla aplikacji bankowych
- Ogólne skanowanie dokumentów w ramach projektów digitalizacji
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.

