System Drawing Images'ı C#'ta OCR İşleme için Nasıl Kullanılır

System.Drawing Nesnelerinden C#'ta Nasıl Okunur

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

IronOCR, System.Drawing gibi nesnelerden Bitmap ve Image okuyarak, Windows, macOS ve Linux platformlarında .NET uygulamaları için sorunsuz OCR işlevselliği sağlayan OcrImageInput ile sararak metin okuma olanağı sunar.

System.Drawing.Bitmap, .NET Framework'te bitmap resimlerle çalışmak için kullanılan bir sınıftır. Bitmap görüntüler oluşturmak, manipule etmek ve gorselleştirmek icin method ve özellikler saglar.

System.Drawing.Image, .NET Framework'te tüm GDI+ resim nesneleri için bir üst sınıftır. Bu, System.Drawing.Bitmap dahil çeşitli resim türlerinin üst sınıfıdır.

IronSoftware.Drawing.AnyBitmap, Iron Software tarafından orijinal olarak geliştirilen açık kaynaklı bir kütüphane olan IronDrawing'deki bir bitmap sınıfıdır. Windows, macOS ve Linux platformlarında .NET projelerinde System.Drawing.Common'u değiştirmek için C# yazılım mühendislerine yardımcı olur.

Hızlı Başlangıç: System.Drawing.Bitmap'tan Metin okuyun

Tek bir ifadeyle IronTesseract oluşturun ve tüm metni çıkarmak için OcrImageInput ile sarılı bir System.Drawing.Bitmap verin. Bu hizli başlangic ornegi, IronOCR'un görüntüleri nasıl minimum ayarla okunabilir metne dönüştürdugunu gösterir.

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronOcr yükleyin

    PM > Install-Package IronOcr
  2. Bu kod parçasını kopyalayıp ç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 etmek için dağıtın

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

    arrow pointer


System.Drawing.Bitmap'tan Nasıl Okurum?

İlk olarak, OCR gerçekleştirmek için IronTesseract sınıfını başlatın. Çeşitli yöntemlerden birinden bir System.Drawing.Bitmap oluşturun. Kod orneginde, bir dosya yolu kullanilmaktadir.

Daha sonra, using ifadesini kullanarak System.Drawing.Bitmap nesnesinden resmi ona geçirerek OcrImageInput nesnesini oluşturun. Son olarak, OCR gerçekleştirmek için Read metodunu 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 uygular, bu da yönetilmeyen kaynaklar tuttuğu ve işleminiz bittiğinde bu kaynakların serbest bırakılması gerektiği anlamına gelir. using ifadesi olmadan, bu kaynaklar zamanında serbest bırakılmayabilir, bu da potansiyel olarak bellek sızıntılarına veya dosya kilitlenmelerine yol açabilir. Bu, toplu işlemlerle coklu görüntü islenirken özellikle onemlidir. IronOCR'daki dogru kaynak yonetimi hakkinda daha fazla bilgi icin API Referansi belgelerimize bakin.

Yaygin Bitmap yukleme yöntemleri nelerdir?

System.Drawing.Bitmap, örneğimizde kullanılan dosya yolu yapıcısı dışında birkaç yükleme yöntemi sağlar. Akışlardan (new Bitmap(stream)), mevcut Images'den (new Bitmap(image)) Bitmaps oluşturabilir veya belirli boyutlara sahip boş bitmap'ler (new Bitmap(width, height)) oluşturabilirsiniz. Web uygulamalarinda, yuklemek sahsi yuklenen dosyalari işlemek icin özellikle faydalidir. Gömülü kaynaklar için Assembly.GetManifestResourceStream() kullanabilirsiniz. IronOCR, OcrImageInput yapıcısı aracılığıyla tüm bu Bitmap kaynaklarını sorunsuz bir şekilde işler. Gorusler (jpg, png, gif, tiff, bmp) kılavuzumuzda farkli giris yöntemleri hakkinda daha fazla bilgi edinin.

