C#'te OCR İşlemi için Giriş Görüntülerini Kullanma

C#'te OCR için Akışlardan Nasıl Okunur

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

IronOCR, akışı OcrInput veya OcrImageInput yapıcılarına aktararak C#'daki akışlardan görüntü verilerini doğrudan okur ve dosyaları diske kaydetmeden verimli OCR işlemeyi mümkün kılar.

Akış, okunabilir veya yazılabilir sürekli bir ikili bilgi akışıdır. Programlamada, akışlar belleğe sığmayacak kadar büyük verileri yönetilebilir parçalara ayırarak verimli bir şekilde işler.

IronOCR'nin içe aktarma yöntemleri, görüntü veri akışlarını doğrudan kabul eder. Akış verilerini bir içe aktarma yöntemine gönderin; gerekli tüm adımları otomatik olarak halleder. Gelişmiş senaryolar için, çeşitli giriş formatlarını hazırlamak üzere kapsamlı seçenekler sunan OcrInput Sınıfını inceleyin.

Hızlı Başlangıç: OCR Girdisi Olarak Akış Kullanımı

Bu örnek, System.IO.Stream kodunu IronOCR'ye girerek, dosya yollarını atlayarak ve minimum kodla tanınan metni alarak anında OCR işlemini göstermektedir.

  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.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  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


IronOCR ile Akışları Nasıl Okurum?

İlk olarak, OCR işlemini gerçekleştirmek için IronTesseract sınıfını örneklendirin. Görüntü dosyasını içe aktarmak için FromFile yöntemini kullanın. Bu AnyBitmap nesnesi, görüntü verilerini bir akışa dönüştürür. Ardından, using ifadesini kullanarak OcrImageInput yöntemiyle görüntü akışını aktararak GetStream nesnesini oluşturun. Son olarak, OCR işlemini gerçekleştirmek için Read yöntemini kullanın.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Import image stream
Private imageInput = New OcrImageInput(anyBitmap.GetStream())
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

Akış tabanlı OCR, web uygulamaları için görüntü yüklemeleri alırken, veritabanlarından görüntü işlerken veya diske yazılmaması gereken geçici verileri işlerken fayda sağlar. Akış yaklaşımı, System.Drawing nesneleri ve diğer görüntü işleme kütüphaneleriyle sorunsuz bir şekilde entegre olur.

Neden OCR için Akışlar Kullanılır?

Akışlarla çalışmak, .NET geliştiricileri için birkaç avantaj sunar:

  1. Bellek Verimliliği: Veri kümelerini parça parça işleyin, böylece tüm dosyaları belleğe yüklemekten kaçının
  2. Güvenlik: Geçici dosyalar oluşturulmadan hassas belgeleri işleyin.
  3. Performans: Dosya sistemi işlemlerinden gelen giriş/çıkış aşırı yükünü ortadan kaldırın.
  4. Esneklik: Web yüklemeleri, veritabanı BLOB'ları ve bellek içi dönüşümlerle çalışın.

Çok sayfalı belgeleri işlerken veya PDF akışlarını işlerken IronOCR, basit API'yi korurken güçlü performans sağlar. Taralı belgelerle çalışırken, akış işleme yoluyla etkili bir şekilde taralı belgeleri okuma yeteneklerinden yararlanabilirsiniz.

Akış OCR için Bir Tarama Bölgesi Nasıl Belirtirim?

