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 nesnelerinden Bitmap ve Image gibi metinleri OcrImageInput içine sararak okumayı sağlar ve Windows, macOS ve Linux platformlarında .NET uygulamaları için kesintisiz OCR işlevselliği sunar.

System.Drawing.Bitmap, bitmap görüntülerle çalışmak için kullanılan .NET Framework'teki 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 temel sınıftır. System.Drawing.Bitmap dahil olmak üzere çeşitli görüntü türleri için ana sınıftır.

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

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

Tek bir ifadeyle bir IronTesseract oluşturun ve tüm metni çıkarmak için System.Drawing.Bitmap'yi OcrImageInput ile sararak ona 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?

İlk olarak, OCR işlemini gerçekleştirmek için sınıfını örneklendirin. Çeşitli yöntemlerden birini kullanarak bir oluşturun. Kod örneğinde, bir dosya yolu kullanılır.

Ardından, deyimini kullanarak nesnesini oluşturun ve nesnesinden gelen görüntüyü bu nesneye aktarın. Son olarak, OCR işlemini gerçekleştirmek için 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 çok önemlidir, çünkü doğru kaynak yönetimi ve bellek temizliğini sağlar. OcrImageInput, IDisposable'yi uygular; bu, nesneyle işiniz bittiğinde serbest bırakılması gereken yönetilmeyen kaynakları tuttuğu anlamına gelir. using ifadesi olmadan, bu kaynaklar zamanında serbest bırakılamayabilir ve bu da 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 oluşturucusunun ötesinde çeşitli yükleme yöntemleri sunar. Bitmap'yi akışlardan (StreamReader), mevcut Image'lerden (Image) oluşturabilir veya hatta belirli boyutlarda boş bitmap'ler (Bitmap) oluşturabilirsiniz. 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, source yapıcı aracılığıyla tüm bu Bitmap kaynaklarını sorunsuz bir şekilde işler. 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. OCR için yalnızca bitmap'ye ihtiyacınız varsa, ocrResult'yi oluşturduktan hemen sonra bunu silin. Ancak, birden çok işlem yapmanız veya görüntüyü göstermeniz gerekiyorsa, tüm işlemler tamamlanana kadar canlı tutun. İmha işlemini sağlamak için her zaman using ifadeleri veya try-finally blokları kullanın. OcrImageInput'ün kendi dahili kopyasını oluşturduğunu unutmayın, bu nedenle bitmap oluşturulduktan sonra orijinal OcrImageInput silinebilir. 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 dosyasından okuma işlemi, OcrInput nesnesini Image ile oluşturup ardından Read yöntemini 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 için Image ve Bitmap arasındaki fark nedir?

Bitmap bitmap görüntüler için özel bir uygulama iken, Image JPEG, PNG, GIF ve TIFF dahil olmak üzere çeşitli görüntü formatlarını temsil edebilen soyut bir temel sınıftır. OCR amaçları için IronOCR, OcrInput aracılığıyla her ikisini de aynı şekilde ele alır, ancak Image farklı formatlarla çalışırken daha fazla esneklik sağlar. Bitmap piksel düzeyinde işleme yetenekleri sunarken, Image genel görüntü işleme için daha uygundur. 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ü yüklemek için en basit ve en doğrudan yöntemdir. Görüntü formatını otomatik olarak algılar ve dosya okuma işlemini yapar. MemoryStream gibi alternatif yöntemler, web uygulamaları için veya bellek akışlarıyla çalışırken daha uygundur. FileStream, FileStream kaldırılana kadar dosyayı kilitler; bu durum, çok iş parçacıklı uygulamalarda dikkate alınması gereken bir husustur. 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 bir çapraz platform uyumluluğu sunar. Bitmap, .NET 6+ sürümlerinde Windows dışındaki platformlarda sınırlı destek sunarken, AnyBitmap Windows, Linux ve macOS platformlarında sorunsuz bir şekilde ç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 ayrıca, görüntü işleme görevleri için özel olarak tasarlanmış daha iyi bellek yönetimi ve performans optimizasyonları 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 modelleri aracılığıyla verimli bellek yönetimi sağlar. Sıkça tahsis edilen tamponlar için bellek havuzlaması kullanır ve daha iyi performans için yaz-kopyala semantiklerini uygular. Dosya kilitleri tutabilen AnyBitmap'dan farklı olarak, AnyBitmap görüntüleri tamamen belleğe yükler ve 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üleri işleyen uygulamalar için, AnyBitmap'nin bellek verimliliği, genel 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 oluşturulması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ı belirlemek için, Rectangle'nin (X, Y, Genişlik, Yükseklik) formatını kullandığını ve (0,0) noktasının sol üst köşe olduğunu anlamak gerekir. 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 IronOCR kullanarak tam bir tarama yapmayı, ardından OcrResult öğesini analiz ederek metin konumlarını programlı olarak bulmayı düşünün. 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 5,896,332 | Sürüm: 2026.5 just released
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.