Konfiguracja OCR dla zaawansowanego czytania
IronOCR dostarcza zaawansowane metody skanowania, takie jak ReadPassport, ReadLicensePlate i ReadPhoto, które wykraczają poza standardowe OCR. Metody te są obsługiwane przez pakiet IronOcr.Extensions.AdvancedScan. Aby dostosować, jak te metody przetwarzają tekst, IronOCR udostępnia klasę TesseractConfiguration, dając programistom pełną kontrolę nad dozwolonymi znakami, wykluczaniem znaków, wykrywaniem kodów kreskowych, czytaniem tabel danych i więcej.
Ten artykuł omawia 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
PM > Install-Package IronOcr -
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 oferuje następujące właściwości dostosowujące działanie OCR. Są one ustawiane przez IronTesseract.Configuration.
| Właściwość | Typ | Opis |
|---|---|---|
WhiteListCharacters |
ciąg znaków | Tylko znaki obecne w tym ciągu będą rozpoznawane w wyjściu OCR. Wszystkie inne znaki są wykluczone. |
BlackListCharacters |
ciąg znaków | 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 |
Zapewnia bezpośredni dostęp do niskopoziomowych zmiennych konfiguracyjnych Tesseract dla precyzyjnej kontroli. |
Słownik TesseractVariables idzie jeszcze dalej, udostępniając setki podzespołów silnika Tesseract dla przypadków, gdzie właściwości wysokopoziomowe nie są wystarczają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, myślniki i spacje. To eliminuje szumy i poprawia dokładność, informując silnik, by ignorował wszystko poza oczekiwanym zestawem znaków.
Dane wejściowe
Następująca rejestracja pojazdu zawiera mieszankę tekstu wielkimi literami, tekstu małymi literami, specjalnych symboli (@, $, #, |, *), oraz interpunkcję.
BlackListCharacters uzupełnia dozwolony zestaw znaków aktywnie wykluczając znane symbole szumów 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, podczas gdy 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". Tilda (
~), podkreślenie, daszek (^) i wszystkie małe litery są usuwane.
Ten sam WhiteListCharacters i BlackListCharacters stosuje się do dowolnego typu dokumentu, nie tylko 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:
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
// Enable barcode detection within documents
ReadBarCodes = true,
// Enable table structure detection
ReadDataTables = true,
};
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,
.ReadDataTables = True
}
- ReadBarCodes: Gdy ustawione na
true, IronOCR skanuje dokument w poszukiwaniu kodów kreskowych oprócz tekstu. Ustaw nafalse, aby pominąć wykrywanie kodów kreskowych i przyspieszyć procesowanie, gdy nie są one spodziewane. - ReadDataTables: Gdy ustawione na
true, Tesseract próbuje wykrywać i zachowywać 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 wyodrębniane 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 określa Tesseractowi, 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, który zawiera jedną linię, SingleLine eliminuje analizę wieloblokową 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.
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);
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 zawartości niż Auto.
Dane wejściowe
receipt-scan.png to paragon z Corner Market z czterema pozycjami (kawa, muffinka, sok, baton granola), przerywanym separatorem, sumą częściową, podatkiem i podstawą. To jest układ, gdzie segmentacja stałych bloków pomija wpisy na różnych poziomych pozycjach.
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);
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 produkuje obok wyniku zwykłego tekstu.
RenderSearchablePdf osadza niewidoczną warstwę tekstową na oryginalnym obrazie, tworząc 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 jednostronicowy list biznesowy od IronOCR Solutions Ltd. (z datą 15 marca 2024, odniesienie DOC-2024-OCR-0315). Wynik jest zapisany jako searchable-output.pdf.
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");
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 IronOcr
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 przeszukiwalny i kopiowalny.
RenderHocr tworzy dokument hOCR, plik HTML, który koduje treść tekstową wraz z koordynatami ramki obwodowej 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 paragrafami danych finansowych obejmujących przychody, koszty operacyjne i czynni.drivery wzrostowe. Wynik jest zapisany jako output.html.
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");
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 IronOcr
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 obwodowej. 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ęzykach chińskim, japońskim lub koreańskim, właściwości WhiteListCharacters and BlackListCharacters działają z postaciami 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 Hira.gana i Katakany są przekazywane jako literały ciągów w WhiteListCharacters, z symbolem szumu wymienionym 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 z czarnej listy, takie jak ★, ■, i §, są aktywnie usuwane niezależnie od dozwolonego zestawu znaków.
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ń.