Büyük görüntülerde performansı artırmak ve belirli bölgelerden belirli okumalar elde etmek için CropRectangle sınıfını kullanın. OcrImageInput yapıcı, ikinci parametre olarak bir CropRectangle nesnesini kabul eder ve görüntü belgesinin hangi bölgesinin okunması gerektiğini belirlemenize olanak tanır. Aşağıdaki kod örneği, yalnızca bölüm numarası ve başlık bölgesinin okunacağını belirtir.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput(anyBitmap.GetStream(), 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()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output the result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

Bu teknik özellikle, bir görüntünün belirli bir bölgesini OCR yapmak veya metnin tahmin edilebilen konumlarda göründüğü yapılı belgelerle çalışırken faydalıdır. Tablo veya yapılı veri içeren daha karmaşık senaryolar için belgelerdeki tabloları nasıl okuyacağınızı keşfedin.

Tarama Bölgesi Çıktıda Nasıl Görünür?

OCR demo: 'Sekizinci Bölüm Ölüm Günü Partisi' metni Fotoğraf Görüntüleyici ve hata ayıklama konsolunda gösteriliyor

Hangi İleri Akış İşleme Tekniklerini Kullanabilirim?

Akışlarla çalışırken, tanıma doğruluğunu artırmak için ek IronOCR özelliklerinden yararlanın. OCR işleminden önce akış verilerine doğrudan uygulanabilen görüntü optimizasyon filtreleri:

using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO

' Process stream with filters
Public Function ProcessStreamWithFilters(imageStream As Stream) As String
    Dim ocrTesseract As New IronTesseract()

    ' Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd

    Using input As New OcrImageInput(imageStream)
        ' Apply preprocessing filters
        input.Deskew()
        input.DeNoise()
        input.Sharpen()

        Dim result = ocrTesseract.Read(input)
        Return result.Text
    End Using
End Function
$vbLabelText   $csharpLabel

Gelişmiş görüntü işlemeyi iyileştirmek için, belirli belge türlerinize en iyi ön işleme adımlarını otomatik olarak belirlemek adına Filtre Sihirbazı'nı kullanmayı düşünün. Ayrıca, akışlarınızdaki döndürülen veya eğik görüntülerle uğraşırken, görüntü yönü düzeltme fonksiyonu, OCR doğruluğunu önemli ölçüde artırabilir.

Farklı Akış Kaynaklarıyla Nasıl Çalışırım?

IronOCR çeşitli akış kaynaklarını sorunsuz bir şekilde işler. İster bir web formundan yüklemeleri işlerken, ister veritabanından görüntü çekerken veya formatlar arasında dönüştürürken, API tutarlı kalır:

// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
Imports System.IO
Imports System.Net

' From MemoryStream
Dim imageBytes As Byte() = GetImageBytesFromDatabase()
Using memoryStream As New MemoryStream(imageBytes)
    Using input As New OcrImageInput(memoryStream)
        ' Process input
    End Using
End Using

' From FileStream
Using fileStream As New FileStream("document.png", FileMode.Open)
    Using input2 As New OcrImageInput(fileStream)
        ' Process input2
    End Using
End Using

' From network stream
Using webClient As New WebClient()
    Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg")
        Using input3 As New OcrImageInput(networkStream)
            ' Process input3
        End Using
    End Using
End Using
$vbLabelText   $csharpLabel

En iyi sonuçlar için, düşük çözünürlüklü akışlarla çalışırken DPI ayarlarını ayarlamayı düşünün. IronOCR DPI algılamasını otomatik olarak işler, ancak belirli kullanım durumları için manuel yapılandırma doğruluğu artırabilir. Çok sayfalı belgelerle çalışırken, akış işleme yoluyla çok sayfalı TIFF ve GIF dosyalarını ele almayı keşfedin.

Akışlardan Alınan OCR Sonuçlarıyla Nasıl Başlarım?

Akışınızı işledikten sonra, IronOCR basit metin çıkarımının ötesine geçen zengin sonuç nesneleri sağlar. OcrResult sınıfı, güvenlilik puanları, konumlandırma ve yapı dahil olmak üzere tanınan metin hakkında ayrıntılı bilgiler içerir:

// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
Imports IronOcr

' Process stream and analyze results
Using input As New OcrImageInput(stream)
    Dim result = New IronTesseract().Read(input)

    ' Access detailed results
    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%")

        For Each paragraph In page.Paragraphs
            Console.WriteLine($"Paragraph: {paragraph.Text}")
            Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}")
        Next
    Next

    ' Export results
    Dim text As String = result.Text
    Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf")
    Dim hocrHtml As String = result.SaveAsHocrHtml("output.html")
End Using
$vbLabelText   $csharpLabel

Sonuç nesnesi ayrıca, akış girişlerinizden arama yapılabilir doküman arşivleri oluşturmayı kolaylaştıran arama yapılabilir PDF olarak veya hOCR HTML formatında dışa aktarmaları sağlar. Hata ayıklama amacıyla, görüntülerinizde IronOCR'nin tespit ettiği metni görselleştirmek için metinleri vurgulama özelliğini kullanabilirsiniz.

Hangi Performans Hususlarını Bilmeliyim?

Birden fazla akışı işlerken veya yüksek verimlilikli OCR çözümleri uygularken, bu optimizasyon stratejilerini göz önünde bulundurun:

  1. IronTesseract Örneklerini Yeniden Kullanma: Tek bir örnek oluşturun ve bunu birden fazla işlemde yeniden kullanın
  2. İlerleme İzlemeyi Uygulayın: Büyük akışlar için, işleme durumunu izlemek amacıyla ilerleme izleme kullanın
  3. Paralel İşleme: IronOCR, birden fazla akış için eşzamanlı işlemeyi destekler
  4. Görüntü Kalitesini Optimize Edin: Optimum çözünürlük ve netlik sağlamak için akışları ön işleyin

