Konfiguracja OCR dla zaawansowanego czytania
IronOCR zapewnia zaawansowane metody odczytu skanów, takie jak ReadPassport, ReadLicensePlate, i ReadPhoto, które wykraczają poza standardowe OCR. Te metody są wspierane przez pakiet IronOcr.Extensions.AdvancedScan. Aby precyzyjnie dostosować, jak te metody przetwarzają tekst, IronOCR udostępnia klasę TesseractConfiguration, dając programistom pełną kontrolę nad białymi i czarnymi listami znaków, wykrywaniem kodów kreskowych, odczytem tabel danych i więcej.
Ten artykuł obejmuje właściwości TesseractConfiguration dostępne dla zaawansowanego odczytu oraz praktyczne przykłady konfigurowania OCR w rzeczywistych scenariuszach.
Szybki start: Ograniczanie wyników OCR do białej listy znaków
Ustaw WhiteListCharacters na TesseractConfiguration przed wywołaniem Read. Każdy znak spoza listy dozwolonych jest cicho usuwany z wyniku, eliminując szumy bez żadnej dalszej obróbki.
-
Install IronOCR with NuGet Package Manager
-
Skopiuj i uruchom ten fragment kodu.
var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(new OcrInput("image.png")); Console.WriteLine(result.Text); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną
Jak Konfigurować OCR do Zaawansowanego Odczytu
- Zainstaluj IronOCR z NuGet
- Zainstaluj pakiet IronOcr.Extensions.AdvancedScan
- Skonfiguruj właściwości
TesseractConfigurationtakie jakWhiteListCharactersiReadBarCodes - Załaduj obraz wejściowy za pomocą
OcrInput - Odczytaj obraz używając zaawansowanej metody, takiej jak
ReadPhoto,ReadLicensePlatelubReadPassport
Właściwości TesseractConfiguration
Klasa TesseractConfiguration zapewnia następujące właściwości do dostosowywania zachowania OCR. Są one ustawiane przez IronTesseract.Configuration.
| Właściwość | Typ | Opis |
|---|---|---|
WhiteListCharacters |
string | Tylko znaki obecne w tym ciągu będą rozpoznawane w wyjściu OCR. Wszystkie inne znaki są wykluczone. |
BlackListCharacters |
string | Znaki w tym ciągu są aktywnie ignorowane i usuwane z wyjścia OCR. |
ReadBarCodes |
bool | Włącza lub wyłącza wykrywanie kodów kreskowych w dokumencie podczas przetwarzania OCR. |
ReadDataTables |
bool | Włącza lub wyłącza wykrywanie struktury tabel w dokumencie za pomocą Tesseract. |
PageSegmentationMode |
TesseractPageSegmentationMode | Określa, jak Tesseract segmentuje obraz wejściowy. Opcje obejmują AutoOsd, Auto, SingleBlock, SingleLine, SingleWord i inne. |
RenderSearchablePdf |
bool | Po włączeniu, wyjście OCR może być zapisane jako przeszukiwalny PDF z niewidoczną warstwą tekstową. |
RenderHocr |
bool | Po włączeniu, wyjście OCR zawiera dane hOCR do dalszej obróbki lub eksportu. |
TesseractVariables |
Dictionary<string, object> | Zapewnia bezpośredni dostęp do niskopoziomowych zmiennych konfiguracyjnych Tesseract dla precyzyjnej kontroli. |
Słownik TesseractVariables idzie jeszcze dalej, udostępniając setki podstawowych parametrów silnika Tesseract w przypadku, gdy właściwości wysokiego poziomu są niewystarczające.
Poniższe przykłady pokazują każdą grupę właściwości, zaczynając od dozwolonego zestawu znaków.
Konfigurowanie Dozwolonego Zestawu Znaków dla Tablic Rejestracyjnych
Powszechnym przypadkiem użycia WhiteListCharacters jest ograniczenie wyjścia OCR tylko do znaków, które mogą pojawić się na tablicy rejestracyjnej: wielkie litery, cyfry, łączniki i spacje. To eliminuje szumy i poprawia dokładność, informując silnik, by ignorował wszystko poza oczekiwanym zestawem znaków.
Dane wejściowe
Poniższy zapis rejestracji pojazdu zawiera mieszankę tekstu wielkimi literami, tekstu małymi literami, specjalnych symboli (@, $, #, |, *), oraz interpunkcję.
BlackListCharacters uzupełnia białą listę, aktywnie wykluczając znane symbole zakłóceń, takie jak , and*`.
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading.cs
using IronOcr;
// Initialize the Tesseract OCR engine
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
// Whitelist only characters that appear on license plates
WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ",
// Blacklist common noise characters
BlackListCharacters = "`~@#$%&*",
};
var ocrInput = new OcrInput();
// Load the input image
ocrInput.LoadImage("advanced-input.png");
// Perform OCR on the input image with ReadPhoto method
var results = ocr.ReadPhoto(ocrInput);
// Print the filtered text result to the console
Console.WriteLine(results.Text);
Imports IronOcr
' Initialize the Tesseract OCR engine
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
' Whitelist only characters that appear on license plates
.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ",
' Blacklist common noise characters
.BlackListCharacters = "`~@#$%&*"
}
Dim ocrInput As New OcrInput()
' Load the input image
ocrInput.LoadImage("advanced-input.png")
' Perform OCR on the input image with ReadPhoto method
Dim results = ocr.ReadPhoto(ocrInput)
' Print the filtered text result to the console
Console.WriteLine(results.Text)
Wynik
Filtracja dozwolonych znaków jest wyraźnie widoczna w wynikach:
- "Tablica: ABC-1234" staje się "T ABC-1234". Słowo małymi literami "late:" jest usuwane, podczas gdy numer tablicy jest zachowany dokładnie.
- "VIN: 1HGBH41JXMN109186" staje się "VIN 1HGBH41JXMN109186". Dwukropek jest usuwany, ale wielkie litery VIN i pełna liczba są zachowane.
- "Właściciel: john.doe@email.com" staje się "W". Cały email małymi literami i interpunkcja są usuwane.
- "Region: CA-90210|Strefa #5" staje się "R CA-90210 Z 5". Rura (
|) and hash (#) są usuwane, a wielkie litery i cyfry pozostają. - "Opłata: $125.00 + podatek*" staje się "O 12500". Znak dolara, kropka dziesiętna, znak plus i małe litery "podatek" są usuwane.
- "Ref: ~record_v2^final" staje się "R 2". Tylkę, podkreślenie, znak akcentu i wszystkie małe litery są usuwane.
Te same podejście WhiteListCharacters i BlackListCharacters działa dla każdego typu dokumentu, nie tylko dla tablic rejestracyjnych. Następna sekcja pokazuje, jak rozszerzyć odczyt, aby wykrywać kody kreskowe i struktury tabel jednocześnie.
Konfigurowanie Odczytu Kodów Kreskowych i Tabel Danych
IronOCR może wykrywać kody kreskowe i struktury tabel w dokumentach wraz z tekstem. Te funkcje są kontrolowane przez TesseractConfiguration:
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-3.cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
// Enable barcode detection within documents
ReadBarCodes = true,
// Enable table structure detection
ReadDataTables = true,
};
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.ReadBarCodes = True, ' Enable barcode detection within documents
.ReadDataTables = True ' Enable table structure detection
}
- ReadBarCodes: Gdy ustawione na
true, IronOCR skanuje dokument w poszukiwaniu kodów kreskowych oprócz tekstu. Ustawione nafalse, aby pominąć wykrywanie kodów kreskowych i przyspieszyć przetwarzanie, gdy kody kreskowe nie są spodziewane. - ReadDataTables: Gdy ustawione na
true, Tesseract podejmuje próbę wykrycia i zachowania struktury tabel w dokumencie. To jest przydatne dla faktur, raportów i innych dokumentów tabelarycznych.
Te opcje można łączyć z WhiteListCharacters i BlackListCharacters dla precyzyjnej kontroli nad tym, co jest wydobywane z złożonych dokumentów.
Podczas gdy filtracja i wykrywanie kontrolują, co jest wyodrębniane, interpretacja układu jest osobnym zagadnieniem. Następna sekcja omawia, jak wybrać odpowiedni PageSegmentationMode dla rodzaju dokumentu.
Kontrolowanie Trybu Segmentacji Strony
PageSegmentationMode informuje Tesseract, jak segmentować obraz wejściowy przed rozpoznawaniem. Wybranie niewłaściwego trybu dla określonego układu powoduje, że silnik źle odczytuje lub całkowicie pomija tekst.
| Tryb | Przykład zastosowania |
|---|---|
AutoOsd |
Automatyczna analiza układu z wykrywaniem orientacji i skryptu |
Auto |
Automatyczna analiza układu bez OSD (domyślnie) |
SingleColumn |
Zakłada, że obraz jest pojedynczą kolumną tekstu |
SingleBlock |
Zakłada, że obraz jest jednym jednolitym blokiem tekstu |
SingleLine |
Zakłada, że obraz jest pojedynczą linią tekstu |
SparseText |
Znajduje jak najwięcej tekstu w dowolnym porządku |
Dla etykiety lub baneru zawierającego jedną linię, SingleLine eliminuje analizę wielu bloków i poprawia zarówno szybkość, jak i dokładność.
Dane wejściowe
single-line-label.png to wąska etykieta wysyłkowa z dokładnie jedną linią pogrubionego tekstu Courier: SHIPPING LABEL: TRK-2024-XR9-001.
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-4.cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
PageSegmentationMode = TesseractPageSegmentationMode.SingleLine,
};
using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
}
Using input As New OcrInput()
input.LoadImage("single-line-label.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Dla zeskanowanej strony z nieregularnym rozmieszczeniem tekstu, SparseText odzyskuje więcej treści niż Auto.
Dane wejściowe
receipt-scan.png to paragon termiczny z Corner Market z czterema pozycjami (kawa, muffinka, sok, baton granola), kreskowanym separatorem, subtotalem, podatkiem i sumą całkowitą. To jest układ, gdzie segmentacja stałych bloków pomija wpisy na różnych poziomych pozycjach.
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-5.cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
PageSegmentationMode = TesseractPageSegmentationMode.SparseText,
};
using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronTesseract
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.PageSegmentationMode = TesseractPageSegmentationMode.SparseText
}
Using input As New OcrInput()
input.LoadImage("receipt-scan.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Z dostrojoną segmentacją układu do typu dokumentu, następnym krokiem jest kontrolowanie formatu wyjścia dla dalszego przetwarzania.
Generowanie Przeszukiwalnych PDF-ów i hOCR Output
RenderSearchablePdf i RenderHocr kontrolują formaty wyjściowe, które IronOCR generuje obok wyniku tekstowego.
RenderSearchablePdf osadza niewidoczną warstwę tekstową nad oryginalnym obrazem, tworząc plik PDF, w którym użytkownicy mogą wyszukiwać i kopiować tekst, podczas gdy zeskanowany obraz pozostaje widoczny. To jest standardowy format wyjścia dla przepływów pracy archiwizacji dokumentów.
Dane wejściowe
scanned-document.pdf to jedno-stronicowy list biznesowy od IronOCR Solutions Ltd. (z dnia 15 marca 2024, referencja DOC-2024-OCR-0315). Wynik jest zapisany jako searchable-output.pdf.
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-6.cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
RenderSearchablePdf = true,
};
using OcrInput input = new OcrInput();
input.LoadPdf("scanned-document.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronTesseract
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.RenderSearchablePdf = True
}
Using input As New OcrInput()
input.LoadPdf("scanned-document.pdf")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
End Using
Wynik
Wyjście to PDF, które wygląda identycznie do wejścia, ale zawiera ukrytą warstwę tekstową. Otwórz searchable-output.pdf i użyj Ctrl+F, aby zweryfikować, że osadzony tekst jest możliwy do przeszukiwania i kopiowania.
RenderHocr produkuje dokument hOCR, plik HTML, który koduje treść tekstową wraz z koordynatami ramki dla każdego słowa. To jest przydatne, gdy narzędzia przetwarzania dalszego potrzebują precyzyjnego umiejscowienia słów, na przykład silniki redakcyjne lub analiza układu dokumentu.
Dane wejściowe
document-page.png to strona dokumentu z nagłówkiem "Podsumowanie kwartalne Q1 2024" i dwoma akapitami danych finansowych, obejmujących przychody, koszty operacyjne i czynniki wzrostu. Wynik jest zapisany jako output.html.
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-7.cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
RenderHocr = true,
};
using OcrInput input = new OcrInput();
input.LoadImage("document-page.png");
OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("output.html");
Imports IronTesseract
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.RenderHocr = True
}
Using input As New OcrInput()
input.LoadImage("document-page.png")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsHocrFile("output.html")
End Using
Wynik
output.html koduje każde rozpoznane słowo z jego koordynatami ramki. Otwórz plik w przeglądarce, aby sprawdzić strukturę hOCR, lub przekaż go do narzędzia do analizy układu lub redagowania.
Oba flagi można włączyć jednocześnie, jeśli potrzebujesz wszystkich trzech formatów wyjściowych (zwykły tekst, PDF z możliwością wyszukiwania i hOCR) z jednego wywołania odczytu.
Te flagi wyjściowe działają niezależnie od odczytywanego języka, w tym w przypadku alfabetów innych niż łaciński. W następnej sekcji pokazano, jak zastosować filtrowanie znaków do tekstu w języku japońskim.
Filtrowanie znaków Unicode w dokumentach międzynarodowych
Dla międzynarodowych dokumentów w języku chińskim, japońskim lub koreańskim, właściwości WhiteListCharacters i BlackListCharacters współpracują z znakami Unicode. Pozwala to ograniczyć wynik do określonych skryptów, np. tylko hiragana i katakana dla języka japońskiego.
Dane wejściowe
Dokument zawiera tytuł (テスト), japońskie zdanie łączące hiraganę i katakanę z wariantami znaków dźwięcznych (プ, で), wiersz z ceną zawierający symbole zakazane (★, ■) oraz kanji (価格), a także wiersz z notatką zawierający kolejny symbol z czarnej listy (§), więcej kanji (購入), dodatkowe warianty znaków dźwięcznych (プ, デ) oraz podstawowe katakana (メモ, ール). Biała lista dopuszcza wyłącznie podstawowe znaki hiragana, podstawowe znaki katakana, cyfry oraz popularną japońską interpunkcję; Trzy symbole hałasu są wyraźnie umieszczone na czarnej liście.
Zakresy znaków Unicode dla Hiragany i Katakany są przekazywane jako dosłowne ciągi znaków w WhiteListCharacters, z listą symboli szumu w BlackListCharacters.
:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-jp.cs
using IronOcr;
using System.IO;
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
// Whitelist only Hiragana, Katakana, numbers, and common Japanese punctuation
WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" +
"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" +
"0123456789、。?!()¥ー",
// Blacklist common noise/symbols you want to ignore
BlackListCharacters = "★■§",
};
var ocrInput = new OcrInput();
// Load Japanese input image
ocrInput.LoadImage("jp.png");
// Perform OCR on the input image with ReadPhoto method
var results = ocr.ReadPhoto(ocrInput);
// Write the text result directly to a file named "output.txt"
File.WriteAllText("output.txt", results.Text);
// You can add this line to confirm the file was saved:
Console.WriteLine("OCR results saved to output.txt");
Imports IronOcr
Imports System.IO
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" &
"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" &
"0123456789、。?!()¥ー",
.BlackListCharacters = "★■§"
}
Dim ocrInput As New OcrInput()
' Load Japanese input image
ocrInput.LoadImage("jp.png")
' Perform OCR on the input image with ReadPhoto method
Dim results = ocr.ReadPhoto(ocrInput)
' Write the text result directly to a file named "output.txt"
File.WriteAllText("output.txt", results.Text)
' You can add this line to confirm the file was saved:
Console.WriteLine("OCR results saved to output.txt")
Wynik
Pełny, przefiltrowany wynik jest dostępny w postaci pliku tekstowego: jp-output.txt.
Ponieważ biała lista zawiera tylko podstawowe znaki hiragana i katakana, pominięto pochodne warianty znaków z oznaczeniem dźwięczności, takie jak プ (pu) i デ (de). Znaki kanji, takie jak 価格 (cena) i 購入 (zakup), są również wykluczone, ponieważ nie znajdują się w zestawie znaków z białej listy. Symbole na czarnej liście, takie jak ★, ■, i §, są aktywnie usuwane niezależnie od białej listy.
Gdzie powinienem się udać dalej?
Teraz, gdy już wiesz, jak skonfigurować IronOCR do zaawansowanych scenariuszy odczytu, zapoznaj się z:
- Odczytywanie określonych typów dokumentów, takich jak paszporty i tablice rejestracyjne
- Odczytywanie kodów kreskowych i kodów QR jako samodzielny przypadek użycia OCR
- Eksportowanie plików hOCR i plików PDF z możliwością wyszukiwania z przetworzonych wyników
Dla zastosowania w produkcji, pamiętaj, aby uzyskać licencję, aby usunąć znaki wodne i mieć pełen dostęp do funkcjonalności.
Często Zadawane Pytania
Co to jest TesseractConfiguration w IronOCR?
TesseractConfiguration w IronOCR pozwala użytkownikom dostosować ustawienia OCR, umożliwiając zaawansowane możliwości czytania, takie jak listy dozwolonych znaków, odczyt kodów kreskowych i obsługa wielojęzyczna.
Jak mogę ustawić listę dozwolonych znaków w IronOCR?
W IronOCR można ustawić listę dozwolonych znaków za pomocą TesseractConfiguration, co pozwala określić, które znaki mają być rozpoznawane przez silnik OCR, co jest przydatne w zadaniach takich jak odczyt tablic rejestracyjnych.
Czy IronOCR może odczytywać kody kreskowe i tabele danych?
Tak, IronOCR można skonfigurować do odczytywania kodów kreskowych i tabel danych poprzez dostosowanie specyficznych ustawień we właściwościach TesseractConfiguration dla precyzyjnej ekstrakcji danych przez OCR.
Czy IronOCR obsługuje języki międzynarodowe, takie jak chiński, japoński i koreański?
IronOCR obsługuje języki międzynarodowe, w tym chiński, japoński i koreański, poprzez opcje wielojęzyczne TesseractConfiguration.
Jakie są zalety korzystania z zaawansowanych konfiguracji OCR w IronOCR?
Korzystanie z zaawansowanych konfiguracji OCR w IronOCR umożliwia dokładniejsze i wydajniejsze rozpoznawanie tekstu, wspierając zadania specjalistyczne, takie jak rozpoznawanie tekstu specyficznego dla języka i ekstrakcja danych strukturalnych.
Czy można zoptymalizować IronOCR do specyficznych zadań OCR?
Tak, IronOCR można zoptymalizować do specyficznych zadań OCR, konfigurowając ustawienia takie jak listy dozwolonych znaków i włączając odczyt kodów kreskowych lub tabel, co poprawia wydajność dla wybranych zastosowań.
Jak włączyć obsługę wielojęzyczności w IronOCR?
Aby włączyć obsługę wielojęzyczności w IronOCR, można dostosować ustawienia języka w TesseractConfiguration, co pozwala silnikowi OCR rozpoznawać tekst w wielu językach.
Co to są listy dozwolonych znaków i jak są używane w IronOCR?
Listy dozwolonych znaków w IronOCR to listy konkretnych znaków, które są skonfigurowane do rozpoznawania przez silnik OCR, idealne dla zadań skupionych, takich jak odczyt cyfr czy określonych wzorów tekstu.
Czy IronOCR może być używany do odczytu formatów danych strukturalnych?
Tak, IronOCR można skonfigurować do odczytu i przetwarzania formatów danych strukturalnych, takich jak kody kreskowe i tabele, oferując wszechstronne zdolności OCR dla różnych potrzeb ekstrakcji danych.
Jakie konfiguracje są dostępne w IronOCR dla zaawansowanego rozpoznawania tekstu?
IronOCR oferuje konfiguracje takie jak listy dozwolonych znaków, obsługa wielojęzyczna i rozpoznawanie kodów kreskowych, aby zwiększyć funkcje zaawansowanego rozpoznawania tekstu dostosowane do specyficznych wymagań.

