Jak zdefiniować konkretny obszar OCR obrazu w języku C

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

Aby wyodrębnić tekst z określonego obszaru obrazu w C#, użyj obiektu IronOCR Rectangle do zdefiniowania dokładnego obszaru, określając współrzędne y, width i height, a następnie przekaż go do metody LoadImage dla ukierunkowanego przetwarzania OCR.

Szybki start: Wyodrębnianie tekstu z określonego obszaru obrazu

  1. Install IronOCR with NuGet Package Manager

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

    using IronOcr;
    using IronSoftware.Drawing;
    
    // 1. Install IronOCR via NuGet: Install-Package IronOcr
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    
    // 2. Create a Rectangle with coordinates
    var region = new Rectangle(x: 215, y: 1250, width: 1335, height: 280);
    
    // 3. Load image with region
    input.LoadImage("image.png", region);
    
    // 4. Extract text
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
  3. Wdrożenie do testowania w środowisku produkcyjnym

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

    arrow pointer

Często wystarczy wyodrębnić tekst z niewielkiej części obrazu, np. całkowitą kwotę z faktury lub konkretne pole z formularza. Skanowanie całego dokumentu jest nieefektywne i może wprowadzać błędy poprzez przechwytywanie nieistotnego tekstu.

IronOCR pozwala poprawić precyzję, wydajność i dokładność poprzez określenie dokładnego prostokątnego obszaru do skanowania. Ten przewodnik zawiera szczegółową instrukcję, jak zdefiniować konkretny obszar OCR, wyodrębnić z niego tekst i wizualnie sprawdzić, czy współrzędne są prawidłowe dla zadań OCR.

Rozpocznij pracę z IronOCR


Jak przeprowadzić OCR w określonym obszarze?

Aby zdefiniować określony obszar OCR, tworzysz obiekt Rectangle z przestrzeni nazw IronSoftware.Drawing. Ten obiekt wymaga czterech wartości: współrzędnej x, współrzędnej y, width i height, wszystkie w pikselach. Współrzędne (x, y) reprezentują lewy górny róg pożądanego obszaru.

Gdy ładujesz swój obraz za pomocą LoadImage, przekazujesz ten Rectangle jako drugi parametr. Następnie IronOCR ograniczy proces OCR wyłącznie do pikseli znajdujących się w tym polu ograniczającym.

Regionalne OCR jest szczególnie przydatne podczas pracy z dokumentami ustrukturyzowanymi, takimi jak faktury, zeskanowane formularze lub dokumenty tożsamości, w których określone informacje zawsze pojawiają się w przewidywalnych miejscach. Ograniczając działanie OCR tylko do istotnych obszarów, można znacznie poprawić szybkość przetwarzania i zmniejszyć liczbę fałszywych wyników wynikających z niepowiązanego tekstu.

Aby znaleźć współrzędne dla swojego Rectangle, możesz użyć prostego edytora obrazów, takiego jak MS Paint. Otwórz obraz wejściowy, najedź myszką na lewy górny i prawy dolny róg określonego obszaru i zanotuj współrzędne pikseli (x, y). Następnie możesz obliczyć właściwości prostokąta: (x1, y1, width, height), gdzie width = x2 - x1 i height = y2 - y1.

Jakiego obrazu powinienem użyć do testów?

Wykorzystamy przykładowy obrazek zawierający trzy akapity. Naszym celem jest wyodrębnienie tylko drugiego akapitu i pominięcie pozostałej części tekstu. Jest to typowy scenariusz, w którym konieczne jest wyodrębnienie określonych pól lub sekcji z większego dokumentu.

Okno terminala wyświetlające wyniki OCR z nagłówkiem

Jak zaimplementować regionalne OCR w kodzie?

Implementacja obejmuje stworzenie obiektu OcrInput i załadowanie obrazu z określonym prostokątnym obszarem. To podejście działa z różnymi formatami obrazów, w tym JPG, PNG, GIF, TIFF i BMP.

:path=/static-assets/ocr/content-code-examples/how-to/ocr-region-of-an-image.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();

// Define the specific region as a Rectangle
// (x, y) is the top-left corner.
var ContentArea = new Rectangle(x: 215, y: 1250, width: 1335, height: 280);

ocrInput.LoadImage("region-input.png", ContentArea);

var ocrResult = ocrTesseract.Read(ocrInput);

// Print the extracted text
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

Dim ocrTesseract As New IronTesseract()
Using ocrInput As New OcrInput()

    ' Define the specific region as a Rectangle
    ' (x, y) is the top-left corner.
    Dim ContentArea As New Rectangle(x:=215, y:=1250, width:=1335, height:=280)

    ocrInput.LoadImage("region-input.png", ContentArea)

    Dim ocrResult = ocrTesseract.Read(ocrInput)

    ' Print the extracted text
    Console.WriteLine(ocrResult.Text)

End Using
$vbLabelText   $csharpLabel

W przypadku bardziej złożonych scenariuszy można zdefiniować wiele regionów w obrębie tego samego obrazu. Jest to szczególnie przydatne podczas przetwarzania formularzy zawierających wiele pól lub tabel w dokumentach:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput();

