C# dilinde OCR İşleme için System.Drawing Görüntüler Nasıl Kullanılır

C#'te System.Drawing Nesnelerinden Nasıl Oku

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

IronOCR, System.Drawing gibi nesnelerden metin okumayı sağlar, bunları Bitmap ve Image ile sarmalayarak, Windows, macOS ve Linux platformlarında .NET uygulamaları için sorunsuz OCR işlevselliği sağlar.

System.Drawing.Bitmap, .NET Framework'te bitmap görüntüleriyle çalışmak için kullanılan bir sınıftır. Bitmap görüntüleri oluşturmak, manipüle etmek ve görüntülemek için yöntemler ve özellikler sunar.

System.Drawing.Image, .NET Framework'teki tüm GDI+ görüntü nesneleri için bir ana sınıftır. Bu sınıf, System.Drawing.Bitmap dahil olmak üzere, çeşitli görüntü türlerinin üst sınıfıdır.

IronSoftware.Drawing.AnyBitmap, başlangıçta Iron Software tarafından geliştirilen açık kaynaklı kütüphane IronDrawing içinde bir bitmap sınıfıdır. Bu, C# yazılım mühendislerine Windows, macOS ve Linux platformlarındaki .NET projelerinde System.Drawing.Common yerine kullanmalarına yardımcı olur.

Hızlı Başlangıç: System.Drawing.Bitmap'den Metin Okuma

Tek bir ifade ile bir IronTesseract oluşturun ve ardından tüm metni çıkarmak için System.Drawing.Bitmap ile sarılmış bir OcrImageInput besleyin. Bu hızlı başlangıç örneği, IronOCR'nin görüntüleri minimum kurulum ile okunabilir metne dönüştürme yeteneğini gösterir.

  1. IronOCR aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronOcr
  2. Bu kod parçacığını kopyalayın ve çalıştırın.

    var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));
  3. Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronOCR kullanmaya başlayın

    arrow pointer


System.Drawing.Bitmap'dan Nasıl Okunur?

Önce, OCR gerçekleştirmek için IronTesseract sınıfını oluşturun. Çeşitli yöntemlerden birini kullanarak bir System.Drawing.Bitmap oluşturun. Kod örneğinde, bir dosya yolu kullanılır.

Sonra, bir OcrImageInput nesnesi oluşturmak için using ifadesini kullanın, System.Drawing.Bitmap nesnesinden görüntüyü buna geçirin. Son olarak, OCR gerçekleştirmek için Read yöntemini kullanın.

: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)
$vbLabelText   $csharpLabel

OcrImageInput için using ifadesi neden önemlidir?

using ifadesi, OcrImageInput ile çalışırken kritik öneme sahiptir çünkü doğru kaynak yönetimi ve bellek temizliğini sağlar. OcrImageInput, IDisposable uygulamaktadır, bu da yönetilmeyen kaynaklar tuttuğu ve nesneyi bitirdiğinizde serbest bırakılmaları gerektiği anlamına gelir. using ifadesi olmadan, bu kaynaklar zamanında serbest bırakılmayabilir ve potansiyel olarak bellek sızıntılarına veya dosya kilitlenmelerine yol açabilir. Bu, toplu işlemlerde birden çok görüntü işlenirken özellikle önemlidir. IronOCR'de uygun kaynak yönetimi hakkında daha fazla ayrıntı için, API Referansı dokümantasyonuna bakın.

Yaygın Bitmap yükleme yöntemleri nelerdir?

Bitmap örneğimizde kullanılan dosya yolu yapıcısının ötesinde birkaç yükleme yöntemi sunar. Akışlardan (StreamReader), mevcut Image (Image) nesnelerinden veya belirli boyutlara sahip boş bitmapler oluşturabilirsiniz (Bitmap). Web uygulamaları üzerinde çalışırken, yüklemeleri işlem için akışlardan çalışma özellikle faydalıdır. Gömülü kaynaklar için Resources kullanabilirsiniz. IronOCR, tüm bu source kaynaklarını sorunsuz bir şekilde Bitmap yapıcısı aracılığıyla halleder. Farklı giriş yöntemleri hakkında daha fazla bilgi edinmek için Görüntüler (jpg, png, gif, tiff, bmp) kılavuzumuza göz atın.

Bitmap nesnesini ne zaman yok etmeliyim?

