IronOCR vs Iris OCR: Mühendislik Ekipleri Hangi OCR Çözümünü Seçmeli?
Azure Computer Vision's Read API, her 1.000 işlem için 1,00 $ maliyetindedir, Cognitive Services kaynağı sağlamak için bir Azure aboneliği gerektirir ve her OCR çağrısını üç adımlık bir asenkron süreçle zorlar: belgenizi BinaryData şeklinde serileştirin, AnalyzeAsync çağrısı yapın, ardından metni yeniden oluşturmak için iç içe bloklar ve satırları dolaşın. Bu, minimum işe yarar yoldur - ve çok sayfalı bir PDF'nin her sayfası ayrı bir işlem olarak sayılır. IronOCR bunların hepsini tek bir senkronize metot çağrısına indirir, tamamen kendi altyapınızda çalışır ve işlem başına ücretlendirilmez.
Azure Computer Vision'ı Anlamak
Azure Computer Vision, OCR'yi iki ana API aracılığıyla sunan Microsoft'un bulut tabanlı kognitif hizmetidir: Görüntü Analizi API'si (resimler için ImageAnalysisClient ile VisualFeatures.Read kullanarak) ve Azure Form Recognizer'ın PDF'ler için DocumentAnalysisClient. Her ikisi de Azure veri merkezlerinde barındırılan REST destekli hizmetlerdir ve sırasıyla Azure.AI.Vision.ImageAnalysis ve Azure.AI.FormRecognizer.DocumentAnalysis NuGet paketleri aracılığıyla erişilir.
Ana mimari özellikler:
- Öncelikli olarak bulut: Her OCR işlemi belge verilerini Microsoft yönetimli sunucularına HTTPS üzerinden iletir. Yerel işleme modu yoktur.
- Abonelik önkoşulu: Ekipler bir Azure hesabı oluşturmalı, Bilişsel Hizmetler kaynağı sağlamalı, bir uç nokta URL'si almalı ve tek bir satır OCR kodu yazmadan önce bir API anahtarı oluşturmalıdır.
- Sayfa başına işlem faturalandırması: Read API, görüntü veya PDF sayfası başına ücretlendirir. 50 sayfalık bir PDF, 50 işlem anlamına gelir. Fiyatlandırma, ilk milyon işlemler için 1,00 $'dan başlar, daha yüksek hacimlerde 0,60 $ ve ardından 0,40 $'a düşer.
- Ücretsiz katman sınırı: Ücretsiz katmanda ayda 5.000 işlemler - prototipler için yeterli, üretim iş yükleri için değil.
- PDF'ler için hizmet bölme: Temel görüntü OCR'i
ImageAnalysisClientkullanır. Tam PDF işleme, kendi uç noktası ve yapılandırması olan ayrı bir hizmet gerektirir — Form Recognizer'ınDocumentAnalysisClient. - Asenkron tasarım: Tüm Read API çağrıları asenkroniktir. Yerel OCR senkronize sonuçlar döndürebilir; bulut round-trip'leri yapamaz. Zincirdeki her çağrı metodunun
asyncolması gerekir. - Hız sınırları: S1 katmanı saniyede 10 işlem ile sınırlıdır. Yüksek hacimli toplu işleme ya sıraya alma mantığı ya da katman yükseltmelerini gerektirir.
- Hata yüzeyi alanı: Üretim kodu, HTTP 429 hız sınırı yanıtlarını, 5xx Azure hizmet hatalarını, ağ zaman aşımını, kimlik doğrulama hatalarını ve uç nokta erişilebilirliğini yönetmelidir - her biri ayrı tekrar deneme mantığı gerektirir.
Asenkron Ankette Kalıp
Read API'nin asenkron gereksinimi yapısal kod sonuçları oluşturur. AnalyzeAsync kullanarak yapılan görüntü analizi derhal geri döner ancak await gerektirir. Form Recognizer aracılığıyla PDF işleme, işlemin bitmesini engellemek amacıyla WaitUntil.Completed veya gerçek asenkron davranış için UpdateStatusAsync ile özel sorgulama gerektirir. Sonuç hiyerarşisi daha sonra iç içe döngüler yoluyla blokları, satırları ve kelimeleri dolaşmayı gerektirir:
// Azure Computer Vision: image OCR
// Requires: Azure subscription + Cognitive Services resource + endpoint + API key
using Azure;
using Azure.AI.Vision.ImageAnalysis;
public class AzureOcrService
{
private readonly ImageAnalysisClient _client;
public AzureOcrService(string endpoint, string apiKey)
{
// Endpoint and key provisioned in Azure portal
_client = new ImageAnalysisClient(
new Uri(endpoint),
new AzureKeyCredential(apiKey));
}
public async Task<string> ExtractTextAsync(string imagePath)
{
// Document is uploaded to Microsoft Azure
using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(
imageData,
VisualFeatures.Read);
var text = new StringBuilder();
foreach (var block in result.Value.Read.Blocks)
{
foreach (var line in block.Lines)
{
text.AppendLine(line.Text);
}
}
return text.ToString();
}
}
// Azure Computer Vision: image OCR
// Requires: Azure subscription + Cognitive Services resource + endpoint + API key
using Azure;
using Azure.AI.Vision.ImageAnalysis;
public class AzureOcrService
{
private readonly ImageAnalysisClient _client;
public AzureOcrService(string endpoint, string apiKey)
{
// Endpoint and key provisioned in Azure portal
_client = new ImageAnalysisClient(
new Uri(endpoint),
new AzureKeyCredential(apiKey));
}
public async Task<string> ExtractTextAsync(string imagePath)
{
// Document is uploaded to Microsoft Azure
using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(
imageData,
VisualFeatures.Read);
var text = new StringBuilder();
foreach (var block in result.Value.Read.Blocks)
{
foreach (var line in block.Lines)
{
text.AppendLine(line.Text);
}
}
return text.ToString();
}
}
Imports Azure
Imports Azure.AI.Vision.ImageAnalysis
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Public Class AzureOcrService
Private ReadOnly _client As ImageAnalysisClient
Public Sub New(endpoint As String, apiKey As String)
' Endpoint and key provisioned in Azure portal
_client = New ImageAnalysisClient(
New Uri(endpoint),
New AzureKeyCredential(apiKey))
End Sub
Public Async Function ExtractTextAsync(imagePath As String) As Task(Of String)
' Document is uploaded to Microsoft Azure
Using stream = File.OpenRead(imagePath)
Dim imageData = BinaryData.FromStream(stream)
Dim result = Await _client.AnalyzeAsync(
imageData,
VisualFeatures.Read)
Dim text = New StringBuilder()
For Each block In result.Value.Read.Blocks
For Each line In block.Lines
text.AppendLine(line.Text)
Next
Next
Return text.ToString()
End Using
End Function
End Class
PDF işleme karmaşıklığı daha da artırır — kendi uç noktası olan ayrı bir DocumentAnalysisClient, AnalyzeDocumentAsync ile WaitUntil.Completed ve farklı bir sonuç şekli, result.Pages ve page.Lines kullanarak .Content yerine .Text erişimi.
IronOCR'u Anlamak
IronOCR, .NET için tek bir NuGet paketi olarak sunulan ticari bir yerinde OCR kütüphanesidir. Bunun içinde optimize edilmiş bir Tesseract 5 motorunu otomatik ön işlemeli, yerel PDF desteği ile ve hiçbir bulut kimlik bilgisi gerektirmeyen, uç nokta yapılandırmasına ihtiyaç duymayan ve asenkron tesisat içermeyen senkron bir API ile sarmalar.
Anahtar özellikler:
- Tekil NuGet dağıtımı:
dotnet add package IronOcrher şeyi — OCR motoru, yerel ikili dosyalar ve İngilizce dil verisini kurar. Hiçbir tessdata klasörleri, ayrı yerel kütüphane indirmeleri mevcut değildir. - Süresiz lisanslama: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited — abonelik değil, tek seferlik satın alım. Herhangi bir hacim için belge başına ücret yoktur.
- Yerel işleme: Tüm OCR süreç içerisin doğal olarak çalışır. Belgeleriniz asla altyapınızı terk etmez.
- Otomatik ön işleme: Eğrilik düzelteci, Gürültü Azaltma, Kontrast, Binariz ve çözünürlük artırma otomatik olarak veya
OcrInputüzerinde açık filtre çağrıları üzerinden uygulanır. - Yerel PDF desteği:
IronTesseract.Read("document.pdf"), şifre korumalı dosyalar dahil olmak üzere PDF'leri doğrudan işler, ayrı bir hizmet veya ek bir NuGet paketi gerektirmez. - 125+ dil: Ayrı dil NuGet paketleri aracılığıyla yüklenir —
IronOcr.Languages.French,IronOcr.Languages.ChineseSimplified, vb. — manuel tessdata yönetimi olmadan. - Eşzamanlı kullanım için güvenli:
IronTesseracteşzamanlı kullanılmak için güvenlidir. Toplu iş yükleri, ek senkronizasyon gerektirmedenParallel.ForEachkullanabilir. - Yapılandırılmış çıktı:
OcrResult, her eleman için koordinatlar, güven skorları ve sınırlayıcı dikdörtgenler içeren.Pages,.Paragraphs,.Lines,.Wordsve.Barcodeskoleksiyonlarını sunar.
Özellik Karşılaştırması
| Özellik | Azure Computer Vision | IronOCR |
|---|---|---|
| İşleme yeri | Microsoft Azure bulutu | Yerel, yerinde |
| Fiyatlandırma modeli | İşlem başına (mevcut fiyatlandırma için Microsoft ile iletişime geçin) | Süresiz lisans ($999+) |
| İnternet gerekli mi | Evet, her zaman | Hayır |
| PDF desteği | Form Recognizer aracılığıyla (ayrı) | Yerel, yerleşik |
| Kurulum karmaşıklığı | Azure hesabı + kaynak + anahtarlar | NuGet yükle |
| API deseni | Asenkron (bulut G/Ç) | Senkron (yerel) |
| Hız sınırları | 10 TPS (S1) | Sadece donanım kısıtlı |
Ayrıntılı Özellik Karşılaştırması
| Özellik | Azure Computer Vision | IronOCR |
|---|---|---|
| Kurulum ve dağıtım | ||
| NuGet yükle | Birden fazla paket | dotnet add package IronOcr |
| Kimlik bilgisi yapılandırması | Uç nokta URL + API anahtarı | Lisans anahtarı dizesi |
| Azure aboneliği gerektirir | Evet | Hayır |
| İnternet bağlantısı gereklidir | Evet, her istekte | Hayır |
| İzole dağıtım | İmkansız | Tam destekli |
| Docker dağıtımı | Dışa doğru ağ gerektiriyor | Kendi içinde tamamlanmış |
| OCR yetenekleri | ||
| Görüntü OCR | Evet (AnalyzeAsync) |
Evet (Read()) |
| PDF OCR | Form Recognizer aracılığıyla (ek hizmet) | Yerel, yerleşik |
| Şifre korumalı PDF | Form Recognizer aracılığıyla | Tek Password: parametresi |
| Çok sayfalı PDF (sayfa başına ücretlendirme) | Evet — her sayfa = 1 işlem | Sayfa başına maliyet yok |
| Aranabilir PDF çıktısı | Manuel yapı | SaveAsSearchablePdf() |
| Otomatik ön işlem | Sınırlı sunucu tarafı | Deskew, DeNoise, Kontrast, Binarize |
| OCR sırasında barkod okuma | Sınırlı | ReadBarCodes = true |
| Bölge bazlı OCR | Doğrudan değil (elle kırpın) | CropRectangle üzerinde OcrInput |
| Dil desteği | ||
| Dil sayımı | 164+ | 125+ |
| Dil kurulumu | Hizmet seviyesi (bulut bununla ilgilenir) | NuGet dil paketleri |
| Birden fazla dili eşzamanlı destekleme | Evet | Evet (AddSecondaryLanguage) |
| Çıktı ve yapı | ||
| Düz metin | Evet | Evet |
| Kelime başına sınır kutuları | Poligon bazlı | Dikdörtgen bazlı |
| Kelime başına güvenilirlik puanları | Evet | Evet (0-100 ölçeği) |
| Yapılandırılmış hiyerarşi | Bloklar / Satırlar / Kelimeler | Sayfalar / Paragraflar / Satırlar / Kelimeler |
| hOCR içeri aktarma | Hayır | Evet (SaveAsHocrFile) |
| Maliyet ve uyumluluk | ||
| Belge başına maliyet | Sayfa başına $0,001 (Form Recognizer) | None |
| HIPAA uyumlu dağıtım | Karmaşık (BAA + bulut) | Basit (sadece yerel) |
| ITAR uygunluğu | Kontrollü veri için değil | Tamamen yerinde |
| FedRAMP izole | Hayır | Evet |
| Güvenilirlik | ||
| Ağ arıza modları | Evet | None |
| Hız sınırı hataları | Evet (10 TPS'de 429) | None |
| Hizmet kullanılabilirliği SLA | 99.9% (Azure) | Altyapınız |
Maliyet Modeli
Azure Computer Vision ve IronOCR arasındaki işlem fiyat farkı üretim hacminde belirleyici olur. Azure kaynak dosyalarındaki maliyet hesaplayıcı matematiği açıkça gösterir.
Azure Computer Vision Yaklaşımı
Azure, hacme dayalı kademeli fiyatlandırma kullanarak işlem başına fatura keser. Mevcut oranlar için Azure Computer Vision fiyatlandırma sayfasına bakın. Her PDF sayfası bir işlemdir. 10 sayfalık bir PDF, 10 faturalandırılabilir çağrı anlamına gelir. Aylık 5.000 işlem içeren ücretsiz bir katman mevcuttur.
// Azure bills per transaction — costs grow with every document processed
// Free tier: 5,000 transactions/month
// Volume tiers apply at higher usage levels
// (Every PDF page multiplies the bill)
// Azure bills per transaction — costs grow with every document processed
// Free tier: 5,000 transactions/month
// Volume tiers apply at higher usage levels
// (Every PDF page multiplies the bill)
' Azure bills per transaction — costs grow with every document processed
' Free tier: 5,000 transactions/month
' Volume tiers apply at higher usage levels
' (Every PDF page multiplies the bill)
Orta ve yüksek belge hacimlerinde,IronOCR süresiz lisansı, Azure işlem maliyetlerine kıyasla hızla kendini amorti eder; bundan sonra her ek belge tasarruftur.
IronOCR Yaklaşımı
IronOCR'un fiyatlandırma modeli tek bir sayıdır. NuGet paketini yükleyin, lisans anahtarını ayarlayın ve sayaç tetiklemeden herhangi bir hacmi işleyin:
// Install: dotnet add package IronOcr
// License: one-time, perpetual
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
var ocr = new IronTesseract();
// Process 1 document or 1 million — same cost
foreach (var path in documentPaths)
{
var result = ocr.Read(path);
Console.WriteLine($"Processed: {path}");
}
// Multi-page PDFs — no per-page billing
foreach (var path in pdfPaths)
{
// 1 page or 100 pages, still no extra cost
var result = ocr.Read(path);
Console.WriteLine($"{path}: {result.Pages.Length} pages processed");
}
// Install: dotnet add package IronOcr
// License: one-time, perpetual
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
var ocr = new IronTesseract();
// Process 1 document or 1 million — same cost
foreach (var path in documentPaths)
{
var result = ocr.Read(path);
Console.WriteLine($"Processed: {path}");
}
// Multi-page PDFs — no per-page billing
foreach (var path in pdfPaths)
{
// 1 page or 100 pages, still no extra cost
var result = ocr.Read(path);
Console.WriteLine($"{path}: {result.Pages.Length} pages processed");
}
' Install: dotnet add package IronOcr
' License: one-time, perpetual
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
Dim ocr As New IronTesseract()
' Process 1 document or 1 million — same cost
For Each path In documentPaths
Dim result = ocr.Read(path)
Console.WriteLine($"Processed: {path}")
Next
' Multi-page PDFs — no per-page billing
For Each path In pdfPaths
' 1 page or 100 pages, still no extra cost
Dim result = ocr.Read(path)
Console.WriteLine($"{path}: {result.Pages.Length} pages processed")
Next
Sayaç yok, kullanım takibi yok, bütçelendirme uyarılarına gerek yok. İlk günden itibaren tahmin edilebilir maliyetler. Tam bir başlangıçtan başlamadan walkthrough için görüntülerden metin okuma öğreticisine bakın.
Veri Egemenliği ve Çevrimdışı Yetenek
Bulut OCR'nin uyum etkileri teorik değildir.Azure Computer Visiontarafından işlenen her belge, örgütsel bir sınırdan geçer. Azure READMe, etkilenmiş belirli düzenleyici çerçeveleri belgelendirir: HIPAA kapsamında olan kuruluşlar, ITAR savunma yüklenicileri, CMMC sertifikalı kuruluşlar, GDPR tarafından düzenlenen Avrupa şirketleri ve tamamen izole ağlarda herhangi bir operasyon.
Azure Computer Vision Yaklaşımı
Bölgesel uç nokta seçimleri ve imzalı İş Ortağı Sözleşmesi ile bile veri akışı sabittir:
// Azure: data flow for every OCR call
// 1. Your application reads the file
// 2. File is serialized to BinaryData
// 3. HTTPS transmission to Azure data center
// 4. Microsoft infrastructure processes the document
// 5. Result returned over HTTPS
// 6. You parse the result
using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream); // Document in memory
// This call transmits your document to Azure
var result = await _client.AnalyzeAsync(
imageData, // Document leaves your network here
VisualFeatures.Read);
// Azure: data flow for every OCR call
// 1. Your application reads the file
// 2. File is serialized to BinaryData
// 3. HTTPS transmission to Azure data center
// 4. Microsoft infrastructure processes the document
// 5. Result returned over HTTPS
// 6. You parse the result
using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream); // Document in memory
// This call transmits your document to Azure
var result = await _client.AnalyzeAsync(
imageData, // Document leaves your network here
VisualFeatures.Read);
Imports System.IO
Imports Azure.AI.FormRecognizer.DocumentAnalysis
' Azure: data flow for every OCR call
' 1. Your application reads the file
' 2. File is serialized to BinaryData
' 3. HTTPS transmission to Azure data center
' 4. Microsoft infrastructure processes the document
' 5. Result returned over HTTPS
' 6. You parse the result
Using stream As FileStream = File.OpenRead(imagePath)
Dim imageData As BinaryData = BinaryData.FromStream(stream) ' Document in memory
' This call transmits your document to Azure
Dim result = Await _client.AnalyzeAsync(
imageData, ' Document leaves your network here
VisualFeatures.Read)
End Using
İzole bir ağ, uç nokta URL'sine hiçbir şekilde ulaşamaz - Azure Computer Vision'ın çevrimdışı modu yoktur. Güvenli Kompartmanlı Bilgi Tesisleri, askeri tesisler veya izole işleme ortamları işleten kuruluşlar için hizmet, fiyatlandırma dikkate alındığında bile mimari olarak uyumsuzdur.
IronOCR Yaklaşımı
IronOCR belgeleri çağrıldığı süreç içinde işler. Hiçbir dış bağlantı yoktur.
// IronOCR: data never leaves your infrastructure
using IronOcr;
public class OnPremiseOcrService
{
private readonly IronTesseract _ocr = new IronTesseract();
public string ExtractText(string imagePath)
{
// Runs entirely in-process
//Hayırnetwork call, no serialization to external endpoint
var result = _ocr.Read(imagePath);
return result.Text;
}
public string ExtractFromPdf(string pdfPath)
{
// PDF processed entirely on-premise, native support
using var input = new OcrInput();
input.LoadPdf(pdfPath);
return _ocr.Read(input).Text;
}
public string ExtractFromEncryptedPdf(string pdfPath, string password)
{
// Encrypted PDFs also stay local
using var input = new OcrInput();
input.LoadPdf(pdfPath, Password: password);
return _ocr.Read(input).Text;
}
}
// IronOCR: data never leaves your infrastructure
using IronOcr;
public class OnPremiseOcrService
{
private readonly IronTesseract _ocr = new IronTesseract();
public string ExtractText(string imagePath)
{
// Runs entirely in-process
//Hayırnetwork call, no serialization to external endpoint
var result = _ocr.Read(imagePath);
return result.Text;
}
public string ExtractFromPdf(string pdfPath)
{
// PDF processed entirely on-premise, native support
using var input = new OcrInput();
input.LoadPdf(pdfPath);
return _ocr.Read(input).Text;
}
public string ExtractFromEncryptedPdf(string pdfPath, string password)
{
// Encrypted PDFs also stay local
using var input = new OcrInput();
input.LoadPdf(pdfPath, Password: password);
return _ocr.Read(input).Text;
}
}
Imports IronOcr
Public Class OnPremiseOcrService
Private ReadOnly _ocr As New IronTesseract()
Public Function ExtractText(imagePath As String) As String
' Runs entirely in-process
' No network call, no serialization to external endpoint
Dim result = _ocr.Read(imagePath)
Return result.Text
End Function
Public Function ExtractFromPdf(pdfPath As String) As String
' PDF processed entirely on-premise, native support
Using input As New OcrInput()
input.LoadPdf(pdfPath)
Return _ocr.Read(input).Text
End Using
End Function
Public Function ExtractFromEncryptedPdf(pdfPath As String, password As String) As String
' Encrypted PDFs also stay local
Using input As New OcrInput()
input.LoadPdf(pdfPath, Password:=password)
Return _ocr.Read(input).Text
End Using
End Function
End Class
Docker dağıtımı, dışa ağ gerekliliklerini tamamen ortadan kaldırır.
FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y libgdiplus
WORKDIR /app
COPY --from=build /app/publish .
ENV IRONOCR_LICENSE=your-key
# No Azure endpoint, no API key, no outbound network rules needed
ENTRYPOINT ["dotnet", "YourApp.dll"]
HIPAA kapsamında olan kuruluşlar, ITAR uyumluluğu veya FedRAMP izole senaryoları için,IronOCR üçüncü taraf veri işlemcisi riskini kategorik olarak ortadan kaldırır. IronOCR'un Azure altyapısında belgeleri işlem örneğine yerel tutarken çalıştırılması için Azure dağıtım kılavuzuna ve konteyner yapılandırması için Docker dağıtım kılavuzuna bakın.
Senkronize ve Asenkron API Tasarımı
Azure Read API, senkron olamayacak kadar asenkron olduğundan - bulut G/Ç ağ gecikmesi vardır.IronOCR yerel olarak işler ve eşzamanlı olarak dönebilir, bu da çağrı kodunu basitleştirir, yığın boyunca async yayılmasını ortadan kaldırır ve ağ G/Ç'sinin yaratıcı olduğu hata modlarını kaldırır.
Azure Computer Vision Yaklaşımı
Her Azure OCR çağrısı await gerektirir. Üretim kodu, 429 hız sınırı hataları ve 5xx hizmet hataları için yeniden deneme mantığı ekler. Minimal bir üretim uygulaması şöyle görünür:
public async Task<string> RobustExtractAsync(string imagePath)
{
const int maxRetries = 3;
int attempt = 0;
while (attempt < maxRetries)
{
try
{
using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(
imageData,
VisualFeatures.Read);
return string.Join("\n",
result.Value.Read.Blocks
.SelectMany(b => b.Lines)
.Select(l => l.Text));
}
catch (RequestFailedException ex) when (ex.Status == 429)
{
// Rate limited — Azure caps S1 at 10 TPS
attempt++;
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
}
catch (RequestFailedException ex) when (ex.Status >= 500)
{
// Azure service error
attempt++;
await Task.Delay(TimeSpan.FromSeconds(1));
}
catch (RequestFailedException ex)
{
// Client error — bad credential, invalid endpoint
throw new Exception($"Azure OCR failed: {ex.Message}", ex);
}
}
throw new Exception("Max retries exceeded for Azure OCR");
}
public async Task<string> RobustExtractAsync(string imagePath)
{
const int maxRetries = 3;
int attempt = 0;
while (attempt < maxRetries)
{
try
{
using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(
imageData,
VisualFeatures.Read);
return string.Join("\n",
result.Value.Read.Blocks
.SelectMany(b => b.Lines)
.Select(l => l.Text));
}
catch (RequestFailedException ex) when (ex.Status == 429)
{
// Rate limited — Azure caps S1 at 10 TPS
attempt++;
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
}
catch (RequestFailedException ex) when (ex.Status >= 500)
{
// Azure service error
attempt++;
await Task.Delay(TimeSpan.FromSeconds(1));
}
catch (RequestFailedException ex)
{
// Client error — bad credential, invalid endpoint
throw new Exception($"Azure OCR failed: {ex.Message}", ex);
}
}
throw new Exception("Max retries exceeded for Azure OCR");
}
Imports System.IO
Imports System.Threading.Tasks
Public Async Function RobustExtractAsync(imagePath As String) As Task(Of String)
Const maxRetries As Integer = 3
Dim attempt As Integer = 0
While attempt < maxRetries
Try
Using stream = File.OpenRead(imagePath)
Dim imageData = BinaryData.FromStream(stream)
Dim result = Await _client.AnalyzeAsync(
imageData,
VisualFeatures.Read)
Return String.Join(vbCrLf,
result.Value.Read.Blocks _
.SelectMany(Function(b) b.Lines) _
.Select(Function(l) l.Text))
End Using
Catch ex As RequestFailedException When ex.Status = 429
' Rate limited — Azure caps S1 at 10 TPS
attempt += 1
Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
Catch ex As RequestFailedException When ex.Status >= 500
' Azure service error
attempt += 1
Await Task.Delay(TimeSpan.FromSeconds(1))
Catch ex As RequestFailedException
' Client error — bad credential, invalid endpoint
Throw New Exception($"Azure OCR failed: {ex.Message}", ex)
End Try
End While
Throw New Exception("Max retries exceeded for Azure OCR")
End Function
Bu, savunmasız aşırı mühendislik değildir — üretimdeki herhangi bir Azure API çağrısı için gereken minimumdur. Hız sınırları, hizmet kesintileri ve geçici hatalar, her Azure kullanıcısının karşılaşacağı gerçek koşullardır.
IronOCR Yaklaşımı
Yerel işleme, ağ hata yüzeyini ortadan kaldırır. Hata işleme kapsamı dosya sistemi ve giriş doğrulaması ile sınırlandırılır:
//Hayırasync required — local processing returns synchronously
public string ExtractText(string imagePath)
{
var result = new IronTesseract().Read(imagePath);
return result.Text;
}
// One line for simple cases
public string OneLineOcr(string imagePath)
{
return new IronTesseract().Read(imagePath).Text;
}
// Confidence-aware extraction
public (string Text, double Confidence) ExtractWithConfidence(string imagePath)
{
var result = new IronTesseract().Read(imagePath);
return (result.Text, result.Confidence);
}
//Hayırasync required — local processing returns synchronously
public string ExtractText(string imagePath)
{
var result = new IronTesseract().Read(imagePath);
return result.Text;
}
// One line for simple cases
public string OneLineOcr(string imagePath)
{
return new IronTesseract().Read(imagePath).Text;
}
// Confidence-aware extraction
public (string Text, double Confidence) ExtractWithConfidence(string imagePath)
{
var result = new IronTesseract().Read(imagePath);
return (result.Text, result.Confidence);
}
Imports IronTesseract
Public Class OcrProcessor
' Hayırasync required — local processing returns synchronously
Public Function ExtractText(imagePath As String) As String
Dim result = New IronTesseract().Read(imagePath)
Return result.Text
End Function
' One line for simple cases
Public Function OneLineOcr(imagePath As String) As String
Return New IronTesseract().Read(imagePath).Text
End Function
' Confidence-aware extraction
Public Function ExtractWithConfidence(imagePath As String) As (Text As String, Confidence As Double)
Dim result = New IronTesseract().Read(imagePath)
Return (result.Text, result.Confidence)
End Function
End Class
Hiç RequestFailedException, tekrar deneme döngüleri ya da toplu işler için Task.WhenAll koordinasyonu yok. Eğer asenkron bir kontrol hattı ile entegrasyon için asenkron gerekiyorsa, Task.Run(() => ocr.Read(path)) yapısal değişiklikler gerektirmeden eşzamanlı çağrıyı sarar. IronTesseract API referansı tam senkronize arayüzü kapsar. Gerçekten asenkron desenlere ihtiyaç duyan iş yükleri için ise,IronOCR ayrıca özel bir asenkron OCR kılavuzu sunar.
Kimlik Bilgisi ve Uç Nokta Yapılandırması
Azure Computer Vision, ilk testten önce altyapı sağlanmasını gerektirir. IronOCR, bir NuGet yüklemeye ve isteğe bağlı olarak bir lisans anahtar dizesine ihtiyaç duyar.
Azure Computer Vision Yaklaşımı
Herhangi bir OCR kodu yazılmadan önce Azure kurulum dizisi:
- Henüz yoksa bir Azure hesabı oluşturun.
- Azure portalına gidin ve bir Bilişsel Hizmetler kaynağı (veya bir Azure AI Hizmetleri kaynağı) oluşturun.
- Bir fiyatlandırma katmanı ve bölge seçin.
- Uç nokta URL'sini kopyalayın (format:
https://your-resource.cognitiveservices.azure.com/). - İki API anahtarından birini kopyalayın.
- Her iki değeri güvenli bir şekilde saklayın — ortam değişkenlerinde, Azure Key Vault'ta veya
appsettings.json(sadece üretim dışı). Azure.AI.Vision.ImageAnalysisNuGet aracılığıyla kurun.- Uç nokta ve kimlik bilgisi ile
ImageAnalysisClientbaşlatın.
PDF işleme için, farklı bir NuGet paketi (Azure.AI.FormRecognizer) ve farklı bir istemci sınıfı (DocumentAnalysisClient) ile bir Form Recognizer kaynağı için adım 2-8'i tekrar edin.
appsettings.json uç nokta ve anahtarı saklar:
{
"Azure": {
"ComputerVision": {
"Endpoint": "https://your-resource.cognitiveservices.azure.com/",
"ApiKey": "your-api-key"
}
}
}
API anahtarlarının yenilenmesi, kimlik bilgisi süresinin dolması ve ortamlar (geliştirme, önceliklendirme, üretim) arasında uç nokta URL'lerinin yönetilmesi, yerel işleme ile eşdeğer olmayan sürekli operasyonel görevlerdir.
IronOCR Yaklaşımı
IronTesseract kurulum kılavuzu, kurulumu iki adıma indirir:
dotnet add package IronOcr
// Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Then use immediately — no endpoint, no credential rotation, no portal setup
var text = new IronTesseract().Read("document.jpg").Text;
// Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Then use immediately — no endpoint, no credential rotation, no portal setup
var text = new IronTesseract().Read("document.jpg").Text;
Imports System
' Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
' Then use immediately — no endpoint, no credential rotation, no portal setup
Dim text As String = (New IronTesseract()).Read("document.jpg").Text
Lisans anahtarı statik bir dizgedir. Her istekte sona ermez, döndürülemez ve aktivasyon sonrasında doğrulama için geri çağrı yapmaz. Dağıtım ortamları, OCR'nin çalışması için çıkış ağ güvenlik duvarı kurallarına ihtiyaç duymaz.
API Eşleme Başvurusu
| Azure Computer Vision | IronOCR Karşılığı |
|---|---|
ImageAnalysisClient |
IronTesseract |
new AzureKeyCredential(apiKey) |
IronOcr.License.LicenseKey = key |
client.AnalyzeAsync(data, VisualFeatures.Read) |
ocr.Read(imagePath) |
BinaryData.FromStream(stream) |
input.LoadImage(stream) |
result.Value.Read.Blocks |
result.Paragraphs |
block.Lines |
result.Lines |
line.Text |
line.Text |
line.Words |
result.Words |
word.Confidence |
word.Confidence (0-100 ölçeği, Azure'un 0-1'ine karşı) |
word.BoundingPolygon |
word.X, word.Y, word.Width, word.Height |
DocumentAnalysisClient |
IronTesseract + OcrInput |
AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-read", stream) |
ocr.Read(input) ile input.LoadPdf(path) |
operation.Value.Pages |
result.Pages |
page.Lines / line.Content |
result.Lines / line.Text |
RequestFailedException (429 tekrar deneme) |
Geçerli değil — hız sınırları yok |
RequestFailedException (500 tekrar deneme) |
Geçerli değil — hizmet hataları yok |
Ekiplerin Azure Computer Vision'dan IronOCR'ye Geçmeyi Düşündüğünde
Uyumluluk Gereksinimleri Bulut İşlemlerini Engeller
Belge yönetim sistemi geliştiren bir sağlık sektöründe Bağımsız Yazılım Satıcısı, hızlı entegrasyon sağladığı içinAzure Computer Visionile başlar. Sonrasında, bir hastane sistemi ve iki sorusu olan bir HIPAA güvenlik görevlisi olan ilk kurumsal müşteri gelir: "Kişisel Sağlık Bilgilerimiz nereye gider?" ve "Üçüncü tarafı kapsayan İş Ortağı Sözleşmesini bize gösterebilir misiniz?" Azure bir BAA'ya sahiptir, ancak "Microsoft veri merkezleri" olan ilk sorunun cevabı, uzun bir güvenlik incelemesi, Microsoft'un denetim raporları için istek ve sözleşmeyi geciktiren bir uyum zaman çizelgesi tetikler. IronOCR'ye geçmek sorunu tamamen ortadan kaldırır. Kişisel Sağlık Bilgileri müşterinin ortamını asla terk etmez. Uyum kapsamı müşterinin kendi organizasyonu içinde kalır.
Hacim Artışı, İşlem Başına Fiyatlandırmayı Sürdürülemez Yapıyor
Bir operasyon ekibi, ayda 5.000 belge ile fatura işleme boru hattını başlatır — Azure'un ücretsiz katmanı rahatbir şekilde içindedir Hacim arttıkça, işlem başına maliyetler her işlenen belge ile birlikte birikir.IronOCR Professional ($2,999), belgeler başına ücret olmaksızın tek seferlik bir satın alımdır. Hatta ölçülü hacim artışını projelendiren ekipler, hızlı bir şekilde denge noktasına ulaşır, sonrası ise her ek doküman tasarruf olur.
Ağ Gecikmesi İşleme SLA'larını Etkiler
Bir doküman işleme hizmeti, 2 saniyelik uçtan uca SLA'yı hedefler. Azure Computer Vision, aynı bölgedeki çağrılar için 200-800ms ve çapraz bölge dağıtımları için 500-2000ms ağ gecikmesi ekler — OCR hesaplamasının kendisinden önce. Yük altında, S1'deki 10 TPS hız sınırı sıraya sokmaya zorlar, bu da gecikmeyi daha da artırır. IronOCR, 300 DPI'lik bir resmi herhangi bir sıraya sokmadan, hız sınırı olmadan ve ağ geçişi olmadan 100-400ms'de işlemeye başlar. SLA, Azure hizmet sağlığı veya ağ koşullarına değil, yalnızca donanıma bağlı olduğu için tahmin edilebilir hale gelir.
İzole Altyapı Gereksinimleri
Savunma yüklenicileri, istihbarat ajansları ve kritik altyapı operatörleri, tasarım gereği internet bağlantısı olmayan ağlarda iş yükleri çalıştırır. Azure Computer Vision, bu ortamlarla teknik olarak uyumsuzdur — uç nokta erişilemez. Bu sektörlerdeki ekipler, kendine yeten bir ikili dosya olarak dağıtılan, dış bağlantı gereksinimi olmayan ve açıkça bulut veri iletimini yasaklayan güvenlik incelemelerinden geçen bir kütüphaneye ihtiyaç duyar. IronOCR'un Linux dağıtımı ve Docker desteği, kısıtlı ortamlarla değişiklik yapmadan dağıtılabilir hale getirir.
Çoklu Ortam Dağıtımını Basitleştirme
Bir SaaS uygulaması için geliştirme, hazırlık ve üretim ortamlarını yöneten bir ekip, üç Azure Bilişsel Hizmetler kaynağı, üç dizi API anahtarı ve güvenli depolama, döndürme politikaları ve ortama özgü yapılandırma gerektiren üç uç nokta URL'si taşır. Her bir dağıtım ortamının Azure'a çıkış ağı erişimine ihtiyacı vardır. IronOCR, ortam başına konfigürasyonu bir ortam değişkenine (IRONOCR_LICENSE) indirir, ağ erişimi gereksinimini ortadan kaldırır ve ortamlardaki kimlik bilgisi yönetiminin operasyonel yükünü kaldırır.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
Asenkronu Senkron Desene Dönüştürme
Azure Tüketici kodu gereği async .IronOCR asenkron gerektirmez, ancak geçiş mekaniktir. async Task<string> dönüş türlerini string ile değiştirin, await ve async anahtar kelimelerini kaldırın ve tekrar deneme döngüsünü silin. Eğer çağrı metodu asenkron kalması gereken bir ASP.NET denetleyici veya servis ise,IronOCR çağrısını Task.Run ile sarın:
// Before: Azure async chain
public async Task<string> ReadTextAsync(string imagePath)
{
using var stream = File.OpenRead(imagePath);
var data = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(data, VisualFeatures.Read);
return string.Join("\n", result.Value.Read.Blocks
.SelectMany(b => b.Lines)
.Select(l => l.Text));
}
// After:IronOCR synchronous
public string ReadText(string imagePath)
{
return new IronTesseract().Read(imagePath).Text;
}
// If async signature must be preserved for interface compatibility
public Task<string> ReadTextAsync(string imagePath)
{
return Task.Run(() => new IronTesseract().Read(imagePath).Text);
}
// Before: Azure async chain
public async Task<string> ReadTextAsync(string imagePath)
{
using var stream = File.OpenRead(imagePath);
var data = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(data, VisualFeatures.Read);
return string.Join("\n", result.Value.Read.Blocks
.SelectMany(b => b.Lines)
.Select(l => l.Text));
}
// After:IronOCR synchronous
public string ReadText(string imagePath)
{
return new IronTesseract().Read(imagePath).Text;
}
// If async signature must be preserved for interface compatibility
public Task<string> ReadTextAsync(string imagePath)
{
return Task.Run(() => new IronTesseract().Read(imagePath).Text);
}
Imports System.IO
Imports System.Threading.Tasks
Imports System.Linq
' Before: Azure async chain
Public Async Function ReadTextAsync(imagePath As String) As Task(Of String)
Using stream = File.OpenRead(imagePath)
Dim data = BinaryData.FromStream(stream)
Dim result = Await _client.AnalyzeAsync(data, VisualFeatures.Read)
Return String.Join(vbLf, result.Value.Read.Blocks _
.SelectMany(Function(b) b.Lines) _
.Select(Function(l) l.Text))
End Using
End Function
' After: IronOCR synchronous
Public Function ReadText(imagePath As String) As String
Return New IronTesseract().Read(imagePath).Text
End Function
' If async signature must be preserved for interface compatibility
Public Function ReadTextAsync(imagePath As String) As Task(Of String)
Return Task.Run(Function() New IronTesseract().Read(imagePath).Text)
End Function
Güven Ölçeği Normalizasyonu
Azure Computer Vision, kelime güvenini 0 ila 1 arasında bir float olarak döndürür.IronOCR ise güveni 0-100 ölçeğinde bir double olarak döndürür. Azure güven değerlerine bağlı tüm kodların ayarlama yapması gerekir:
// Azure: confidence is 0.0 - 1.0
foreach (var word in line.Words)
{
if (word.Confidence > 0.85f) { /* high confidence */ }
}
// IronOCR: confidence is 0 - 100
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
if (word.Confidence > 85.0) { /* equivalent threshold */ }
}
Console.WriteLine($"Overall: {result.Confidence}%");
// Azure: confidence is 0.0 - 1.0
foreach (var word in line.Words)
{
if (word.Confidence > 0.85f) { /* high confidence */ }
}
// IronOCR: confidence is 0 - 100
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
if (word.Confidence > 85.0) { /* equivalent threshold */ }
}
Console.WriteLine($"Overall: {result.Confidence}%");
Imports IronOcr
' Azure: confidence is 0.0 - 1.0
For Each word In line.Words
If word.Confidence > 0.85F Then
' high confidence
End If
Next
' IronOCR: confidence is 0 - 100
Dim result = New IronTesseract().Read(imagePath)
For Each word In result.Words
If word.Confidence > 85.0 Then
' equivalent threshold
End If
Next
Console.WriteLine($"Overall: {result.Confidence}%")
OcrResult API referansı güven ölçeği dahil olmak üzere tüm sonuç özelliklerini belgeler. güven skorlarıyla ilgili rehber, eşik seçimini ve her bir öğe yorumunu kapsar.
PDF İşleme Hizmetinin Birleştirilmesi
Azure, resim OCR ve PDF OCR'yi iki ayrı hizmete böler, ayrı istemciler, NuGet paketleri ve uç nokta yapılandırmaları ile. Göç, her iki yolu tek bir IronTesseract örneğinde birleştirmek anlamına gelir. OcrInput.LoadPdf metodu bir dosya yolu, akış veya bayt dizisini ve şifreli dosyalar için isteğe bağlı bir Password parametresini kabul eder — ikinci bir istemci gerekmez:
// Before: Two separate Azure clients for images vs PDFs
// Image: ImageAnalysisClient + AnalyzeAsync
// PDF: DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)
// After: One IronTesseract instance handles both
var ocr = new IronTesseract();
// Image
var imageResult = ocr.Read("document.jpg");
// PDF (same client, same Read method)
using var pdfInput = new OcrInput();
pdfInput.LoadPdf("document.pdf");
var pdfResult = ocr.Read(pdfInput);
// Password-protected PDF
using var encInput = new OcrInput();
encInput.LoadPdf("secured.pdf", Password: "secret");
var encResult = ocr.Read(encInput);
//Aranabilir PDF çıktısı— no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf");
// Before: Two separate Azure clients for images vs PDFs
// Image: ImageAnalysisClient + AnalyzeAsync
// PDF: DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)
// After: One IronTesseract instance handles both
var ocr = new IronTesseract();
// Image
var imageResult = ocr.Read("document.jpg");
// PDF (same client, same Read method)
using var pdfInput = new OcrInput();
pdfInput.LoadPdf("document.pdf");
var pdfResult = ocr.Read(pdfInput);
// Password-protected PDF
using var encInput = new OcrInput();
encInput.LoadPdf("secured.pdf", Password: "secret");
var encResult = ocr.Read(encInput);
//Aranabilir PDF çıktısı— no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
' Before: Two separate Azure clients for images vs PDFs
' Image: ImageAnalysisClient + AnalyzeAsync
' PDF: DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)
' After: One IronTesseract instance handles both
Dim ocr As New IronTesseract()
' Image
Dim imageResult = ocr.Read("document.jpg")
' PDF (same client, same Read method)
Using pdfInput As New OcrInput()
pdfInput.LoadPdf("document.pdf")
Dim pdfResult = ocr.Read(pdfInput)
' Password-protected PDF
Using encInput As New OcrInput()
encInput.LoadPdf("secured.pdf", Password:="secret")
Dim encResult = ocr.Read(encInput)
End Using
' Aranabilir PDF çıktısı— no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf")
End Using
PDF giriş rehberi, sayfa aralığı seçimini, akış girişini ve yerel PDF işleme hattını kapsar. Resim girişleri için resim giriş rehberine bakın.
Form Recognizer Olmadan Yapılandırılmış Veri Çıkarımı
Form Recognizer'ın yerleşik modellerini (faturalar, makbuzlar, kimlik belgeleri) alan çıkarımı için kullanmakta olan ekipler,IronOCR kullanarak CropRectangle ile bölge tabanlı OCR'ı kullanarak bu çıkarım mantığını çoğaltmalıdır. Pozisyonel çıkarım model temel yerine açık bir özelliktir:
// Form Recognizer extracted named fields automatically
// IronOCR: define extraction zones for known document layouts
var ocr = new IronTesseract();
// Define regions matching the document template
var vendorZone = new CropRectangle(0, 0, 300, 100);
var invoiceDate = new CropRectangle(400, 0, 200, 50);
var totalAmount = new CropRectangle(400, 500, 200, 100);
string vendor, date, total;
using (var input = new OcrInput())
{
input.LoadImage("invoice.jpg", vendorZone);
vendor = ocr.Read(input).Text.Trim();
}
using (var input = new OcrInput())
{
input.LoadImage("invoice.jpg", invoiceDate);
date = ocr.Read(input).Text.Trim();
}
using (var input = new OcrInput())
{
input.LoadImage("invoice.jpg", totalAmount);
total = ocr.Read(input).Text.Trim();
}
// Form Recognizer extracted named fields automatically
// IronOCR: define extraction zones for known document layouts
var ocr = new IronTesseract();
// Define regions matching the document template
var vendorZone = new CropRectangle(0, 0, 300, 100);
var invoiceDate = new CropRectangle(400, 0, 200, 50);
var totalAmount = new CropRectangle(400, 500, 200, 100);
string vendor, date, total;
using (var input = new OcrInput())
{
input.LoadImage("invoice.jpg", vendorZone);
vendor = ocr.Read(input).Text.Trim();
}
using (var input = new OcrInput())
{
input.LoadImage("invoice.jpg", invoiceDate);
date = ocr.Read(input).Text.Trim();
}
using (var input = new OcrInput())
{
input.LoadImage("invoice.jpg", totalAmount);
total = ocr.Read(input).Text.Trim();
}
Imports IronOcr
' Form Recognizer extracted named fields automatically
' IronOCR: define extraction zones for known document layouts
Dim ocr As New IronTesseract()
' Define regions matching the document template
Dim vendorZone As New CropRectangle(0, 0, 300, 100)
Dim invoiceDate As New CropRectangle(400, 0, 200, 50)
Dim totalAmount As New CropRectangle(400, 500, 200, 100)
Dim vendor As String
Dim [date] As String
Dim total As String
Using input As New OcrInput()
input.LoadImage("invoice.jpg", vendorZone)
vendor = ocr.Read(input).Text.Trim()
End Using
Using input As New OcrInput()
input.LoadImage("invoice.jpg", invoiceDate)
[date] = ocr.Read(input).Text.Trim()
End Using
Using input As New OcrInput()
input.LoadImage("invoice.jpg", totalAmount)
total = ocr.Read(input).Text.Trim()
End Using
bölge tabanlı OCR rehberi, CropRectangle kullanımını ayrıntılı olarak ele alır. Fatura ile ilgili iş akışları için, fatura OCR öğreticisi, tam çıkarım desenini gösterir.
Ek IronOCR Yetenekleri
Yukarıdaki karşılaştırma noktalarının ötesinde, IronOCR'un Azure Computer Vision'un standart OCR API'si aracılığıyla sunmadığı yetenekler bulunur:
- Taranmış belge işleme: OCR motoru görüntüyü görmeden önce tam ön işleme hattı — düzeltme, gürültü giderme, kontrast, binarizasyon, keskinleştirme — uygulanır, bulut API'lerinden boş veya düşük güven sonuçları dönen taramalar üzerinde doğruluğu artırır.
- Uzun belgeler için ilerleme takibi: Çok sayfalı PDF işleme sırasında ilerleme olaylarına abone olun — UI geri bildirim gereksinimleri olan uzun süreli toplu işler için faydalıdır.
- Bilgisayarlı görme ön işleme: Açılarla veya tutarsız aydınlatma altında çekilen fotoğraflar gibi zorlu belgeler için derin öğrenme tabanlı ön işleme.
.NET Uyumluluğu ve Geleceğe Hazırlık
IronOCR, tek bir NuGet paketinden .NET 8, .NET 9, .NET Standard 2.0 ve .NET Framework 4.6.2 ila 4.8'i hedefler. Windows x64, Windows x86, Linux x64, macOS (Intel ve Apple Silicon) ve ARM64'ü destekler — Azure App Service, AWS Lambda, Docker konteynerleri ve yerinde Linux sunucularını içeren modern .NET dağıtım hedeflerinin tümünü kapsar. Azure Computer Vision'ın .NET SDK'sı (Azure.AI.Vision.ImageAnalysis), modern .NET uyumluluğunu da korur, ancak bulut mimarisi dil çalışma zamanı ile uyumluluğun, SDK'den bağımsız olarak sürümlenip güncellenen Azure uç noktası ile uyumlu olmasından ikincil olduğu anlamına gelir. IronOCR, dil ve motor güncellemelerini NuGet aracılığıyla sağlar, güncelleme modelini diğer .NET ekosistemiyle tutarlı tutar.
Sonuç
Azure Computer Vision, belgeleri bulut iletiminde herhangi bir düzenleyici kısıtlama olmayan ve hacmi ücretsiz veya düşük hacimli ücretli katmanlara uyan ekipler için Azure ekosistemi zaten içinde olanlar için yetenekli bir OCR hizmetidir. Asenkron API işlevseldir, standart belgeler üzerindeki doğruluğu güvenilirdir ve Form Recognizer'ın önceden yapılı modelleri, faturalar ve fişler gibi yapılandırılmış belge türleri için geliştirme çabasını azaltır.
Masraf modeli, ancak, ölçeklenemez. Ayda 50.000 belge ile,IronOCR Lite kendini iki aydan az süre içinde Azure işlem ücretlerinden tasarruf edilmiş hâlde amorti eder. Çok sayfalı PDF'ler için sayfaya bağlı faturalandırma maliyeti bileşik eder. Denge noktasının ötesindeki her bir işletme yılı, Microsoft'a gitmeyen paradır. Ayda 10.000 belgenin ötesine büyüme projelendiren her ekip için, uzun vadeli ekonomi, bir sürekli yerinde lisansı tercih eder.
Veri egemenliği tartışması daha mutlak. PHI, ITAR kontrolündeki veriler, avukat-müşteri gizli iletişimleri veya organizasyonel bir sınırdan yasal olarak veya sözleşme gereği geçemeyen herhangi bir belge kategorisi OCR hattınızdan geçerse,Azure Computer Visiontasarımdan dışlanmıştır — dezavantajlı değil, dışlanmıştır. IronOCR'un yerel işleme modeli, bu iş yüklerini mimari ödün vermeden ele alır.
Asenkron anket karmaşıklığı gerçek bir yük getirir. Tekrar deneme mantığı, oran sınırı işleme, ağ arızaları ve resimler ile PDF'ler için ImageAnalysisClient ve DocumentAnalysisClient arasındaki ayrım, hiçbir OCR değeri taşımayan ve bulut entegrasyon kodu olan kodlar ekler. IronOCR'un eşzamanlı Read() metodu, resimler ve PDF'leri aynı kodla işler, asenkron yayılıma gerek yoktur ve tekrar deneme mantığı gerekmez. Mühendislik çabalarını kendi uygulamalarına değil, bulut API tesisatına harcamak isteyen ekipler için, bu sadelik bir projenin ömrü üzerinde birleştirici bir değer taşır.
Sıkça Sorulan Sorular
Azure Computer Vision OCR nedir?
Azure Computer Vision OCR, geliştiriciler ve işletmeler tarafından görüntülerden ve belgelerden metin çıkarmak için kullanılan bir OCR çözümüdür. .NET uygulama geliştirme için IronOCR ile birlikte değerlendirilen birkaç OCR seçeneğinden biridir.
.NET geliştiricileri için IronOCR, Azure Computer Vision OCR ile nasıl karşılaştırılır?
IronOCR, IronTesseract'ı temel motoru olarak kullanan bir NuGet yerli .NET OCR kütüphanesidir. Azure Computer Vision OCR'ye kıyasla, daha basit bir dağıtım (herhangi bir SDK yükleyici yok), sabit fiyatlandırma ve COM ara yüzde ya da bulut bağımlılıkları olmadan temiz bir C# API sunar.
IronOCR, Azure Computer Vision OCR'den daha mı kolay kurulabilir?
IronOCR, tek bir NuGet paketi aracılığıyla yüklenir. SDK kurulumları, kopyalamak için lisans dosyaları, kaydedilecek COM bileşenleri veya yönetilecek ayrı çalışma zamanı ikili dosyaları yoktur. Tüm OCR motoru paket içinde yer alır.
Azure Computer Vision OCR ile IronOCR arasında hangi doğruluk farkları vardır?
IronOCR, standart iş belgeleri, faturalar, makbuzlar ve taranmış formlar için yüksek tanıma doğruluğu sağlar. Çok kötü durumda olan belgeler ya da nadir yazılar için ise doğruluk, kaynak kalitesine göre değişiklik gösterebilir. IronOCR, düşük kaliteli girişlerde tanımayı geliştirmek için görüntü ön işleme filtreleri içerir.
IronOCR, PDF metin çıkarma desteği sunuyor mu?
Evet. IronOCR, tek bir çağrıda hem yerel PDF'lerden hem de taranmış PDF görüntülerinden metin çıkarır. Çok sayfalı TIFF dosyaları, görüntüler ve akıntılar da desteklenir. Taranmış PDF'ler için, OCR sayfa bazında uygulanır ve her sayfa için sonuç nesneleri sağlanır.
Azure Computer Vision OCR lisanslaması ile IronOCR'yi nasıl karşılaştırılır?
IronOCR, sayfa veya tarama başına ücret içermeyen sabit oranlı bir süresiz lisans kullanır. Yüksek belge hacmi işleyen kuruluşlar, hacme rağmen aynı lisans maliyetini öder. Ayrıntılar ve hacim fiyatlandırması IronOCR lisans sayfasında mevcuttur.
IronOCR hangi dilleri destekliyor?
IronOCR, ayrı NuGet dil paketleri aracılığıyla 127 dili destekler. Bir dil eklemek için tek bir 'dotnet add package IronOcr.Languages.{Language}' komutu gerekir. Manuel dosya yerleştirme veya yol yapılandırması gerekmez.
.NET projesine IronOCR'yi nasıl kurarım?
NuGet üzerinden kurun: 'Install-Package IronOcr' Package Manager Console'da veya 'dotnet add package IronOcr' CLI'de. Ek dil paketleri aynı şekilde yüklenir. Yerel SDK kurucusu gerekmez.
IronOCR, Azure Computer Vision'dan farklı olarak Docker ve konteynerize dağıtımlar için uygun mu?
Evet. IronOCR, NuGet paketi aracılığıyla Docker konteynerlerinde çalışır. Lisans anahtarı, bir ortam değişkeni aracılığıyla ayarlanır. Lisans dosyaları, SDK yolları veya OCR motoru için hacimlerin bağlanmasına gerek yoktur.
Azure Computer Vision karşısında IronOCR'yi satın almadan önce deneyebilir miyim?
Evet. IronOCR deneme modu, belgeleri işler ve çıkış üzerine bir filigran eklemeli OCR sonuçları döndürür. Lisans satın almadan önce kendi belgeleriniz üzerinde doğruluğu kontrol edebilirsiniz.
IronOCR, metin çıkarma yanında barkod okuma desteği sunar mı?
IronOCR, metin çıkarma ve OCR'ye odaklanır. Barkod okuma için Iron Software, eşlik eden bir kütüphane olan IronBarcode'u sağlar. Her ikisi de ayrı ayrı veya Iron Suite paketi olarak mevcuttur.
Azure Computer Vision OCR'den IronOCR'ye geçiş yapmak kolay mı?
Azure Computer Vision OCR'den IronOCR'ye geçiş genellikle başlangıç dizilerini IronTesseract oluşturma ile değiştirmeyi, COM yaşam döngüsü yönetimini kaldırmayı ve API çağrılarını güncellemeyi içerir. Çoğu geçişler, kod karmaşıklığını önemli ölçüde azaltır.