// Define multiple regions for different form fields
var nameField = new Rectangle(x: 100, y: 200, width: 300, height: 50);
var dateField = new Rectangle(x: 100, y: 300, width: 200, height: 50);
var amountField = new Rectangle(x: 400, y: 500, width: 150, height: 50);

// Load the same image multiple times with different regions
input.LoadImage("form.png", nameField);
var nameResult = ocr.Read(input);

input.Clear();
input.LoadImage("form.png", dateField);
var dateResult = ocr.Read(input);

input.Clear();
input.LoadImage("form.png", amountField);
var amountResult = ocr.Read(input);

// Process each field separately
Console.WriteLine($"Name: {nameResult.Text}");
Console.WriteLine($"Date: {dateResult.Text}");
Console.WriteLine($"Amount: {amountResult.Text}");
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput();

// Define multiple regions for different form fields
var nameField = new Rectangle(x: 100, y: 200, width: 300, height: 50);
var dateField = new Rectangle(x: 100, y: 300, width: 200, height: 50);
var amountField = new Rectangle(x: 400, y: 500, width: 150, height: 50);

// Load the same image multiple times with different regions
input.LoadImage("form.png", nameField);
var nameResult = ocr.Read(input);

input.Clear();
input.LoadImage("form.png", dateField);
var dateResult = ocr.Read(input);

input.Clear();
input.LoadImage("form.png", amountField);
var amountResult = ocr.Read(input);

// Process each field separately
Console.WriteLine($"Name: {nameResult.Text}");
Console.WriteLine($"Date: {dateResult.Text}");
Console.WriteLine($"Amount: {amountResult.Text}");
Imports IronOcr
Imports IronSoftware.Drawing

Dim ocr As New IronTesseract()
Using input As New OcrInput()

    ' Define multiple regions for different form fields
    Dim nameField As New Rectangle(x:=100, y:=200, width:=300, height:=50)
    Dim dateField As New Rectangle(x:=100, y:=300, width:=200, height:=50)
    Dim amountField As New Rectangle(x:=400, y:=500, width:=150, height:=50)

    ' Load the same image multiple times with different regions
    input.LoadImage("form.png", nameField)
    Dim nameResult = ocr.Read(input)

    input.Clear()
    input.LoadImage("form.png", dateField)
    Dim dateResult = ocr.Read(input)

    input.Clear()
    input.LoadImage("form.png", amountField)
    Dim amountResult = ocr.Read(input)

    ' Process each field separately
    Console.WriteLine($"Name: {nameResult.Text}")
    Console.WriteLine($"Date: {dateResult.Text}")
    Console.WriteLine($"Amount: {amountResult.Text}")

End Using
$vbLabelText   $csharpLabel

Jakich rezultatów mogę się spodziewać?

Jak widać na wyjściu konsoli, OCR przetwarza tylko drugi akapit. Takie ukierunkowane podejście gwarantuje, że nieistotny tekst z innych części obrazu nie wpłynie negatywnie na wyniki.

Wynik OCR

Dokładność regionalnego OCR zależy od kilku czynników:

  • Jakość obrazu: Obrazy o wyższej rozdzielczości zazwyczaj dają lepsze wyniki. Rozważ użycie ustawień DPI w celu optymalizacji obrazów.
  • Orientacja tekstu: Upewnij się, że tekst jest prawidłowo wyrównany. W razie potrzeby należy zastosować wykrywanie obrotu strony.
  • Kontrast i przejrzystość: zastosuj filtry korekcji obrazu, aby poprawić czytelność tekstu.

Jak mogę sprawdzić, czy moje współrzędne są poprawne?

Aby upewnić się, że wybrałeś właściwe współrzędne dla obrazu wejściowego, możesz wyświetlić zdefiniowany obszar ContentArea. Prostym sposobem na to jest narysowanie prostokąta na obrazie wejściowym i zapisanie go jako nowy plik z StampCropRectangleAndSaveAs. Pomaga to w debugowaniu i precyzyjnym dostosowywaniu współrzędnych w celu uzyskania optymalnej wydajności.

Ta technika wizualizacji jest szczególnie pomocna podczas pracy ze złożonymi układami lub gdy trzeba wyróżnić określone obszary tekstu w celu zapewnienia jakości.

Oto obraz wyjściowy po narysowaniu określonego prostokąta ograniczającego na naszym przykładowym obrazie wejściowym z powyższego przykładu.

Jak wyświetlić wybrany region?

:path=/static-assets/ocr/content-code-examples/how-to/ocr-region-of-an-image-highlighted.cs
using IronOcr;
using IronSoftware.Drawing;

var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();

// Define the specific rectangular area to scan within the image.
// The coordinates are in pixels: (x, y) is the top-left corner of the rectangle.
var ContentArea = new Rectangle(x: 4, y: 59, width: 365, height: 26);

ocrInput.LoadImage("region-input.png", ContentArea);

var ocrResult = ocrTesseract.Read(ocrInput);