Bitmap imhasının zamanlaması, uygulamanızın iş akışına bağlıdır. Sadece OCR için bitmap gerekiyorsa, ocrResult oluşturulduktan hemen sonra bunu devre dışı bırakın. Ancak, birden çok işlem yapmanız veya görüntüyü göstermeniz gerekiyorsa, tüm işlemler tamamlanana kadar canlı tutun. Her zaman imha sağlamak için using ifadelerini veya try-finally bloklarını kullanın. OcrImageInput kendi iç kopyasını oluşturur, bu yüzden orijinal bitmap, OcrImageInput oluşturulduktan sonra devre dışı bırakılabilir. Birden çok görüntü işleme işlemi içeren karmaşık senaryolar için OCR Görüntü Optimizasyon Filtreleri örneklerimize başvurun.

System.Drawing.Image'den Nasıl Okurum?

Image'dan okumak, OcrInput nesnesini Image ile oluşturmak ve ardından standart OCR işlemini Read yöntemi kullanarak gerçekleştirmek kadar basittir.

: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)
$vbLabelText   $csharpLabel

OCR için Image ve Bitmap arasındaki fark nedir?

Bitmap, bitmap görüntüler için belirli bir uygulama iken, Image JPEG, PNG, GIF ve TIFF gibi çeşitli görüntü formatlarını temsil edebilen soyut bir temel sınıftır. OCR amaçları için IronOCR, her ikisini de OcrInput aracılığıyla aynı şekilde ele alır, ancak Image farklı formatlarla çalışmada daha fazla esneklik sunar. Bitmap, piksel seviyesi manipülasyon yetenekleri sunarken, Image genel görüntü işleme için daha iyidir. Her ikisi de IronOCR'nin gelişmiş Tesseract 5 motoruyla eşit derecede iyi çalışır. Seçim, daha geniş uygulama ihtiyaçlarınıza bağlıdır, OCR performansı değil.

Neden Image.FromFile diğer yükleme yöntemleri üzerinden tercih edilir?

Image.FromFile, diskten görüntüleri yüklemenin en basit ve en doğrudan yoludur. Görüntü formatını otomatik olarak algılar ve dosya okuma işlemini yapar. Web uygulamaları veya bellek akışlarıyla çalışırken MemoryStream gibi alternatif yöntemler daha iyidir. FileStream, FileStream devre dışı bırakılana kadar dosyayı kilitler, bu da çok iş parçacıklı uygulamalarda dikkate alınması gereken bir unsur olabilir. Yüksek performans veya eş zamanlı erişim gerektiren üretim senaryoları için, görüntüleri önce bellek akışlarına yüklemeyi düşünün. Çoklu iş parçacıklı Tesseract OCR örneğimiz, eş zamanlı görüntü işleme için en iyi uygulamaları göstermektedir.

IronSoftware.Drawing.AnyBitmap'den Nasıl Okurum?

Benzer şekilde, bir AnyBitmap nesnesi oluşturduktan veya elde ettikten sonra, OcrInput sınıfını oluşturabilirsiniz. Yapıcı, verilerin içe aktarılması için gerekli tüm adımları halledecektir. Aşağıdaki kod örneği bunu göstermektedir.

: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)
$vbLabelText   $csharpLabel

AnyBitmap yerine neden System.Drawing sınıflarını seçmeliyim?

AnyBitmap, Bitmap sınıflarına kıyasla üstün platformlar arası uyumluluk sunar. Bitmap, .NET 6+ üzerindeki Windows dışı platformlarda sınırlı desteğe sahipken, AnyBitmap Windows, Linux ve macOS üzerinde sorunsuz çalışır. Platforma özgü bağımlılıklar olmadan tutarlı bir API sunar, bulut dağıtımları ve konteyner tabanlı uygulamalar için idealdir. AnyBitmap, özellikle görüntü işleme görevleri için tasarlanmış daha iyi bellek yönetimi ve performans optimizasyonları da sunar. Uyumluluk hakkında detaylı bilgi için Uyumluluk belgemize bakın.

AnyBitmap hangi platformları destekliyor?

AnyBitmap, .NET'in çalıştığı tüm büyük platformları destekler: Windows (x86, x64, ARM), Linux (Docker için Alpine Linux dahil) ve macOS (hem Intel hem de Apple Silicon). Bu geniş platform desteği, çeşitli ortamlarda çalışması gereken modern .NET uygulamaları için önerilen seçimdir. AWS Lambda veya Azure Functions üzerindeki bulut dağıtımları için özellikle değerlidir. Platforma özgü kurulum hakkında daha fazla bilgi edinin Linux, macOS ve Docker ortamları için rehberlerimizde.

AnyBitmap bellek yönetimini nasıl ele alır?

