IRONSOFTWAREHOME

Dane OCR dotyczące słów i znaków w języku C# (współrzędne, poziom pewności, prostokąty ograniczające)

Darrius Serrant
Darrius Serrant
Updated: 15 maja 2026

Po uruchomieniu OCR na dokumencie sam wyodrębniony tekst często nie wystarcza. Aby zlokalizować konkretne wartości na stronie, wykluczyć wykrycia niskiej jakości lub odtworzyć naturalną kolejność czytania w układach wielokolumnowych, potrzebne są współrzędne poszczególnych słów, numery stron, indeksy regionów oraz wskaźniki pewności.

Kolekcje Words i Characters w AdvancedOcrResultBase udostępniają te dane. Zarówno ReadDocumentAdvanced() dla dokumentów z zachowaniem układu, jak i ReadPhoto() dla danych z kamery zwracają ten sam poziom szczegółowości, jaki jest dostępny w standardowej kolekcji OcrResult.Words.

W niniejszym przewodniku omówiono pięć typowych wzorców: iterowanie danych WORD, rekonstrukcja kolejności czytania, filtrowanie według pewności, praca na poziomie znaków oraz przycinanie obrazu źródłowego z ramki ograniczającej.

Rozpocznij bezpłatny 30-dniowy okres probny, aby przetestować te kolekcje w swoim procesie.

NuGetZainstaluj za pomocą NuGet

PM > Install-Package IronOcr

Install IronOCR by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.
Szybki start: Odczyt danych WORD i znakowych z wyników OCR

Wywołaj ReadDocumentAdvanced (lub ReadPhoto) i powtórz result.Words, aby w kilku wierszach uzyskać wszystkie rozpoznane słowa wraz z ich współrzędnymi, numerem strony i wynikiem pewności.

  1. 1Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr

  2. 2Skopiuj i uruchom ten fragment kodu.

    var result = new IronTesseract().ReadDocumentAdvanced(new OcrInput("scan.png"));
    foreach (var word in result.Words)
        Console.WriteLine($"{word.Text} @ ({word.X},{word.Y}) conf:{word.RegionConfidence:P0}");
    C#
  3. 3Wdrożenie do testowania w środowisku produkcyjnym

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

Jak powtarzać słowa z uwzględnieniem współrzędnych i pewności?

Kolekcja Words zwraca każde wykryte słowo na każdej stronie. Każdy wpis (AdvancedWord lub AdvancedCharacter, oba dziedziczące po AdvancedOcrElement) zawiera tekst, współrzędne pikseli, wymiary, stronę, do której należy, indeks regionu identyfikujący wykryty blok tekstu, w którym się znajduje, oraz wynik pewności dla tego regionu.

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.png");

var result = ocr.ReadDocumentAdvanced(input);

foreach (var word in result.Words)
{
    Console.WriteLine(
        $"Page {word.PageNumber} | " +
        $"'{word.Text}' | " +
        $"Position: ({word.X}, {word.Y}) | " +
        $"Size: {word.Width}x{word.Height} | " +
        $"Confidence: {word.Confidence:P1}"
    );
}

// ToString() override for diagnostic logging
Console.WriteLine(result.Words.First().ToString());
C#
Porady: PageNumber jest oparty na 1: strona pierwsza to 1, a nie 0. Różni się to od większości kolekcji .NET, które stosują indeksowanie od zera. RegionIndex jest zgodny ze standardową konwencją numeracji od 0.

Aby przekazać współrzędne do interfejsów API rysowania lub przycinania, należy użyć właściwości BoundingBox. Łączy pozycję i rozmiar w jeden IronSoftware.Drawing.Rectangle.

Jak odtworzyć kolejność czytania?

W układach wielokolumnowych kolejność iteracji kolekcji Words nie odpowiada wizualnej kolejności czytania na stronie. WORDy są pogrupowane według wykrytego regionu, więc kolumny i komórki tabeli mogą być zwracane w nieuporządkowanej kolejności.

Aby odtworzyć naturalną kolejność od góry do dołu i od lewej do prawej, należy najpierw posortować zbiór według współrzędnej Y, a następnie według współrzędnej X w obrębie każdego wiersza. Niewielka tolerancja Y grupuje słowa znajdujące się na tej samej linii bazowej.

using IronOcr;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("multi-column-doc.png");

var result = ocr.ReadDocumentAdvanced(input);

int targetPage = 1;
int lineThreshold = 10; // pixel tolerance for grouping same-line words

// Sort by line (Y), then left-to-right (X)
var pageWords = result.Words
    .Where(w => w.PageNumber == targetPage)
    .OrderBy(w => w.Y / lineThreshold)
    .ThenBy(w => w.X)
    .ToList();