Bitmap nesnesini ne zaman iptal etmeliyim?

Bitmap iptal sureci, uygulamanizin isk akisina baglidir. OCR için yalnızca Bitmap'ya ihtiyaçınız varsa, OcrImageInput oluşturulduktan hemen sonra onu imha edin. Ancak, birden fazla işlem gerceklestirmeniz veya resmi göstermeniz gerekiyorsa, tüm işlemler tamamlanana kadar canli tutun. Yok etmeyi sağlamak için her zaman using ifadeleri veya try-finally bloklarını kullanın. OcrImageInput kendi iç kopyasını oluşturur, bu nedenle OcrImageInput oluşturulduktan sonra orijinal Bitmap imha edilebilir. OCR Image Optimization Filters örneklerimizde coklu görüntü işlemlerini iceren karisik senaryolar icin dusunun.

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

Bir System.Drawing.Image'den okumak, Image ile OcrImageInput nesnesini oluşturmak ve ardından Read metodunu kullanarak standart OCR işlemini 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 icin Image ve Bitmap arasindaki fark nedir?

System.Drawing.Bitmap, bitmap resimleri için spesifik bir uygulama iken, System.Drawing.Image JPEG, PNG, GIF ve TIFF dahil olmak üzere farklı resim formatlarını temsil edebilen soyut bir üst sınıftır. OCR amaçları için, IronOCR her ikisini de OcrImageInput aracılığıyla aynı şekilde ele alır, ancak Image, farklı formatlarla çalışırken daha fazla esneklik sağlar. Bitmap piksel düzeyinde manipülasyon yetenekleri sunarken, Image genel resim işleme için daha iyidir. Her ikisi de IronOCR'un gelişmiş Tesseract 5 motoru ile esdeger sekilde calisir. Secim, genis kapsamli uygulama ihtiyaçlariniza gore değişiklik gösterir, OCR performansina gore değil.

Image.FromFile yerine diğer yukleme yöntemlerini neden kullanmalisiniz?

Image.FromFile, diskten resim yüklemek için en basit ve en doğrudan yöntemdir. Görüntü formatini otomatik olarak algilar ve dosya okuma işlemini gerceklestirir. Image.FromStream gibi alternatif yöntemler, web uygulamalarında veya bellek akışları ile çalışırken daha iyidir. Image.FromFile, dosyayı Image imha edilene kadar kilitler, bu çok iş parçacıklı uygulamalarda bir düşünce olabilir. Yuksek performans veya eszamanli erişim gerektiren uretim senaryolari icin oncelikle resimleri bellek akisoruna yuklemeyi dusunun. Coklu İşlemli Tesseract OCR ornegimiz eszamanli görüntü işleme icin en iyi uygulamalari gösterir.

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

Benzer şekilde, bir AnyBitmap nesnesi oluşturduktan veya elde ettikten sonra, OcrImageInput sınıfını oluşturabilirsiniz. Yapici, verileri iceri almak icin gereken tüm adimlari ele alacaktir. Asagidaki kod ornegi, 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'i System.Drawing siniflari uzerine neden tercih etmelisiniz?

AnyBitmap, System.Drawing sınıflarına kıyasla üstün çapraz platform uyumluluğu sunar. .NET 6+ üzerindeki System.Drawing.Common, Windows dışı platformlarda sınırlı desteğe sahipken, AnyBitmap Windows, Linux ve macOS platformlarında sorunsuz çalışır. Platform ozel bagimliliklari olmadan tutarlı bir API saglayarak, bulut kurulumlari ve kabin icerisinde uygulamalar icin idealdir. AnyBitmap, özellikle resim işleme görevleri için tasarlanmış daha iyi bellek yönetimi ve performans optimizasyonları da sunar. Detayli uyumluluk bilgisi icin Uygunluk belgelerimize bakin.