AnyBitmap, otomatik çöp toplama entegrasyonu ve açık imha kalıpları yoluyla verimli bellek yönetimi uygular. Sıkça tahsis edilen tamponlar için bellek havuzlaması kullanır ve daha iyi performans için yaz-kopyala semantiklerini uygular. AnyBitmap dosya kilitleri tutabilirken, AnyBitmap görüntüleri tamamen belleğe yükleyerek dosya erişim sorunlarını önler. Ayrıca yüksek verimlilik senaryolarında bellek kullanımını daha iyi kontrol etmenizi sağlar. Büyük hacimli görüntü işleyen uygulamalar için, AnyBitmap'ın bellek verimliliği toplam bellek kullanımını önemli ölçüde azaltabilir. Taşınabilirlik kılavuzlarından daha fazla bilgiyi System.Drawing.Common Alternatifleri rehberimizde gör katılın.

Bir Tarama Bölgesi Nasıl Belirtebilirim?

OcrInput sınıfının inşasında, taranacak alanı belirtebilirsiniz. Bu, OCR için görüntü dokümanının belirli bölgesini tanımlamanıza olanak sağlar. Görüntü dokümanına bağlı olarak, tarama bölgesini belirlemek performansı önemli ölçüde artırabilir. Verilen kod örneğinde, yalnızca bölüm numarası ve başlık çıkarılır.

: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)
$vbLabelText   $csharpLabel

Daha iyi performans için ne zaman bölge tarama yapmalıyım?

Bölge tarama, yalnızca tutarlı belge düzenlerinin belirli alanlarından metne ihtiyacınız olduğunda performansı önemli ölçüde iyileştirir. Yaygın kullanım durumları arasında başlıkları çıkarma, form alanları, fatura toplamları veya kimlik kartı bilgileri yer alır. Büyük görüntülerde teksler küçük bir kısmını işgal ediyorsa, performans kazançları en belirgin şekilde olur. 3000x4000 piksel bir faturadaki yalnızca toplam miktar bölgesini taramak, tam sayfa OCR'den 10-20 kat daha hızlı olabilir. Bölge tarama, diğer bölgelerden gelecek olası gürültüyü ortadan kaldırarak doğruluğu da artırır. Daha fazla bölge tabanlı örnek için, İçerik Alanları ve PDF'lerle Kırpma Bölgeleri rehberimize bakın.

Bölgem için doğru koordinatları nasıl belirlerim?

Koordinatların belirlenmesi, Rectangle'ın (X, Y, Genişlik, Yükseklik) formatını kullandığını anlamayı gerektirir; burada (0,0) sol üst köşedir. Görüntünüzü, imleç koordinatlarını gösteren bir görüntü düzenleyicisine açarak başlayın. Alternatif olarak, tespit edilen metin bölgelerini görselleştirmek için IronOCR'nin hata ayıklama özelliklerini kullanın. Dinamik düzenler için, önce tam bir tarama gerçekleştirmek için IronOCR kullanmayı düşünün, ardından programlı olarak metin konumlarını bulmak için OcrResult'yı analiz edin. Hata için Çıkarılmış Metinleri Vurgulama örneğimiz, doğru koordinat belirleme için OCR bölgelerini nasıl görselleştireceğinizi göstermektedir.

Belirtilen bölge görüntü sınırlarını aşarsa ne olur?

Belirtilen bir bölge görüntü sınırlarını aşarsa, IronOCR otomatik olarak bunu geçerli görüntü alanına kısar. Örneğin, resminiz 1000x1000 piksel ise ve (900, 900, 200, 200) bir dikdörtgen belirtirseniz, IronOCR yalnızca (900, 900) ile (1000, 1000) arasını işler. Bu otomatik kısaltma hataları önler ancak koordinatlar yanlışsa eksik metin çıkarmaya neden olabilir. Bölgelerinizi gerçek görüntü boyutlarına karşı daima doğrulayın. Dinamik görüntü boyutları için, bölgeleri sabit piksel yerine yüzde olarak hesaplayın. Bir Görüntü'nün OCR Bölgesi rehberi, güvenli bölge yönetiminin daha fazla örneğini sunar.

OCR Sonucu

OCR çıkarım demosu, Fotoğraf Görüntüleyici ve hata ayıklama konsolunda gösterilen Harry Potter bölüm metni ile

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

Sıkça Sorulan Sorular

C# OCR içinde System.Drawing.Bitmap'dan metin nasıl çıkarılır?

IronOCR, System.Drawing.Bitmap nesnelerinden metin çıkarmayı basit hale getirir. İlk olarak, IronTesseract sınıfını başlatın. Ardından, Bitmap'inizi bir using deyimi ile OcrImageInput nesnesine sarın ve son olarak Read metodunu çağırın. Minimal kod: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));