Maksimum performansı sağlamak için, hızlı OCR yapılandırma seçeneklerini inceleyin ve toplu işlemler için çoklu iş parçacıklı işlem uygulamayı düşünün. Zaman odaklı uygulamalarla çalışırken, zaman aşımları anlamak, uzun süreli OCR işlemlerini etkili bir şekilde yönetmenize yardımcı olabilir.

Yaygın Akış Sorunlarını Nasıl Gideririm?

Akışlarla çalışırken belirli zorluklarla karşılaşabilirsiniz. İşte yaygın senaryolara yönelik çözümler:

  • Akış Konumu: IronOCR'ye geçmeden önce akış konumunu her zaman 0 olarak sıfırlayın.
  • İmha: Kaynakların düzgün bir şekilde temizlenmesini sağlamak için using ifadeleri kullanın
  • Format Desteği: IronOCR, akışlar ile JPEG, PNG, TIFF ve BMP dahil olmak üzere çeşitli görüntü formatlarını destekler.
  • Bellek Yönetimi: Büyük akışlar için parçalı işlem veya akış yaklaşımlarını düşünün.

Karmaşık belgeler veya standart OCR tatmin edici sonuç sağlamadığında, bilgisayarlı görü özelliklerimiz metin bulma ve çıkarma işlemini daha doğru yapmanıza yardımcı olabilir. Ek olarak, düşük kaliteli akışlarla çalışırken, tanıma oranlarını önemli ölçüde artırabilecek ön işleme teknikleri için düşük kaliteli taramaları düzeltme rehberine başvurun.

Akışlar ve diğer giriş yöntemleriyle çalışma hakkında daha ayrıntılı bilgi için kapsamlı nasıl yapılır rehberlerimizi ve kod örneklerimizi keşfedin.

Sıkça Sorulan Sorular

Görüntü verileri üzerinde OCR işlemi yapmadan önce bunu diske kaydetmeden nasıl gerçekleştirebilirim?

IronOCR, görüntü akışlarını doğrudan OcrInput veya OcrImageInput yapıcılarına geçirerek işlemenizi sağlar. Bu, web yüklemeleri, veritabanı BLOB'ları veya diske kaydedilmemesi gereken hassas belgelerin işlenmesi için ideal olan geçici dosya oluşturmadan verimli OCR işlemesine olanak tanır.

OCR işlemi için hangi tür akışlar giriş olarak kullanılabilir?

IronOCR, görüntü verisi içeren herhangi bir System.IO.Stream'i kabul eder. Buna web yüklemelerinden gelen bellek akışları, veritabanı BLOB alanlarından gelen akışlar veya görüntü işleme kütüphaneleri ile oluşturulan akışlar dahildir. Akışı OcrInput veya OcrImageInput'e geçirdiğinizde kütüphane gerekli tüm dönüştürme adımlarını otomatik olarak halleder.

C# dilinde bir akış üzerinde OCR yapmanın en basit yolu nedir?

En hızlı yöntem, akışınızla bir OcrInput nesnesi oluşturup Read metodunu çağırmaktır: 'using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);'. Bu minimal kod, OCR işlemi yaparak tanınan metni hemen döndürür.

OCR için neden dosya yolları yerine akışlar kullanmalıyım?

IronOCR ile akış tabanlı OCR, çeşitli avantajlar sunar: verileri parçalar halinde işleyerek bellek verimliliği, diskte geçici dosyalardan kaçınılarak artırılmış güvenlik, dosya G/Ç yükünü yok ederek iyileştirilmiş performans ve web yüklemeleri veya veritabanı BLOB'ları ile çalışırken daha fazla esneklik.

Bir görüntü akışının belirli bir alanını okumak için belirleyebilir miyim?

Evet, IronOCR sayesinde akışları işlerken kırpma bölgesi belirterek okuma alanını tanımlayabilirsiniz. Bu özellik, OCR işlemini görüntünün belirli kısımlarına odaklayarak hem hız hem de doğruluğu artırmanıza imkan tanır.

Akış işleme diğer görüntü işleme kütüphaneleriyle nasıl entegre olur?

IronOCR'un akış yaklaşımı, System.Drawing nesneleri ve diğer .NET görüntü işleme kütüphaneleriyle sorunsuz bir şekilde entegre olur. AnyBitmap sınıfını kullanarak GetStream metodu ile görüntüleri akışlara dönüştürebilir, bu sayede OCR'i diğer görüntü işleme iş akışlarıyla kolayca birleştirebilirsiniz.

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.