AnyBitmap hangi platformlari destekler?

AnyBitmap .NET'in çalıştığı tüm ana platformları destekler: Windows (x86, x64, ARM), Linux (Docker için Alpine Linux dahil) ve macOS (hem Intel hem de Apple Silicon). Bu genis platform destegi, ceşitli ortamlarda calismasi gereken modern .NET uygulamalari icin onerilen tercihtir. AWS Lambda veya Azure Functions üzerindeki bulut kurulumlari icin özellikle degerlidir. Linux, macOS ve Docker ortamlarina ozgu kurulum hakkinda daha fazla bilgi edinmek icin kılavuzlarımıza bakin.

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

AnyBitmap, otomatik çöp toplama entegrasyonu ve açık yok etme kalıpları aracılığıyla etkin bellek yönetimini uygular. Sıkça ayrılan tamponlar için bellek havuzu kullanır ve daha iyi performans için yazma üzerinde kopyalama semantiği uygular. Dosya kilitleri tutabilen System.Drawing.Bitmap'nin aksine, AnyBitmap, erişim sorunlarını önlemek için resimleri tamamen belleğe yükler. Ayrıca, yog'un işlem senaryolarinda bellek kullanimi uzerinde daha iyi kontrol saglar. Büyük miktarda resim işleyen uygulamalar için, AnyBitmap'nin bellek verimliliği toplam bellek tüketimini önemli ölçüde azaltabilir. Geçiş ipuçları icin System.Drawing.Common Alternatives kılavuzumuza bakın.

Tarama Alanını Nasıl Belirlerim?

OcrImageInput sınıfının yapılandırılmasında, taranacak alanı belirleyebilirsiniz. Bu, OCR icin görüntü belgesinin belirli bolgesini tanimlamanizi saglar. Görüntü belgesine bagli olarak, tarama bolgesini belirtmek performansı onemli olcude artırabilir. Saglanan kod orneginde, yalnızca bölüm numarasi ve basligi cı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 icin ne zaman bolge taraması yapmalıyım?

Bolge taraması, yalnızca tutarlı belge düzenlerinin belirli alanlarındaki metne ihtiyaçınız olduğunda performansı dramatik olarak artırır. Yaygın kullanım alanları arasında baslıklar, form alanları, fatura toplamları veya kimlik kartı bilgileri cıkarmak yer alır. Performans kazançları, metnin kucük bir kısımını kapladığı buyuk görüntülerde en onemlidir. 3000x4000 piksel bir faturada, yalnızca toplam tutar bolgesini taramak, tam sayfa OCR'dan 10-20 kat daha hızlı olabilir. Bolge taraması, diğer alanlardan gelebilecek olası parazitleri ortadan kaldırarak doğruluğu da artırır. Daha fazla bolge bazlı örnek icin, PDF'ler ile İçerik Alanları ve Kırpma Bolgeleri kılavuzumuza bakın.

Bolgem icin dogru koordinatlari nasıl belirlerim?

Koordinatları belirlemek, Rectangle'nin (X, Y, Genişlik, Yükseklik) formatını kullandığını anlamayı gerektirir, burada (0,0) sol üst köşedir. Once imajınızı kursör koordinatlarını gösteren bir görüntü duzenleyicisinde acarak başlayın. Alternatif olarak, tespit edilen metin bolgelerini göstermek icin IronOCR'un hata ayıklama özelliklerini kullanın. Dinamik düzenler için, öncelikle tam bir tarama yapmak için IronOCR kullanmayı düşünün, ardından metin konumlarını programatik olarak bulmak için OcrResult'i analiz edin. Hata Ayıklama İcın Metinleri Vurgulama orneğimiz, doğrulu koordinat belirlemek icin OCR bolgelerini nasıl görselleştireceğinizi gösterir.

Bolge görüntü sinirlarini asarsa ne olur?