OcrImageInput ile çalışırken using deyimi neden önemlidir?

Using deyimi önemlidir çünkü OcrImageInput, IDisposable'ı uygular ve uygun bir temizleme gerektiren yönetilmeyen kaynaklara sahiptir. Olmadan, özellikle birden fazla görüntü işlendiğinde, bellek sızıntıları veya dosya kilitlenmeleriyle karşı karşıya kalabilirsiniz. IronOCR'un OcrImageInput'i, .NET uygulamalarınızda etkili kaynak yönetimini sağlamak için uygun şekilde bertaraf edilmelidir.

System.Drawing.Image nesneleri üzerinde OCR işlemi yapabilir miyim?

Evet, IronOCR, System.Drawing.Image nesneleri üzerinde OCR'i destekler çünkü Image, Bitmap için temel sınıftır. Basitçe Image nesnenizi, Bitmap ile yaptığınız gibi OcrImageInput'e sarın ve IronOCR, Windows, macOS ve Linux platformlarında metni sorunsuz bir şekilde çıkaracaktır.

IronSoftware.Drawing.AnyBitmap nedir ve OCR ile nasıl ilişkilidir?

IronSoftware.Drawing.AnyBitmap, IronDrawing'den bir bitmap sınıfıdır, bu açık kaynaklı kütüphane, .NET projelerinde System.Drawing.Common'ı değiştirmeye yardımcı olur. Windows, macOS ve Linux için çapraz platform uyumluluğu sağlar ve IronOCR ile farklı işletim sistemleri arasında tutarlı görüntü işleme ihtiyaç duyulduğunda idealdir.

Belirli bir görüntü alanı için metin çıkarımı belirtebilir miyim?

Evet, IronOCR, kırpma bölgelerini belirterek özel okuma alanları tanımlamanıza olanak tanır. Bu özellik, yalnızca bir görüntünün belirli kısımlarından metne ihtiyaç duyduğunuzda, System.Drawing nesneleriniz üzerindeki OCR işlemlerini belirli bölümlere odaklayarak performansı ve doğruluğu iyileştirir.

IronOCR birden fazla dili destekliyor mu?

IronOCR, birden çok dili destekler ve farklı dillerde metin tanımaya ihtiyaç duyan global uygulamalar için çok yönlü bir araçtır.

IronOCR mevcut uygulamalara entegre edilebilir mi?

IronOCR, C# kullanarak mevcut uygulamalara kolayca entegre edecek şekilde tasarlanmıştır, bu sayede geliştiriciler, yazılımlarına minimal çabayla OCR işlevselliği ekleyebilir.

IronOCR'yi belge yönetimi için kullanmanın faydaları nelerdir?

IronOCR'yi belge yönetimi için kullanmak, taranmış belgeleri aranabilir ve düzenlenebilir metne dönüştürerek iş akışını hızlandırır, manuel veri giriş ihtiyacını azaltır ve belge erişilebilirliğini artırır.

IronOCR veri doğruluğunu nasıl artırabilir?

IronOCR, gelişmiş tanıma algoritmaları ve görüntü düzeltme özellikleriyle veri doğruluğunu artırır, böylece metin çıkarım sürecinin hem güvenilir hem de kesin olmasını sağlar.

IronOCR için ücretsiz bir deneme mevcut mu?

Evet, Iron Software, IronOCR'nin özelliklerini ve yeteneklerini, bir satın alma kararı vermeden önce test edebilmek için ücretsiz bir deneme sunar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Gözden Geçiren
Jeff Fritz
Jeffrey T. Fritz
Baş Program Yöneticisi - .NET Topluluğu Ekibi
Jeff, .NET ve Visual Studio ekipleri için bir Baş Program Yöneticisidir. .NET Conf sanal konferans serisinin baş yapımcısıdır ve haftada iki kez canlı yayınlanan 'Fritz and Friends' adlı bir akış programı sunar; burada izleyicilerle birlikte teknoloji konuşur ve kod yazar. Jeff, en büyük Microsoft geliştirici etkinlikleri için atölyeler, sunumlar ve içerik planları yazar, Microsoft Build, Microsoft Ignite, .NET Conf ve Microsoft MVP Summit gibi etkinliklerde yer alır.
Başlamaya Hazır mısınız?
Nuget İndirmeler 6,136,090 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronOcr
örnek çalıştır görüntünüzün aranabilir metin haline gelmesini izleyin.