foreach (var word in pageWords)
{
    Console.Write($"{word.Text} ");
}
Console.WriteLine();

Dostosuj lineThreshold do swojego dokumentu: 10–15 pikseli wystarczy dla standardowego tekstu 12pt przy rozdzielczości 300 DPI. W przypadku większych nagłówków lub wpisów odręcznych dopuszczalna jest większa swoboda. Ten wzorzec jest szczególnie przydatny na stronach wielokolumnowych oraz w komórkach tabel, gdzie silnik wykrywa każdą kolumnę lub komórkę jako odrębny region.

Jak filtrować słowa o niskim poziomie pewności?

Aby wykluczyć wykrycia niskiej jakości, zanim trafią one do bazy danych, indeksu wyszukiwania lub dalszego procesu ekstrakcji, należy filtrować zbiór według RegionConfidence. Wynik mieści się w przedziale od 0,0 do 1,0, przy czym wyższe wartości wskazują na większą pewność co do wykrytego tekstu.

using IronOcr;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("noisy-scan.png");

var result = ocr.ReadDocumentAdvanced(input);

double threshold = 0.75;

var highConfidenceWords = result.Words
    .Where(w => w.Confidence >= threshold)
    .ToList();

var lowConfidenceWords = result.Words
    .Where(w => w.Confidence < threshold)
    .ToList();

Console.WriteLine($"Accepted: {highConfidenceWords.Count} words");
Console.WriteLine($"Rejected: {lowConfidenceWords.Count} words");

// Log rejected words for manual review
foreach (var word in lowConfidenceWords)
{
    Console.WriteLine(
        $"  LOW CONF: '{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P1}"
    );
}
C#

W przypadku skanów o zróżnicowanej jakości (wyraźny druk w niektórych obszarach, pogorszona jakość w innych) zapobiega to przedostawaniu się wyników o niskim poziomie pewności do systemów niższego szczebla. Aby podnieść wyniki zaufania w tekście źródłowym, filtry przetwarzania wstępnego obrazu (Deskew, DeNoise, Binarize) poprawiają jakość przed zastosowaniem progu.

Jak przeprowadza się iterację na poziomie znaków?

W przypadku nakładek weryfikacyjnych OCR, porównywania na poziomie znaków z danymi referencyjnymi lub precyzyjnej analizy przestrzennej pól formularzy należy użyć kolekcji Characters. Odzwierciedla Words, ale rozkłada się na poszczególne znaki.

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("form-field.png");

var result = ocr.ReadDocumentAdvanced(input);

foreach (var ch in result.Characters)
{
    Console.WriteLine(
        $"'{ch.Text}' | " +
        $"Box: ({ch.X}, {ch.Y}, {ch.Width}, {ch.Height}) | " +
        $"Page {ch.PageNumber}"
    );
}

// ToString() override provides diagnostic-friendly output
Console.WriteLine(result.Characters.First().ToString());
Zwróć uwagę: Zarówno Words, jak i Characters są obliczane w trybie leniwym i buforowane. Pierwsze wywołanie uruchamia obliczenia; kolejne wywołania zwracają wynik z pamięci podręcznej, więc powtórzenie operacji nie wiąże się z żadnymi kosztami.

Jak przyciąć oryginalny obraz za pomocą BoundingBox?

Aby wyodrębnić obszar wizualny słowa w celu weryfikacji, adnotacji lub tworzenia oznaczonych danych szkoleniowych, należy przekazać właściwość BoundingBox do AnyBitmap.CropRegion(). Prostokąt ograniczający odpowiada bezpośrednio pozycji słowa na obrazku źródłowym.

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

var result = ocr.ReadDocumentAdvanced(input);

// Load the original image for cropping
var originalImage = AnyBitmap.FromFile("invoice.png");

// Find a specific word and crop its region
var targetWord = result.Words.FirstOrDefault(w => w.Text == "Total");
if (targetWord != null)
{
    Rectangle cropRect = targetWord.BoundingBox;
    AnyBitmap croppedRegion = originalImage.Clone(cropRect);
    croppedRegion.SaveAs("total-region.png");

    Console.WriteLine(
        $"Cropped '{targetWord.Text}' from " +
        $"({cropRect.X}, {cropRect.Y}, {cropRect.Width}, {cropRect.Height})"
    );
}

Ten wzorzec można skalować do operacji masowych: iteruj każde WORD, przytnij każdy blok i wyeksportuj oznaczony zbiór danych do szkolenia niestandardowych czcionek lub dalszych procesów uczenia maszynowego. Współrzędne odnoszą się do obrazu po przetworzeniu wstępnym; jeśli filtry takie jak EnhanceResolution zmieniły wymiary, ramka ograniczająca odpowiada przetworzonemu obrazowi, a nie oryginałowi na dysku.

Kolejne kroki