Bir bolge görüntü sinirlarını astıgında, IronOCR bunu otomatik olarak gecerli görüntü alanına kırpar. Ornegin, görüntünuz 1000x1000 piksel ise ve siz (900, 900, 200, 200) boyutunda bir dikdortgen belirlerseniz, IronOCR yalnızca (900, 900) ila (1000, 1000) arasındaki alanı isler. Bu otomatik kırpma, hataları onler ancak koordinatlarınız hatalıysa eksik metin cıkarılmasına neden olabilir. Her zaman bolgelerinizi gerçek görüntü boyutlarına karşı dogrulayın. Dinamik görüntü boyutları icin, bolgeleri sabit pikseller yerine yuzdeler olarak hesaplayın. Bir Görüntünun OCR Bolgesi kılavuzu guvenli bolge işleme örnekleri sunar.

OCR Sonucu

Harry Potter bölüm metnini Görüntü Görüntüleyici'de gösterme ve debug konsolunda cıkarılmıs cıktı gösteren OCR cıkarma demo

Sıkça Sorulan Sorular

System.Drawing.Bitmap kullanarak C#'ta OCR ile metin nasıl çıkarılır?

IronOCR, System.Drawing.Bitmap objelerinden metin çıkarmayı basit hale getiriyor. Önce IronTesseract sınıfını başlatın, ardından Bitmap'i OcrImageInput objesine using ifadesi kullanarak sarın ve son olarak Read metodunu çağırın. Minimum kod: var sonuç = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));

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

Using ifadesi önemlidir çünkü OcrImageInput, IDisposable'u uygular ve doğru temizlik gerektiren yönetilmemiş kaynaklar barındırır. Olmazsa, bellek sızıntısı veya dosya kilitleri oluşabilir, özellikle de birden fazla görüntü işlenirken. IronOCR'un OcrImageInput'u, .NET uygulamalarınızda verimli kaynak yönetimini sağlamak için düzgün atım gerektirir.

System.Drawing.Image objelerinde OCR gerçekleştirebilir miyim?

Evet, IronOCR, Image sınıfının Bitmap için temel sınıf olması nedeniyle System.Drawing.Image objelerinde OCR desteklemektedir. Image objenizi Bitmap'te olduğu gibi OcrImageInput'a sarın ve IronOCR, metni Windows, macOS ve Linux platformları arasında sorunsuz bir şekilde çıkaracaktır.

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

IronSoftware.Drawing.AnyBitmap, System.Drawing.Common'i .NET projelerinde değiştirmeye yardımcı olan açık kaynaklı bir kütüphane olan IronDrawing'den bir bitmap sınıfıdır. Farklı işletim sistemlerinde tutarlı görüntü işleme gerektiğinde IronOCR ile kullanılmak üzere, Windows, macOS ve Linux için çapraz platform uyumluluğu sağlar.

Bir resimden metin çıkarmak için belirli bir alan belirtebilir miyim?

Evet, IronOCR kırpma bölgelerini belirleyerek belirli okuma alanları tanımlamanıza olanak tanır. Bu özellik, yalnızca bir görüntünün belirli bölümlerinden metin gerekiyorsa, performansı ve doğruluğu artırarak System.Drawing nesnelerinizin belirli bölümlerine OCR işlemini odaklamanızı sağlar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku
İnceleyen
Jeff Fritz
Jeffrey T. Fritz
Baş Program Yöneticisi - .NET Topluluk Ekibi
Jeff, aynı zamanda .NET ve Visual Studio ekipleri için Baş Program Yöneticisi'dir. Microsoft geliştirici etkinlikleri (Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit) için atölye çalışmaları, sunumlar yazar ve içerik planlar ve haftada iki kez yayınlanan 'Fritz ve Arkadaşları' canlı yayınının ev sahibidir.
Başlamaya Hazır mısınız?
Nuget İndirmeler 5,585,834 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package IronOcr
örnekleri çalıştır resminizin aranabilir metne donuşünü izleyin.