// Draws the rectangle from above in a blue bounding box on the image for visualization.
ocrInput.StampCropRectangleAndSaveAs(ContentArea, Color.Aqua, "region-input.png");
Imports IronOcr
Imports IronSoftware.Drawing

Dim ocrTesseract = New IronTesseract()
Using ocrInput As New OcrInput()

    ' Define the specific rectangular area to scan within the image.
    ' The coordinates are in pixels: (x, y) is the top-left corner of the rectangle.
    Dim ContentArea As New Rectangle(x:=4, y:=59, width:=365, height:=26)

    ocrInput.LoadImage("region-input.png", ContentArea)

    Dim ocrResult = ocrTesseract.Read(ocrInput)

    ' Draws the rectangle from above in a blue bounding box on the image for visualization.
    ocrInput.StampCropRectangleAndSaveAs(ContentArea, Color.Aqua, "region-input.png")
End Using
$vbLabelText   $csharpLabel

Jak wygląda wizualizacja?

Wynik z zaznaczonymi fragmentami OCR

Jasnoniebieski prostokąt potwierdza, że poprawnie wyodrębniliśmy drugi akapit do przetworzenia.

Kiedy należy stosować regionalne OCR?

Regionalne OCR idealnie sprawdza się w kilku typowych sytuacjach:

  1. Przetwarzanie formularzy: podczas wyodrębniania określonych pól ze standardowych formularzy, w których dane pojawiają się w stałych miejscach.
  2. Przetwarzanie faktur: Wyodrębnianie określonych wartości, takich jak sumy, daty lub numery faktur, bez przetwarzania całego dokumentu.
  3. Tablice rejestracyjne: Podczas rozpoznawania tablic rejestracyjnych należy skupić się wyłącznie na obszarze tablicy.
  4. Dokumenty tożsamości: Wyodrębnianie określonych pól z paszportów lub dowodów osobistych.
  5. Zrzuty ekranu: Podczas przechwytywania tekstu z określonych elementów interfejsu użytkownika na zrzutach ekranu.

Najlepsze praktyki dotyczące regionalnego OCR

Aby uzyskać optymalne wyniki przy użyciu regionalnego OCR:

  1. Dodaj odstępy: Dodaj niewielki margines wokół tekstu, aby żadne znaki nie zostały ucięte na krawędziach.
  2. Przetestuj na przykładowych obrazach: Zawsze weryfikuj współrzędne na reprezentatywnych próbkach przed przetwarzaniem dużych partii.
  3. Postępowanie z różnicami: Należy uwzględnić niewielkie różnice w położeniu elementów w zeskanowanych dokumentach, tworząc obszary nieco większe niż to konieczne.
  4. Optymalizacja wydajności: W przypadku przetwarzania wielowątkowego należy przetwarzać różne regiony równolegle.
  5. Monitoruj pewność: Sprawdź wyniki pewności, aby upewnić się co do dokładności.

Skupiając przetwarzanie OCR na określonych obszarach, można znacznie poprawić zarówno szybkość, jak i dokładność zadań związanych z ekstrakcją tekstu. To ukierunkowane podejście jest niezbędne do tworzenia wydajnych procesów przetwarzania dokumentów w aplikacjach .NET.

Często Zadawane Pytania

Jak wyekstraktować tekst tylko z określonej części obrazu w C#?

Za pomocą IronOCR można wyekstraktować tekst z określonego regionu poprzez utworzenie obiektu Rectangle z wartościami współrzędnych x/y, szerokości i wysokości. Przekaż ten prostokąt jako drugi parametr do metody LoadImage, a IronOCR ograniczy przetwarzanie OCR tylko do zdefiniowanego obszaru.

Jakie są zalety definiowania regionu OCR zamiast skanowania całego obrazu?

Definiowanie określonego regionu OCR za pomocą IronOCR pozwala na zwiększenie szybkości przetwarzania, zwiększenie dokładności oraz redukcję błędów związanych z przechwytywaniem nieistotnego tekstu. Jest to szczególnie przydatne dla strukturalnych dokumentów, gdzie informacje pojawiają się w przewidywalnych lokalizacjach.

Jakie parametry są potrzebne do utworzenia prostokąta dla regionalnego OCR?

Aby utworzyć prostokąt dla regionalnego OCR w IronOCR, potrzebne są cztery wartości w pikselach: współrzędna x, współrzędna y, szerokość i wysokość. Współrzędne (x, y) reprezentują lewy górny róg pożądanego obszaru skanowania.

W jakiej przestrzeni nazw znajduje się obiekt Rectangle dla regionów OCR?

Obiekt Rectangle używany do definiowania regionów OCR w IronOCR znajduje się w przestrzeni nazw IronSoftware.Drawing.

Jakie typy dokumentów najbardziej zyskują na przetwarzaniu za pomocą regionalnego OCR?

Regionalne OCR w IronOCR jest szczególnie skuteczne dla strukturalnych dokumentów, takich jak faktury, zeskanowane formularze i dokumenty tożsamości, gdzie określone informacje systematycznie pojawiają się w tych samych miejscach.

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.