IronPDF ve OCR.net ile C#'da PDF OCR İşlemleri Nasıl Kurulabilir

OCR.net, optik karakter tanıma için derin öğrenme çerçevesidir ve IronPDF ile eşleştirilerek PDF'lerden metin çıkartır ve .NET uygulamalarında aranabilir belgeler üretir. Bu eğitim, uygulamanızın taranmış dosyaları işlemesi, PDF sayfalarını OCR için rasterize etmesi ve tanınan metni yeni bir aranabilir PDF olarak yeniden birleştirmesi için bu iki aracı nasıl bağlayacağınızı gösterir.
OCR.net modeli, karmaşık ortamlardaki sahne metni tespitinde ve karakter tanımada ustadır. IronPDF'nin görselleştirme motoru ile birleştirildiğinde, tam bir boru hattına sahip olursunuz: bir PDF oluşturur veya yükler, sayfalarını yüksek çözünürlüklü görüntüler olarak dışa aktarır, bu görüntüleri OCR.net'e gönderir ve sonuçları tam aranabilir bir belge olarak yeniden yapılandırır.
IronPDF ile Nasıl Başlanır?
OCR iş akışını oluşturmadan önce, projenizde IronPDF'nin kurulu olması gerekir. En hızlı yol, NuGet Package Manager konsolu:
Install-Package IronPdf
Ya da doğrudan NuGet UI aracılığıyla IronPdf aratılarak eklenebilir. Yüklendikten sonra, uygulama başlangıcında lisans anahtarınızı uygulayın:
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronPdf
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Tam özellik setini herhangi bir kısıtlama olmadan test edebilmeniz için bir ücretsiz deneme lisansı mevcuttur. IronPDF, Windows, Linux ve macOS üzerinde .NET 6, 7, 8 ve 10'u destekler, bu da aynı kodun masaüstü uygulamalarında, ASP.NET Core web servislerinde ve konteynır dağıtımlarında çalışacağı anlamına gelir.
Docker ortamları için, IronPDF, görüntü boyutunu azaltan önceden yapılandırılmış Linux dağıtım rehberi ve ince paket varyantları sunar. Uzaktan görselleştirme mimarisini tercih ediyorsanız, IronPDF Engine, desteklenen herhangi bir platformdaki istemcilerle ayrı bir hizmet olarak çalışabilir.
OCRNet Nedir ve Optik Karakter Tanıma Nasıl Çalışır?
OCR.net, farklı yazı tipi stillerinde alfanümerik karakterleri tanıyan optik karakter tanıma (OCR) için derin öğrenme yaklaşımıdır. Model, giriş görüntülerinden mekansal özellikleri yakalamak için optimize edilmiş bir sinir ağı mimarisi kullanır. PDF oluşturma yetenekleri ile birleştiğinde, bu eğitilmiş modeller, yaygın belge türlerinde güçlü hassasiyetle tanıma sağlar.
OCR.net arkasındaki tanıma çerçevesi, özellik öğrenmeyi geliştirmek ve görüntü tabanlı dizi tanıma görevlerini işlemek için Gated Recurrent Unit (GRU) içerir. Bu hibrit model, bağlantısal geçici sınıflandırma (CTC) aracılığıyla dikkat çekici doğruluğa ulaşır, bu teknik dizi etiketleme için başlangıçta tanıtılmıştır ve belge OCR'ye iyi transfer eder. Süregelen gelişmeler, özellikle PDF metin çıkarma araçları ile entegre edildiğinde, OCR.net'in dil desteğini genişletmeye devam ediyor.
Modern bir OCR hattının temel bileşenleri şunları içerir:
- Metin Tespiti: Eğitilmiş modeller kullanarak bir görüntü içindeki metinsel içerik bölgelerini tanımlama
- Sahne Metni Tespiti: Karmaşık arka planlarda ve dinamik ortamlarda metin bulma
- Alfanümerik Karakter Tanıma: Yüksek doğrulama doğruluğuna sahip karakterleri tanımak için eğitilmiş modelleri kullanma
- Desen Tanıma: Hafif sahne metni tanıma için görüntü işleme tekniklerini uygulama
GRU tabanlı mimari ve bağlantısal geçici sınıflandırma, kaynak kullanımını konteynırlaştırılmış ortamlarda etkinleştirir, bu da bellek ve CPU sınırlamalarının önemli olduğu Kubernetes dağıtımları için OCR.net'i pratik bir seçim haline getirir. Hafif mimari, Docker görüntü boyutlarını yönetilebilir kılar ve aynı zamanda güçlü tanıma doğruluğunu korur.
OCR.Net'i Ne Zaman Geleneksel OCR Kütüphaneleri Üzerine Kullanmalısınız?
Karmaşık sahne metnini, el yazısı belgeleri veya şablon tabanlı OCR'nin başarısız olduğu çoklu dil içeriğini işlerken, OCR.Net daha iyi bir seçimdir. Özellikle dışa bağımlılıklar olmaksızın donanım yapılandırmaları arasında tutarlı performansa ihtiyaç duyan konteynır uygulamaları içerisinde iyi performans gösterir. Model, UTF-8 kodlamasını temiz bir şekilde işler, ki bu uluslararası dil desteği için önemlidir.
Geleneksel regex tabanlı veya şablon eşleştirme OCR sistemleri, değişken yazı tiplerinde, el yazılarında veya düzensiz aydınlatmalı görüntülerde aksar. OCR.net'in sinirsel yaklaşımı, bu senaryoları daha iyi genelleştirir çünkü sabit şablonları eşleştirmek yerine özellikleri öğrenir. Bununla birlikte, belgeleriniz temiz, makine yazısı metinler ve tutarlı bir biçimlendirme içeriyorsa, daha hafif bir kütüphane daha hızlı ve yeterli olabilir.
OCR.net için Üretimde Yaygın Kaynak Gereksinimleri Nelerdir?
Üretim dağıtımları, sağlam performans için genellikle 2-4 CPU çekirdeği ve 4-8 GB RAM gerektirir. GPU hızlandırması, NVIDIA Docker çalıştırma zamanı kullanarak konteynırlaştırılmış ortamlarda toplu işleme için önemli bir hızlanma sağlar. Bu gereksinimler, Azure App Service ve AWS Lambda dağıtımları ile iyi uyum sağlar, ancak Lambda'nın bellek tavanı, bağlanmadan önce belirli belge boyutlarınızı ayarlamanızı gerektirir.
IronPDF, OCR İşleme için PDF Belgelerini Nasıl Oluşturur?
IronPDF, .NET geliştiricilerine PDF oluşturma üzerinde tam kontrol sağlar. Kutuphane, Chrome tabanlı rendering motoru aracılığıyla HTML dizelerini, URL'leri ve dosya girdilerini cilalı PDF'lere cevirir. OCR iş akışları için kritik özellik RasterizeToImageFiles()'dir; bu, PDF sayfalarını tanımaya uygun yüksek çözünürlüklü imgeler olarak dışa aktarır.
using IronPdf;
// Create a PDF document with IronPDF
var renderer = new ChromePdfRenderer();
// Set 300 DPI for OCR accuracy -- higher DPI preserves text sharpness
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.DPI = 300;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var pdf = renderer.RenderHtmlAsPdf(@"
<h1>Document Report</h1>
<p>Scene text integration for computer vision analysis.</p>
<p>Text detection results for dataset and model analysis.</p>");
// Tag the document with searchable metadata
pdf.MetaData.Author = "OCR Processing Pipeline";
pdf.MetaData.Keywords = "OCR, Text Recognition, Computer Vision";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("document-for-ocr.pdf");
// Export pages as PNG images for OCR.net -- 300 DPI is the recommended minimum
pdf.RasterizeToImageFiles("page-*.png", IronPdf.Imaging.ImageType.Png, 300);
using IronPdf;
// Create a PDF document with IronPDF
var renderer = new ChromePdfRenderer();
// Set 300 DPI for OCR accuracy -- higher DPI preserves text sharpness
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.DPI = 300;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var pdf = renderer.RenderHtmlAsPdf(@"
<h1>Document Report</h1>
<p>Scene text integration for computer vision analysis.</p>
<p>Text detection results for dataset and model analysis.</p>");
// Tag the document with searchable metadata
pdf.MetaData.Author = "OCR Processing Pipeline";
pdf.MetaData.Keywords = "OCR, Text Recognition, Computer Vision";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("document-for-ocr.pdf");
// Export pages as PNG images for OCR.net -- 300 DPI is the recommended minimum
pdf.RasterizeToImageFiles("page-*.png", IronPdf.Imaging.ImageType.Png, 300);
Imports IronPdf
' Create a PDF document with IronPDF
Dim renderer As New ChromePdfRenderer()
' Set 300 DPI for OCR accuracy -- higher DPI preserves text sharpness
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.DPI = 300
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
Dim pdf = renderer.RenderHtmlAsPdf("
<h1>Document Report</h1>
<p>Scene text integration for computer vision analysis.</p>
<p>Text detection results for dataset and model analysis.</p>")
' Tag the document with searchable metadata
pdf.MetaData.Author = "OCR Processing Pipeline"
pdf.MetaData.Keywords = "OCR, Text Recognition, Computer Vision"
pdf.MetaData.ModifiedDate = DateTime.Now
pdf.SaveAs("document-for-ocr.pdf")
' Export pages as PNG images for OCR.net -- 300 DPI is the recommended minimum
pdf.RasterizeToImageFiles("page-*.png", IronPdf.Imaging.ImageType.Png, 300)
RasterizeToImageFiles() metodu, PDF sayfalarını belirtilen DPI'da PNG görüntülerine dönüştürür. 300 DPI'da, metin kenarlari OCR modelinin benzer gorunen karakterleri ayirt etmesi icin yeterince keskin kalir. 150 DPI veya altinda, serif yazilarinda ve küçük yazilarda tanima dogrulugu belirgin bir sekilde duser. Disa aktardiktan sonra, PNG dosyalarini OCR.net'e yukleyin veya dogrudan yerel modele gecin.

Seffaf DPI Ayari Neden OCR Dogrulugunu Etkiler?
Daha yuksek DPI ayarlari (300-600), OCR modelinin karakterleri dogru bir sekilde ayirt etmesi gereken metin berrakligini korur. Takas file boyutu ve işleme suresidir. 300 DPI'da, tek bir A4 sayfasi yaklasik 2-3 MB PNG uretir. 600 DPI'da bu, 8-12 MB'a kadar cikar. Cogu belgeler icin, 300 DPI dogru dengedir. Rendering seçenekleri bunu belge turune gore ayarlamanizi saglar, sikistirma teknikleri ise OCR tamamlandiktan sonra dosya boyutlarini optimize etmenize yardimci olur.
IronPDF Containerized Ortamlar Nasıl Yönetir?
IronPDF'nin yerel motoru, Linux, Windows ve macOS container'larında tutarlı bir render sağlar. Yüksek kullanılabilirlikli hizmetler icin, IronPDF, PDF renderlemenin çalışır durumda olduğunu doğrulayan durum denetimi ve yaşam denetimi probalarını uygulayabilmeniz için ASP.NET Core sağlık kontrol uç noktaları ile entegre olur ve bir container örneğine trafik yönlendirmeden önce.
using IronPdf;
// Kubernetes-compatible health check endpoint
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/health/ready", async () =>
{
try
{
var renderer = new ChromePdfRenderer();
var testPdf = await renderer.RenderHtmlAsPdfAsync("<p>Health check</p>");
return testPdf.PageCount > 0 ? Results.Ok() : Results.Problem();
}
catch
{
return Results.Problem("PDF rendering unavailable");
}
});
await app.RunAsync();
using IronPdf;
// Kubernetes-compatible health check endpoint
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/health/ready", async () =>
{
try
{
var renderer = new ChromePdfRenderer();
var testPdf = await renderer.RenderHtmlAsPdfAsync("<p>Health check</p>");
return testPdf.PageCount > 0 ? Results.Ok() : Results.Problem();
}
catch
{
return Results.Problem("PDF rendering unavailable");
}
});
await app.RunAsync();
Imports IronPdf
' Kubernetes-compatible health check endpoint
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapGet("/health/ready", Async Function()
Try
Dim renderer = New ChromePdfRenderer()
Dim testPdf = Await renderer.RenderHtmlAsPdfAsync("<p>Health check</p>")
Return If(testPdf.PageCount > 0, Results.Ok(), Results.Problem())
Catch
Return Results.Problem("PDF rendering unavailable")
End Try
End Function)
Await app.RunAsync()
Rendere zamanlarını yakalamak ve tamamen başarısız olmadan önce kötüleşen containerları belirlemek için bu uç nokta ile özel günlüğü yan yana kullanın.
OCR.net, PDF Görüntülerinden Metin Nasıl Çıkarır?
IronPDF'den PNG dışa aktarımlarınızı aldıktan sonra, onları metin tanıma için OCR.net'e yüklersiniz. OCR.net boru hattı, görüntüleri işler ve çeşitli yazı tipleri arasında normalize edilmiş metin çıktısı döndürür. Hem basılı hem de yazılı metni ve 60'tan fazla belge dilini destekler.
OCR.net'i Çevrimiçi Kullanma:
- https://ocr.net/ adresine gidin
- IronPDF'den dışa aktarılan PNG veya JPG görüntüsünü (maksimum 2 MB) yükleyin
- 60'tan fazla mevcut seçenekten belge dilini seçin
- Çıktı formatını seçin: düz Metin veya Aranabilir PDF
- Görüntüyü OCR.net modelleri ile işlemek için "Şimdi Dönüştür"e tıklayın

OCR.net ayrıca otomatik işlem için bir API sağlar. Ücretsiz hesaplar saatte 50, bu da otomasyon boru hattı için kritik bir kısıtlama, taleple sınırlandırılmlarında olur. Başarı oranlarına sınırlama yanıtlarını nazikçe işlemek için bir logaritma tasarlayın.
using System;
using System.Net.Http;
using System.Threading.Tasks;
// Queue-based OCR processing with exponential backoff retry
async Task<string> ProcessOcrWithRetry(string imagePath, int maxRetries = 3)
{
for (int attempt = 0; attempt < maxRetries; attempt++)
{
try
{
// Replace with your actual OCR.net API call
return await CallOcrNetApi(imagePath);
}
catch (HttpRequestException ex) when (ex.Message.Contains("429"))
{
if (attempt == maxRetries - 1) throw;
var delay = TimeSpan.FromSeconds(Math.Pow(2, attempt));
await Task.Delay(delay);
}
}
throw new InvalidOperationException("OCR processing failed after all retries");
}
using System;
using System.Net.Http;
using System.Threading.Tasks;
// Queue-based OCR processing with exponential backoff retry
async Task<string> ProcessOcrWithRetry(string imagePath, int maxRetries = 3)
{
for (int attempt = 0; attempt < maxRetries; attempt++)
{
try
{
// Replace with your actual OCR.net API call
return await CallOcrNetApi(imagePath);
}
catch (HttpRequestException ex) when (ex.Message.Contains("429"))
{
if (attempt == maxRetries - 1) throw;
var delay = TimeSpan.FromSeconds(Math.Pow(2, attempt));
await Task.Delay(delay);
}
}
throw new InvalidOperationException("OCR processing failed after all retries");
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks
' Queue-based OCR processing with exponential backoff retry
Async Function ProcessOcrWithRetry(imagePath As String, Optional maxRetries As Integer = 3) As Task(Of String)
For attempt As Integer = 0 To maxRetries - 1
Try
' Replace with your actual OCR.net API call
Return Await CallOcrNetApi(imagePath)
Catch ex As HttpRequestException When ex.Message.Contains("429")
If attempt = maxRetries - 1 Then Throw
Dim delay As TimeSpan = TimeSpan.FromSeconds(Math.Pow(2, attempt))
Await Task.Delay(delay)
End Try
Next
Throw New InvalidOperationException("OCR processing failed after all retries")
End Function
Erişilebilirlik iş akışları için, OCR metin ayıklama, görme engelli kullanıcılara daha önce yalnızca görüntü olan belgelerden sesli geri bildirim almalarını sağlar. IronPDF ile birlikte PDF/UA uygunluğunu eşleştirerek asistan teknolojilerin belgeler arasında etkili bir şekilde gezinebilmesini sağlar.
Tam Bir IronPDF ve OCR.net İş Akışı Nasıl Oluşturulur?
IronPDF'i OCR.net ile birleştirmek uçtan uca belge çözümleri üretir. İş akışında üç aşama vardır: görüntü olarak PDF sayfalarını dışa aktarmak, metin ayıklama için görüntüleri OCR.net'e göndermek ve tanınan metni yeni aranabilir PDF olarak yeniden yapılandırmak.
using IronPdf;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
// --- Stage 1: Export PDF pages as images for OCR ---
var scannedPdf = PdfDocument.FromFile("input-document.pdf");
var imageFiles = scannedPdf.RasterizeToImageFiles(
"scan-page-{0}.png",
IronPdf.Imaging.ImageType.Png,
300 // 300 DPI -- minimum for reliable OCR accuracy
);
// --- Stage 2: Process each image through OCR.net ---
var ocrResults = new List<string>();
foreach (var imageFile in imageFiles)
{
// Replace this placeholder with your actual OCR.net API integration
string ocrText = await SendImageToOcrNet(imageFile);
ocrResults.Add(ocrText);
}
// --- Stage 3: Reassemble recognized text as a searchable PDF ---
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(@"<!DOCTYPE html><html><head>
<style>body{font-family:Arial,sans-serif;margin:40px;}
.page{page-break-after:always;} pre{white-space:pre-wrap;}</style>
</head><body>");
for (int i = 0; i < ocrResults.Count; i++)
{
htmlBuilder.AppendFormat(
"<div class='page'><h2>Page {0}</h2><pre>{1}</pre></div>",
i + 1,
System.Web.HttpUtility.HtmlEncode(ocrResults[i])
);
}
htmlBuilder.Append("</body></html>");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.DPI = 300;
renderer.RenderingOptions.EnableJavaScript = false;
var searchablePdf = await renderer.RenderHtmlAsPdfAsync(htmlBuilder.ToString());
searchablePdf.MetaData.Title = "OCR Processed Document";
searchablePdf.MetaData.Subject = "Searchable PDF from OCR";
searchablePdf.MetaData.CreationDate = DateTime.UtcNow;
searchablePdf.SecuritySettings.AllowUserPrinting = true;
searchablePdf.SecuritySettings.AllowUserCopyPasteContent = true;
searchablePdf.SaveAs("searchable-document.pdf");
using IronPdf;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
// --- Stage 1: Export PDF pages as images for OCR ---
var scannedPdf = PdfDocument.FromFile("input-document.pdf");
var imageFiles = scannedPdf.RasterizeToImageFiles(
"scan-page-{0}.png",
IronPdf.Imaging.ImageType.Png,
300 // 300 DPI -- minimum for reliable OCR accuracy
);
// --- Stage 2: Process each image through OCR.net ---
var ocrResults = new List<string>();
foreach (var imageFile in imageFiles)
{
// Replace this placeholder with your actual OCR.net API integration
string ocrText = await SendImageToOcrNet(imageFile);
ocrResults.Add(ocrText);
}
// --- Stage 3: Reassemble recognized text as a searchable PDF ---
var htmlBuilder = new StringBuilder();
htmlBuilder.Append(@"<!DOCTYPE html><html><head>
<style>body{font-family:Arial,sans-serif;margin:40px;}
.page{page-break-after:always;} pre{white-space:pre-wrap;}</style>
</head><body>");
for (int i = 0; i < ocrResults.Count; i++)
{
htmlBuilder.AppendFormat(
"<div class='page'><h2>Page {0}</h2><pre>{1}</pre></div>",
i + 1,
System.Web.HttpUtility.HtmlEncode(ocrResults[i])
);
}
htmlBuilder.Append("</body></html>");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.DPI = 300;
renderer.RenderingOptions.EnableJavaScript = false;
var searchablePdf = await renderer.RenderHtmlAsPdfAsync(htmlBuilder.ToString());
searchablePdf.MetaData.Title = "OCR Processed Document";
searchablePdf.MetaData.Subject = "Searchable PDF from OCR";
searchablePdf.MetaData.CreationDate = DateTime.UtcNow;
searchablePdf.SecuritySettings.AllowUserPrinting = true;
searchablePdf.SecuritySettings.AllowUserCopyPasteContent = true;
searchablePdf.SaveAs("searchable-document.pdf");
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
' --- Stage 1: Export PDF pages as images for OCR ---
Dim scannedPdf = PdfDocument.FromFile("input-document.pdf")
Dim imageFiles = scannedPdf.RasterizeToImageFiles(
"scan-page-{0}.png",
IronPdf.Imaging.ImageType.Png,
300 ' 300 DPI -- minimum for reliable OCR accuracy
)
' --- Stage 2: Process each image through OCR.net ---
Dim ocrResults As New List(Of String)()
For Each imageFile In imageFiles
' Replace this placeholder with your actual OCR.net API integration
Dim ocrText As String = Await SendImageToOcrNet(imageFile)
ocrResults.Add(ocrText)
Next
' --- Stage 3: Reassemble recognized text as a searchable PDF ---
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<!DOCTYPE html><html><head>
<style>body{font-family:Arial,sans-serif;margin:40px;}
.page{page-break-after:always;} pre{white-space:pre-wrap;}</style>
</head><body>")
For i As Integer = 0 To ocrResults.Count - 1
htmlBuilder.AppendFormat(
"<div class='page'><h2>Page {0}</h2><pre>{1}</pre></div>",
i + 1,
System.Web.HttpUtility.HtmlEncode(ocrResults(i))
)
Next
htmlBuilder.Append("</body></html>")
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.DPI = 300
renderer.RenderingOptions.EnableJavaScript = False
Dim searchablePdf = Await renderer.RenderHtmlAsPdfAsync(htmlBuilder.ToString())
searchablePdf.MetaData.Title = "OCR Processed Document"
searchablePdf.MetaData.Subject = "Searchable PDF from OCR"
searchablePdf.MetaData.CreationDate = DateTime.UtcNow
searchablePdf.SecuritySettings.AllowUserPrinting = True
searchablePdf.SecuritySettings.AllowUserCopyPasteContent = True
searchablePdf.SaveAs("searchable-document.pdf")
Bu boru hattı kasıtlı olarak basit tutulmuştur. Aşama 1, numaralandırılmış PNG dosyaları üretir. Aşama 2, her dosyayı OCR.net'e gönderir ve gönderilen metin dizelerini toplar. Aşama 3, bu dizeleri HTML içinde toplar ve metnin tamamen seçilebilir ve aranabilir olduğu son bir PDF'yi render etmek için IronPDF kullanır. Aşama 3'ü belge yönetimi için PDF meta verileri veya erişim kontrolü için güvenlik ayarlarını uygulamak üzere genişletebilirsiniz.

Bu İş Akışı İçin Hangi Docker Yapılandırması En İyi Çalışır?
Çok aşamalı Docker derlemeleri IronPDF'nin Linux'ta ihtiyaç duyduğu tüm çalışma zamanı bağımlılıklarını eklerken son görüntüyü küçük tutar.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
# IronPDF Linux runtime dependencies
RUN apt-get update && apt-get install -y \
libgdiplus \
libc6-dev \
libx11-dev \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /app/out .
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/health/ready || exit 1
ENTRYPOINT ["dotnet", "OcrWorkflow.dll"]
Üretim ölçeği için toplu OCR işlemleri için Kubernetes İşleri düşünün. Kubernetes İşleri, başarısız belge görevlerinin diğer hizmetleri etkilememesi için otomatik yeniden deneme, paralellik kontrolü ve kaynak izolasyonu sağlar. OCR.net API tier'inize uygun olacak şekilde parallelism ayarlarinizi yapın ve bir görev basarisiz olarak isaretlenmeden once basarisiz bir pod'un kac kez yeniden deneneceğini kontrol etmek icin backoffLimit ayarlarini yapın.
Performans Metriklerini Üretimde Nasıl İzlersiniz?
OCR işlem sürelerini ve başarı oranlarını izlemek, son kullanıcılara etki etmeden önce darboğazları belirlemeye yardımcı olur. Prometheus ile özel metrikler, pratik bir yaklaşımdır.
using Prometheus;
using System;
using System.Threading.Tasks;
// Prometheus metrics for OCR pipeline observability
var ocrRequestsTotal = Metrics
.CreateCounter("ocr_requests_total", "Total OCR requests processed");
var ocrDuration = Metrics
.CreateHistogram("ocr_duration_seconds", "OCR processing duration in seconds",
new HistogramConfiguration
{
Buckets = Histogram.LinearBuckets(0.1, 0.1, 10)
});
var activeOcrJobs = Metrics
.CreateGauge("ocr_active_jobs", "Currently active OCR jobs");
// Wrapper that tracks every OCR operation automatically
async Task<t> TrackOcrOperation<t>(Func<Task<t>> operation)
{
using (ocrDuration.NewTimer())
{
activeOcrJobs.Inc();
try
{
var result = await operation();
ocrRequestsTotal.Inc();
return result;
}
finally
{
activeOcrJobs.Dec();
}
}
}
using Prometheus;
using System;
using System.Threading.Tasks;
// Prometheus metrics for OCR pipeline observability
var ocrRequestsTotal = Metrics
.CreateCounter("ocr_requests_total", "Total OCR requests processed");
var ocrDuration = Metrics
.CreateHistogram("ocr_duration_seconds", "OCR processing duration in seconds",
new HistogramConfiguration
{
Buckets = Histogram.LinearBuckets(0.1, 0.1, 10)
});
var activeOcrJobs = Metrics
.CreateGauge("ocr_active_jobs", "Currently active OCR jobs");
// Wrapper that tracks every OCR operation automatically
async Task<t> TrackOcrOperation<t>(Func<Task<t>> operation)
{
using (ocrDuration.NewTimer())
{
activeOcrJobs.Inc();
try
{
var result = await operation();
ocrRequestsTotal.Inc();
return result;
}
finally
{
activeOcrJobs.Dec();
}
}
}
Imports Prometheus
Imports System
Imports System.Threading.Tasks
' Prometheus metrics for OCR pipeline observability
Dim ocrRequestsTotal = Metrics.CreateCounter("ocr_requests_total", "Total OCR requests processed")
Dim ocrDuration = Metrics.CreateHistogram("ocr_duration_seconds", "OCR processing duration in seconds",
New HistogramConfiguration With {
.Buckets = Histogram.LinearBuckets(0.1, 0.1, 10)
})
Dim activeOcrJobs = Metrics.CreateGauge("ocr_active_jobs", "Currently active OCR jobs")
' Wrapper that tracks every OCR operation automatically
Async Function TrackOcrOperation(Of T)(operation As Func(Of Task(Of T))) As Task(Of T)
Using ocrDuration.NewTimer()
activeOcrJobs.Inc()
Try
Dim result = Await operation()
ocrRequestsTotal.Inc()
Return result
Finally
activeOcrJobs.Dec()
End Try
End Using
End Function
Bu metrikleri IronPDF'nin loglama yetenekleri ile eşleştirerek render zamanlarını OCR süreleri ile ilişkilendirin. OCR süresi render süresiyle eşleşmeyen bir artış gösterdiğinde, darboğaz PDF oluşturma adımında değil, OCR.net API çağrısında veya ona yönelik ağ yolunuzdadır.
Sıradaki Adımlarınız Neler?
OCR.net ve IronPDF birleşik, .NET'te metin ayıklama ve aranabilir PDF oluşturmak için pratik bir yol sunar. Boru hattı, temel kullanım durumlarını kapsar: HTML'den PDF oluşturma, OCR uyumlu çözünürlükte sayfaları dışa aktarma, görüntüleri OCR.net'e gönderme ve sonuçları tamamen aranabilir bir belge haline getirme.
Bunu üretime taşırken önemli hususlar:
- Container ayarları: Görüntü boyutlarını yönetilebilir tutmak için IronPDF Slim paketlerini ve çok aşamalı Docker derlemelerini kullanın
- Kaynak Planlama: Belge boyutlarınıza ve eşzamanlılık hedefinize uygun bellek sınırları yapılandırın
- İzleme: Erken kötüleşmeyi yakalamak için Prometheus metriklerini IronPDF logları ile yan yana uygulayın
- Verim: OCR.net'in hız limitleri içinde çalışmak için async operasyonlar ve toplu kuyruk yönetimini kullanın
- Güvenilirlik: OCR.net API çağrısı etrafındaki üstel geri çekilme deneme mantığı ve devre kesiciler oluşturun
ücretsiz deneme lisansı ile başlayın, üretim lisansına taahhütte bulunmadan önce tüm işlem akışını uçtan uca test edin. Deneme su işaretlerini kaldırır ve tüm özellikleri açar, böylece benchmark sonuçlarınız üretim davranışını doğru bir şekilde yansıtır. Dağıtıma hazır olduğunuzda, IronPDF lisanslama seçeneklerini inceleyerek kullanım desene uygun lisans seviyesini bulun.
Sıkça Sorulan Sorular
OCR.net neleri yapar ve IronPDF ile nasıl bağlanır?
OCR.net, görüntü girdilerini kabul eden ve tanınan metin döndüren derin öğrenme OCR hizmetidir. IronPDF, PDF'ler üretir ve sayfalarını görüntüler olarak dışa aktarır. İki araç, görüntü katmanında bağlanır: IronPDF, sayfaları RasterizeToImageFiles() ile dışa aktarır, bu görüntüler metin çıkarmak için OCR.net'e gider ve IronPDF sonuçları arama yapılabilir bir PDF olarak yeniden birleştirir.
OCR için PDF sayfalarını dışa aktarırken hangi DPI kullanılmalıdır?
300 DPI, güvenilir OCR doğruluğu için standart minimumdur. 300 DPI'da, metin kenarları modelin benzer karakterleri ayırt edebileceği kadar keskindir. 150 DPI veya altında, yazı tipinde ve küçük baskıda doğruluk düşer. Kaynak belgeler çok küçük veya bozulmuş metin içerdiğinde yalnızca 600 DPI kullanın, çünkü 600 DPI'da her sayfa 4-5x daha büyük dosyalar üretir.
Üretimde OCR.net API oran limitlerini nasıl yönetirsiniz?
OCR.net ücretsiz hesapları saatte 50 isteğe izin verir. OCR çağrınıza üstel geri alma tekrar mantığı ekleyin: 429 yanıtını yakalayın, Math.Pow(2, attempt) saniye bekleyin ve yapılandırılmış maksimuma kadar yeniden deneyin. Daha yüksek bir hız için, ücretli bir OCR.net planına yükseltin veya bir arka plan çalışan hizmetiyle istekleri sıraya alın.
IronPDF, Linux üzerinde bir Docker konteyneri içinde çalışabilir mi?
Evet. Dockerfile'ınızın çalışma zamanı aşamasına libgdiplus, libc6-dev ve libx11-dev ekleyin. Son görüntüyü küçük tutmak için çok aşamalı oluşturma kullanın. IronPDF Slim paket varyantı, IronPDF Engine'i ayrı bir hizmet olarak çalıştırdığınızda paketlenmiş tarayıcı ikili dosyalarını hariç tutarak görüntü boyutunu daha da azaltır.
OCR sonuçlarından arama yapılabilir bir PDF nasıl oluşturulur?
OCR.net tarafından döndürülen metin dizilerini toplayın, her belge sayfası için sayfa sonu sınıfı ile HTML içine sarın ve HTML'yi ChromePdfRenderer.RenderHtmlAsPdfAsync() yöntemine iletin. Ortaya çıkan PDF, kullanıcılar ve arama motorları tarafından indekslenebilen seçilebilir, aranabilir metin içerir.
Bu iş akışı, çok dilli belgeleri destekliyor mu?
Evet. OCR.net 60'tan fazla dil destekler. İşleme başlamadan önce OCR.net arayüzü veya API çağrısında hedef dili seçin. IronPDF, UTF-8 çıktısını yerleşik olarak işlediği için Latin olmayan alfabelere sahip diller, oluşturulan aranabilir PDF'de doğru bir şekilde görüntülenir.
Üretimde OCR hattı performansını nasıl izliyorsunuz?
İşleme hizmetinize, toplam istekleri, süre dağılımlarını ve aktif işleri izlemek için Prometheus sayaçlar, histogramlar ve göstergeler ekleyin. Prometheus metriklerini IronPDF'in özel günlükleme özellikleri ile eşleştirerek, render sürelerini OCR API gecikmeleri ile ilişkilendirin ve nerede darboğazlar meydana geldiğini belirleyin.
OCR.net ile IronOCR arasındaki fark nedir?
OCR.net, API aracılığıyla yüklediğiniz görüntüleri işleyen bir dış web hizmetidir. IronOCR, Iron Software'a ait bir .NET kütüphanesidir ve harici API çağrılarına ihtiyaç duymadan, uygulamanız içinde yerel olarak OCR işlemini yürütür. IronOCR, çevrimdışı ortamlar veya daha düşük gecikme süresi ve OCR motoru üzerinde daha fazla kontrol gerektiğinde daha uygundur.




