Jak odczytywać obiekty System.Drawing w języku C
IronOCR umożliwia odczytywanie tekstu z obiektów System.Drawing, takich jak Bitmap i Image, owiniętych w OcrImageInput, zapewniając bezproblemową funkcjonalność OCR dla aplikacji .NET na platformach Windows, macOS i Linux.
System.Drawing.Bitmap jest klasą w .NET Framework używaną do pracy z obrazami bitmap. Zapewnia metody i właściwości do tworzenia, manipulowania i wyświetlania obrazów bitmapowych.
System.Drawing.Image to klasa bazowa dla wszystkich obiektów obrazów GDI+ w .NET Framework. Jest to klasa nadrzędna dla różnych typów obrazów, w tym System.Drawing.Bitmap.
IronSoftware.Drawing.AnyBitmap to klasa bitmapy w IronDrawing, otwartej bibliotece opracowanej pierwotnie przez Iron Software. Pomaga inżynierom oprogramowania C# zastąpić System.Drawing.Common w projektach .NET na platformach Windows, macOS i Linux.
Szybki start: Odczyt tekstu z System.Drawing.Bitmap
Za pomocą pojedynczej instrukcji stwórz IronTesseract i podaj mu System.Drawing.Bitmap owinięty przez OcrImageInput, aby wyodrębnić cały tekst. Ten przykład szybkiego startu pokazuje, jak IronOCR konwertuje obrazy na czytelny tekst przy minimalnej konfiguracji.
-
Install IronOCR with NuGet Package Manager
-
Skopiuj i uruchom ten fragment kodu.
var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png"))); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną
Jak odczytywać obiekty System.Drawing w języku C#
- Pobierz bibliotekę C# do odczytu obiektów System.Drawing
- Pobieranie obiektów System.Drawing, takich jak
BitmapiImage - Zbuduj klasę
OcrImageInputprzy użyciu uzyskanych danych - Wykorzystaj
AnyBitmapod Iron Software dla systemów Linux i macOS - Określ obszar czytania, wskazując region przycięcia
Jak odczytać dane z System.Drawing.Bitmap?
Najpierw zainstancjonuj klasę IronTesseract, aby wykonać OCR. Utwórz System.Drawing.Bitmap z jednej z różnych metod. W przykładowym kodzie użyto ścieżki do pliku.
Następnie użyj instrukcji using do utworzenia obiektu OcrImageInput, przekazując do niego obraz z obiektu System.Drawing.Bitmap. Na koniec użyj metody Read, aby wykonać OCR.
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs
using IronOcr;
using System.Drawing;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Read image file to Bitmap
Bitmap bitmap = new Bitmap("Potter.tiff");
// Import System.Drawing.Bitmap
using var imageInput = new OcrImageInput(bitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports System.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Read image file to Bitmap
Private bitmap As New Bitmap("Potter.tiff")
' Import System.Drawing.Bitmap
Private imageInput = New OcrImageInput(bitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
Dlaczego instrukcja using ma znaczenie dla OcrImageInput?
Instrukcja using jest kluczowa podczas pracy z OcrImageInput, ponieważ zapewnia właściwe zarządzanie zasobami i czyszczenie pamięci. OcrImageInput implementuje IDisposable, co oznacza, że przechowuje niezarządzane zasoby, które muszą zostać zwolnione, gdy skończysz z obiektem. Bez instrukcji using zasoby te mogą nie zostać zwolnione natychmiast, co może prowadzić do wycieków pamięci lub blokad plików. Jest to szczególnie ważne podczas przetwarzania wielu obrazów w operacjach wsadowych. Więcej szczegółów na temat prawidłowego zarządzania zasobami w IronOCR można znaleźć w naszej Dokumentacji API.
Jakie są popularne metody ładowania plików bitmapowych?
Bitmap zapewnia kilka metod ładowania poza konstruktorem ścieżki pliku użytym w naszym przykładzie. Możesz tworzyć Bitmap z strumieni (StreamReader), z istniejących Image (Image), a nawet tworzyć puste bitmapy o określonych wymiarach (Bitmap). Podczas pracy z aplikacjami internetowymi ładowanie ze strumieni jest szczególnie przydatne do przetwarzania przesłanych plików. Dla osadzonych zasobów możesz użyć Resources. IronOCR obsługuje wszystkie te źródła source bezproblemowo poprzez konstruktor Bitmap. Dowiedz się więcej o różnych metodach wprowadzania danych w naszym przewodniku po formatach obrazów (jpg, png, gif, tiff, bmp).
Kiedy należy zwolnić obiekt Bitmap?
Czas usuwania obrazów bitmapowych zależy od przebiegu pracy aplikacji. Jeśli potrzebujesz tylko bitmap dla OCR, usuń go natychmiast po utworzeniu ocrResult. Jednak jeśli musisz wykonać wiele operacji lub wyświetlić obraz, utrzymuj go, dopóki wszystkie operacje nie zostaną zakończone. Zawsze używaj instrukcji using lub bloków try-finally, aby zapewnić usunięcie. Pamiętaj, że OcrImageInput tworzy swoją wewnętrzną kopię, więc oryginalny bitmap może zostać usunięty po utworzeniu OcrImageInput. W przypadku skomplikowanych scenariuszy obejmujących wiele operacji na obrazach, zapoznaj się z naszymi przykładami Filtry optymalizacji obrazu OCR.
Jak czytać z System.Drawing.Image?
Czytanie z Image jest tak proste, jak stworzenie obiektu OcrInput z Image, a następnie wykonanie standardowego procesu OCR za pomocą metody Read.
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs
using IronOcr;
using Image = System.Drawing.Image;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Open image file as Image
Image image = Image.FromFile("Potter.tiff");
// Import System.Drawing.Image
using var imageInput = new OcrImageInput(image);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports Image = System.Drawing.Image
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Open image file as Image
Private image As Image = Image.FromFile("Potter.tiff")
' Import System.Drawing.Image
Private imageInput = New OcrImageInput(image)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
Jaka jest różnica między Image a Bitmap dla OCR?
Podczas gdy Bitmap jest specyficzną implementacją dla obrazów bitmapowych, Image jest abstrakcyjną klasą bazą, która może reprezentować różne formaty obrazów, w tym JPEG, PNG, GIF i TIFF. Do celów OCR, IronOCR traktuje oba w identyczny sposób poprzez OcrInput, ale Image zapewnia większą elastyczność przy pracy z różnymi formatami. Bitmap oferuje możliwość manipulacji na poziomie pikseli, podczas gdy Image jest lepszy do ogólnego obsługi obrazów. Oba dobrze współpracują z zaawansowanym silnikiem Tesseract 5 IronOCR. Wybór zależy od szerszych potrzeb aplikacji, a nie od wydajności OCR.
Dlaczego używać Image.FromFile zamiast innych metod ładowania?
Image.FromFile jest najprostszą i najbardziej bezpośrednią metodą ładowania obrazów z dysku. Automatycznie wykrywa format obrazu i obsługuje proces czytania pliku. Alternatywne metody, takie jak MemoryStream, są lepsze dla aplikacji webowych lub podczas pracy z strumieniami pamięci. FileStream blokuje plik do momentu zniszczenia FileStream, co może być istotnym czynnikiem w aplikacjach wielowątkowych. W scenariuszach produkcji wymagających wysokiej wydajności lub jednoczesnego dostępu, rozważ ładowanie obrazów do potoków pamięci najpierw. Nasz przykład Wielowątkowe Tesseract OCR pokazuje najlepsze praktyki jednoczesnego przetwarzania obrazów.
Jak czytać z IronSoftware.Drawing.AnyBitmap?
Podobnie, po utworzeniu lub uzyskaniu obiektu AnyBitmap, możesz skonstruować klasę OcrInput. Konstruktor obsłuży wszystkie niezbędne kroki importu danych. Poniższy przykład kodu demonstruje to.
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs
using IronOcr;
using IronSoftware.Drawing;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Open image file as AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");
// Import IronSoftware.Drawing.AnyBitmap
using var imageInput = new OcrImageInput(anyBitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Open image file as AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")
' Import IronSoftware.Drawing.AnyBitmap
Private imageInput = New OcrImageInput(anyBitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
Dlaczego wybrać AnyBitmap zamiast klas System.Drawing?
AnyBitmap oferuje lepszą kompatybilność cross-platformową w porównaniu do klas Bitmap. Podczas gdy Bitmap ma ograniczone wsparcie na nie-Windowsowych platformach w .NET 6+, AnyBitmap działa bezproblemowo na Windows, Linux i macOS. Zapewnia spójne API bez zależności specyficznych dla platformy, co czyni go idealnym dla wdrożeń w chmurze i aplikacji konteneryzowanych. AnyBitmap oferuje również lepsze zarządzanie pamięcią i optymalizacje wydajności zaprojektowane specjalnie dla zadań przetwarzania obrazów. Szczegółowe informacje o zgodności znajdziesz w naszej dokumentacji Zgodność.
Na jakich platformach działa AnyBitmap?
AnyBitmap wspiera wszystkie główne platformy, na których działa .NET: Windows (x86, x64, ARM), Linux (w tym Alpine Linux dla Docker), oraz macOS (zarówno Intel, jak i Apple Silicon). To szerokie wsparcie platform czyni go zalecaną opcją dla nowoczesnych aplikacji .NET, które muszą działać w zróżnicowanych środowiskach. Jest szczególnie wartościowy dla wdrożeń w chmurze na AWS Lambda lub Azure Functions. Dowiedz się więcej o konfiguracji specyficznej dla platform w naszych przewodnikach dla Linux, macOS i Docker.
Jak AnyBitmap zarządza pamięcią?
AnyBitmap implementuje efektywne zarządzanie pamięcią poprzez integrację z automatycznym zbieraniem śmieci i wzory wyraźnego usuwania. Wykorzystuje puli pamięci dla często alokowanych bufory i implementuje semantykę kopiowania przy zapisie dla lepszej wydajności. W przeciwieństwie do AnyBitmap, który może trzymać blokady plików, AnyBitmap ładuje obrazy w całości do pamięci, zapobiegając problemom z dostępem do plików. Zapewnia również lepszą kontrolę nad zużyciem pamięci w scenariuszach o dużym przepływie danych. Dla aplikacji przetwarzających duże ilości obrazów, efektywność pamięciowa AnyBitmap może znacznie zmniejszyć całkowity ślad pamięciowy. Zapoznaj się z naszym przewodnikiem Alternatywy dla System.Drawing.Common i porady dotyczące migracji.
Jak można określić obszar skanowania?
Podczas konstruowania klasy OcrInput, można określić obszar do zeskanowania. Pozwala to zdefiniować konkretny obszar dokumentu obrazu do OCR. W zależności od dokumentu obrazu, określenie obszaru skanowania może znacznie poprawić wydajność. W podanym przykładzie kodu wyciągany jest tylko numer i tytuł rozdziału.
:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);
// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)
' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Output the result to console
Console.WriteLine(ocrResult.Text)
Kiedy używać skanowania obszaru dla lepszej wydajności?
Skanowanie obszaru dramatycznie poprawia wydajność, gdy potrzebujesz tylko tekstu z określonych obszarów spójnych układów dokumentów. Częste przypadki użycia obejmują wyodrębnianie nagłówków, pól formularzy, sum faktur lub informacji o karcie identyfikacyjnej. Zyski z wydajności są największe przy dużych obrazach, gdzie tekst zajmuje tylko niewielką część. Dla faktury o wymiarach 3000x4000 pikseli, skanowanie tylko obszaru sumy może być 10-20 razy szybsze niż OCR całej strony. Skanowanie obszaru również poprawia dokładność, eliminując potencjalne zakłócenia z innych obszarów. Więcej przykładów opartych na obszarze znajdziesz w naszym przewodniku Obszary treści i obcinanie regionów w PDF.
Jak określić prawidłowe współrzędne dla mojego regionu?
Określenie współrzędnych wymaga zrozumienia, że Rectangle używa formatu (X, Y, Szerokość, Wysokość), gdzie (0,0) to lewy górny róg. Zacznij od otwarcia obrazu w edytorze graficznym, który wyświetla współrzędne kursora. Alternatywnie, użyj funkcji debugowania IronOCR, aby zwizualizować wykryte obszary tekstowe. Dla dynamicznych układów, rozważ użycie IronOCR do wykonania pełnego skanowania najpierw, a następnie analizy OcrResult, aby znaleźć programowo pozycje tekstu. Nasz przykład Podświetlenie tekstów dla debugowania pokazuje, jak zwizualizować obszary OCR dla dokładnego określenia współrzędnych.
Co się stanie, jeśli region przekroczy granice obrazu?
Gdy wskazany region przekroczy granice obrazu, IronOCR automatycznie go przycina do prawidłowego obszaru obrazu. Na przykład, jeśli Twój obraz ma wymiary 1000x1000 pikseli, a Ty określisz prostokąt w (900, 900, 200, 200), IronOCR przetworzy tylko obszar od (900, 900) do (1000, 1000). To automatyczne przycinanie zapobiega błędom, ale może skutkować niekompletnym wyodrębnianiem tekstu, jeśli współrzędne są nieprawidłowe. Zawsze weryfikuj swoje regiony względem rzeczywistych wymiarów obrazu. Dla dynamicznych rozmiarów obrazów, oblicz regiony jako procenty zamiast stałych pikseli. Przewodnik Region OCR obrazu zawiera więcej przykładów bezpiecznego obchodzenia się z regionami.
Wynik OCR
using
OcrImageInput
OcrImageInput
IDisposable
using
System.Drawing.Bitmap
Bitmaps
new Bitmap(stream)
Images
new Bitmap(image)
new Bitmap(width, height)
Assembly.GetManifestResourceStream()
Bitmap
OcrImageInput
Bitmap
OcrImageInput
using
OcrImageInput
Bitmap
OcrImageInput
System.Drawing.Image
OcrImageInput
Image
Read
System.Drawing.Bitmap
System.Drawing.Image
OcrImageInput
Image
Bitmap
Image
Image.FromFile
Image.FromStream
Image.FromFile
Image
AnyBitmap
OcrImageInput
AnyBitmap
System.Drawing
System.Drawing.Common
AnyBitmap
AnyBitmap
AnyBitmap
AnyBitmap
System.Drawing.Bitmap
AnyBitmap
AnyBitmap
OcrImageInput
Rectangle
OcrResult
Często Zadawane Pytania
Jak wyodrębnić tekst z System.Drawing.Bitmap używając OCR w C#?
IronOCR ułatwia wyodrębnianie tekstu z obiektów System.Drawing.Bitmap. Najpierw utwórz obiekt klasy IronTesseract, następnie opakuj swój obiekt Bitmap w OcrImageInput używając instrukcji using, a na końcu wywołaj metodę Read. Minimalny kod to: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));
Dlaczego instrukcja using jest ważna przy pracy z OcrImageInput?
Instrukcja using jest kluczowa, ponieważ OcrImageInput implementuje IDisposable i posiada niezarządzane zasoby, które wymagają właściwego czyszczenia. Bez tego, ryzykujesz wyciekiem pamięci lub blokadą plików, szczególnie podczas przetwarzania wielu obrazów. OcrImageInput w IronOCR wymaga właściwej likwidacji, aby zapewnić efektywne zarządzanie zasobami w aplikacjach .NET.
Czy mogę wykonać OCR na obiektach System.Drawing.Image?
Tak, IronOCR obsługuje OCR na obiektach System.Drawing.Image, ponieważ Image to klasa bazowa dla Bitmap. Po prostu opakuj swój obiekt Image w OcrImageInput tak samo, jak zrobiłbyś to z Bitmap, a IronOCR wyodrębni tekst płynnie na platformach Windows, macOS i Linux.
Czym jest IronSoftware.Drawing.AnyBitmap i jak odnosi się do OCR?
IronSoftware.Drawing.AnyBitmap to klasa bitmapy z IronDrawing, otwartej biblioteki, która pomaga zastąpić System.Drawing.Common w projektach .NET. Zapewnia zgodność międzyplatformową dla Windows, macOS i Linux, co czyni ją idealną do użycia z IronOCR, kiedy potrzebujesz jednolitego przetwarzania obrazów na różnych systemach operacyjnych.
Czy mogę określić konkretny obszar obrazu do wyodrębniania tekstu?
Tak, IronOCR pozwala określić konkretne obszary odczytu poprzez określenie regionów kadrowania. Ta funkcja umożliwia skupienie procesowania OCR na określonych sekcjach twoich obiektów System.Drawing, poprawiając wydajność i dokładność, gdy potrzebujesz tekstu tylko z niektórych części obrazu.
Czy IronOCR obsługuje wiele języków?
IronOCR obsługuje wiele języków, co czyni go wszechstronnym narzędziem dla globalnych aplikacji wymagających rozpoznawania tekstu w różnych językach.
Czy IronOCR można zintegrować z istniejącymi aplikacjami?
IronOCR jest zaprojektowany do łatwej integracji z istniejącymi aplikacjami używając C#, co pozwala programistom dodać funkcjonalność OCR do swojego oprogramowania z minimalnym wysiłkiem.
Jakie są korzyści z używania IronOCR do zarządzania dokumentami?
Używanie IronOCR do zarządzania dokumentami upraszcza przepływ pracy przez konwertowanie zeskanowanych dokumentów na przeszukiwalny i edytowalny tekst, redukując konieczność ręcznego wprowadzania danych i poprawiając dostępność dokumentów.
Jak IronOCR może poprawić dokładność danych?
IronOCR poprawia dokładność danych dzięki swoim zaawansowanym algorytmom rozpoznawania i funkcjom korekcji obrazów, zapewniając, że proces ekstrakcji tekstu jest zarówno niezawodny, jak i precyzyjny.
Czy dostępna jest bezpłatna wersja próbna IronOCR?
Tak, Iron Software oferuje bezpłatną wersję próbną IronOCR, umożliwiając użytkownikom przetestowanie jego funkcji i możliwości przed podjęciem decyzji o zakupie.