Zaawansowany potok zapewnia taki sam poziom szczegółowości przestrzennej jak IronTesseract.Read(), a dodatkowo oferuje inteligentne funkcje układu. Tematy powiązane:

Rozpocznij bezpłatny 30-dniowy okres probny lub zapoznaj się z opcjami licencyjnymi.

Często Zadawane Pytania

Czym jest zaawansowane OCR w C#?

Zaawansowane OCR w C# odnosi się do procesu wykorzystania optycznego rozpoznawania znaków do wyodrębniania szczegółowych danych o słowach i znakach, w tym współrzędnych, poziomów pewności i ramek granicznych, przy użyciu zaawansowanej ścieżki IronOCR.

Jak uzyskać dostęp do danych o słowach za pomocą IronOCR?

Możesz uzyskać dostęp do danych o słowach w IronOCR poprzez iterację kolekcji AdvancedWord, która zapewnia szczegółowe informacje o położeniu każdego słowa i jego ocenie pewności w zeskanowanym dokumencie.

Jakie jest znaczenie ramek granicznych w OCR?

Ramki graniczne są kluczowe w OCR, ponieważ definiują dokładne położenie i wymiary rozpoznanych elementów tekstowych na zeskanowanym obrazie, umożliwiając precyzyjne wyodrębnianie tekstu i manipulację obrazem.

Czy mogę filtrować wyniki OCR wg oceny pewności?

Tak, używając IronOCR, możesz filtrować wyniki OCR wg oceny pewności, aby zapewnić, że do dalszego przetwarzania brany jest pod uwagę tylko tekst o wysokiej dokładności rozpoznania.

Jak odtworzyć kolejność czytania w wynikach OCR?

Rekonstrukcja kolejności czytania w wynikach OCR jest możliwa dzięki analizie sekwencji obiektów AdvancedWord i AdvancedCharacter dostarczanych przez IronOCR, które odzwierciedlają naturalny przepływ czytania w dokumencie.

Czy możliwe jest przycinanie obrazów źródłowych za pomocą IronOCR?

IronOCR pozwala na przycinanie obrazów źródłowych na podstawie analizy danych tekstowych, które obejmują ramki graniczne i współrzędne rozpoznanych słów i znaków.

Czym są kolekcje AdvancedWord i AdvancedCharacter?

Kolekcje AdvancedWord i AdvancedCharacter w IronOCR to struktury danych, które przechowują szczegółowe informacje o każdym rozpoznanym słowie i znaku, w tym ich współrzędne, poziomy pewności i ramki graniczne.

Jak IronOCR zarządza rozpoznawaniem znaków?

IronOCR zarządza rozpoznawaniem znaków, wykorzystując zaawansowaną ścieżkę, która analizuje cechy każdego znaku, dostarczając szczegółowe dane takie jak jego pozycja, rozmiar i pewność rozpoznania.

Jakiego typu dokumenty można przetwarzać z IronOCR?

IronOCR może przetwarzać szeroki zakres typów dokumentów, w tym PDF-y, zeskanowane obrazy i zdjęcia, wyodrębniając dane tekstowe z wysoką dokładnością i szczegółowością.

How can OCR results be used for custom font training or machine learning?

OCR results, including cropped image regions and labeled datasets derived from bounding boxes, can be used to train custom fonts or feed machine learning pipelines. IronOCR facilitates these processes with its detailed spatial data extraction capabilities.

Darrius Serrant
Inżynier oprogramowania Full Stack (WebOps)

Darrius Serrant posiada tytuł licencjata z informatyki z Uniwersytetu Miami i pracuje jako Full Stack WebOps Marketing Engineer w Iron Software. Już od młodych lat zainteresował się kodowaniem, postrzegając informatykę jako zarówno tajemniczą, jak i dostępną, co czyni ją doskonałym medium dla kreatywności i rozwiązywania problemów.

...
Czytaj więcej

Gotowy, aby rozpocząć?

Nuget Downloads 6,236,385Wersja:2026.9właśnie wydany

Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta
Biblioteka C# NuGet dla plików PDF
Zainstaluj za pomocą NuGet

Wersja: 2026.9

PM > Install-Package IronOcr
nuget.org/packages/IronOcr/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz Przeglądaj i szukaj „IronOCR”
  3. Wybierz pakiet i zainstaluj
DLL PDF dla C#
Pobierz DLL

Wersja: 2026.9

lub pobierz Instalator Windows tutaj.

  1. Pobierz i rozpakuj IronOCR do lokalizacji, takiej jak ~/Libs w katalogu Solution
  2. W Eksploratorze rozwiązań Visual Studio kliknij prawym przyciskiem myszy Odwołania. Wybierz Przeglądaj, „IronOCR.dll”

Licencje od 749 USD

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta