IronOCR ou Iris OCR: qual solução de OCR as equipes de engenharia devem escolher?
O Read API do Visão Computacional do Azure custa $1,00 por 1.000 transações, requer uma assinatura do Azure para provisionar um recurso de Cognitive Services e força cada chamada OCR por meio de uma dança assíncrona em três etapas: serializar seu documento para BinaryData, chamar AnalyzeAsync, depois percorrer blocos e linhas aninhados para reconstruir o texto. Esse é o caminho mínimo viável — e cada página de um PDF com várias páginas conta como uma transação separada. O IronOCR condensa tudo isso em uma única chamada de método síncrona, funciona inteiramente dentro da sua infraestrutura e não possui um contador por transação.
Entendendo o Azure Computer Vision
Azure Computer Vision é o serviço cognitivo baseado em nuvem da Microsoft que expõe OCR através de duas principais APIs: a Image Analysis API (usando ImageAnalysisClient com VisualFeatures.Read) para imagens, e o DocumentAnalysisClient do Azure Form Recognizer para PDFs. Ambos são serviços baseados em REST hospedados em data centers do Azure, acessados via os pacotes NuGet Azure.AI.Vision.ImageAnalysis e Azure.AI.FormRecognizer.DocumentAnalysis respectivamente.
Principais características arquitetônicas:
- Prioridade à nuvem, sempre : Todas as operações de OCR transmitem dados de documentos para servidores gerenciados pela Microsoft via HTTPS. Não existe modo de processamento local.
- Pré-requisito de assinatura : As equipes devem criar uma conta do Azure, provisionar um recurso dos Serviços Cognitivos, obter um URL de endpoint e gerar uma chave de API antes de escrever uma única linha de código OCR.
- Cobrança por página : A API Read cobra por imagem ou por página de PDF. Um PDF de 50 páginas corresponde a 50 transações. O preço inicial é de US$ 1,00 por 1.000 transações para o primeiro milhão, caindo para US$ 0,60 e depois para US$ 0,40 em volumes maiores.
- Limite da camada gratuita : 5.000 transações por mês na camada gratuita — suficiente para prototipagem, não para cargas de trabalho de produção.
- Serviço dividido para PDFs: OCR de imagem básica usa
ImageAnalysisClient. O processamento completo de PDFs requer um serviço separado — oDocumentAnalysisClientdo Form Recognizer — com seu próprio endpoint e configuração. - Design exclusivamente assíncrono : Todas as chamadas da API de leitura são assíncronas. O OCR local pode retornar resultados de forma síncrona; As viagens de ida e volta na nuvem não podem. Cada método de chamada na cadeia deve ser
async. - Limites de taxa : O nível S1 tem um limite de 10 transações por segundo. O processamento em lote de alto volume requer lógica de filas ou atualizações de níveis.
- Superfície de erro : O código de produção deve lidar com respostas HTTP 429 de limite de taxa, erros de serviço do Azure 5xx, tempos limite de rede, falhas de autenticação e disponibilidade de endpoint — cada um exigindo lógica de repetição separada.
O padrão de sondagem assíncrona
A exigência de assincronia da API Read cria consequências estruturais no código. A análise de imagem usando AnalyzeAsync retorna imediatamente, mas requer await; O processamento de PDF através do Form Recognizer requer WaitUntil.Completed para bloquear até que a operação termine, ou polling personalizado com UpdateStatusAsync para comportamento assíncrono real. A hierarquia resultante exige, então, percorrer blocos, linhas e palavras através de loops aninhados:
// 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
O processamento de PDF eleva ainda mais a complexidade — um DocumentAnalysisClient separado com seu próprio endpoint, AnalyzeDocumentAsync com WaitUntil.Completed, e uma forma de resultado diferente usando result.Pages e page.Lines acessando .Content em vez de .Text.
Entendendo o IronOCR
IronOCR é uma biblioteca OCR comercial para .NET, instalada localmente e distribuída como um único pacote NuGet . Ele integra um mecanismo Tesseract 5 otimizado com pré-processamento automático, suporte nativo a PDF e uma API síncrona que não requer credenciais de nuvem, configuração de endpoint ou infraestrutura assíncrona.
Principais características:
- Implementação única do NuGet:
dotnet add package IronOcrinstala tudo — motor OCR, binários nativos e dados linguísticos para o inglês. Sem pastas tessdata, sem downloads separados de bibliotecas nativas. - Licenciamento perpétuo: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited — compra única, não uma assinatura. Sem taxas por documento, independentemente do volume.
- Processamento local : Todo o OCR é executado dentro do seu processo. Os documentos nunca saem da sua infraestrutura.
- Pré-processamento automático: Deskew, DeNoise, Contrast, Binarize, e aprimoramento de resolução são aplicados automaticamente ou via chamadas de filtro explícitas em
OcrInput. - Suporte nativo a PDF:
IronTesseract.Read("document.pdf")lida com PDFs diretamente, incluindo arquivos protegidos por senha, sem um serviço separado ou pacote NuGet adicional. - 125+ idiomas: Instalados via pacotes de idioma separados do NuGet —
IronOcr.Languages.French,IronOcr.Languages.ChineseSimplified, etc. — sem gerenciamento tessdata manual. - Thread-safe:
IronTesseracté seguro para uso simultâneo. Os workloads em lote podem usarParallel.ForEachsem sincronização adicional. - Saída estruturada:
OcrResultexpõe coleções.Pages,.Paragraphs,.Lines,.Words, e.Barcodescom coordenadas por elemento, escores de confiança e retângulos delimitadores.
Comparação de recursos
| Recurso | Visão Computacional do Azure | IronOCR |
|---|---|---|
| Local de processamento | Nuvem Microsoft Azure | Local, no local |
| Modelo de preços | Por transação (contate a Microsoft para preços atuais) | Licença perpétua ($999+) |
| É necessário ter acesso à internet. | Sim, sempre | Não |
| Suporte a PDF | Via Reconhecedor de Formulários (separado) | Integrado, nativo |
| Complexidade de configuração | Conta do Azure + recurso + chaves | Instalação NuGet |
| Padrão de API | Assíncrono (E/S na nuvem) | Síncrono (local) |
| Limites de taxa | 10 TPS (S1) | Apenas dependente de hardware |
Comparação Detalhada de Recursos
| Recurso | Visão Computacional do Azure | IronOCR |
|---|---|---|
| Configuração e implantação | ||
| Instalação NuGet | Vários pacotes | dotnet add package IronOcr |
| Configuração de credenciais | URL do endpoint + chave da API | String da chave de licença |
| É necessária uma assinatura do Azure. | Sim | Não |
| Conectividade com a Internet necessária | Sim, todos os pedidos | Não |
| Implantação isolada da internet | Impossível | Suporte completo |
| Implantação em Docker | Requer rede de saída | Autossuficiente |
| recursos de OCR | ||
| OCR de imagem | Sim (AnalyzeAsync) |
Sim (Read()) |
| OCR de PDF | Via Reconhecedor de Formulários (serviço extra) | Nativo, integrado |
| PDF protegido por senha | Por meio do reconhecedor de formulários | Único parâmetro Password: |
| PDF com várias páginas (cobrança por página) | Sim — cada página = 1 transação | Sem custo por página |
| Saída em PDF pesquisável | Construção manual | SaveAsSearchablePdf() |
| Pré-processamento automático | Limitado no lado do servidor | Correção de distorção, redução de ruído, contraste, binarização |
| Leitura de código de barras durante OCR | Limitado | ReadBarCodes = true |
| OCR baseado em região | Não diretamente (recorte manual) | CropRectangle em OcrInput |
| Suporte linguístico | ||
| Contagem de idiomas | 164+ | 125+ |
| Instalação de idioma | Nível de serviço (a nuvem cuida disso) | Pacotes de idiomas NuGet |
| Vários idiomas simultâneos | Sim | Sim (AddSecondaryLanguage) |
| Saída e estrutura | ||
| Texto simples | Sim | Sim |
| Caixas delimitadoras por palavra | Baseado em polígonos | Baseado em retângulos |
| Pontuações de confiança por palavra | Sim | Sim (escala de 0 a 100) |
| Hierarquia estruturada | Blocos / Linhas / Palavras | Páginas / Parágrafos / Linhas / Palavras |
| Exportação hOCR | Não | Sim (SaveAsHocrFile) |
| Custo e conformidade | ||
| Custo por documento | US$ 0,001 por página (Reconhecedor de Formulários) | None |
| implantação em conformidade com a HIPAA | Complexo (BAA + nuvem) | Simples (somente local) |
| adequação ao ITAR | Não para dados controlados | Totalmente no local |
| FedRAMP isolado do ar | Não | Sim |
| Confiabilidade | ||
| Modos de falha de rede | Sim | None |
| erros de limite de taxa | Sim (429 a 10 TPS) | None |
| SLA de disponibilidade de serviço | 99,9% (Azure) | Sua infraestrutura |
Modelo de custo
A diferença de preço por transação entre o Visão Computacional do Azure e o IronOCR torna-se decisiva em volumes de produção. A calculadora de custos dos arquivos de origem do Azure mostra os cálculos com precisão.
Abordagem de Visão Computacional do Azure
O Azure cobra por transação usando preços em camadas com base no volume. Consulte a página de preços do Azure Computer Vision para tarifas atuais. Cada página do PDF representa uma transação. Um PDF de 10 páginas equivale a 10 chamadas faturáveis. Está disponível uma camada gratuita de 5.000 transações por mês.
// 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)
Em volumes moderados a altos de documentos, a licença perpétua do IronOCR se paga rapidamente em comparação com os custos contínuos de transações do Azure, após o qual cada documento adicional é economia.
Abordagem IronOCR
O modelo de preços do IronOCR é um número único. Instale o pacote NuGet , defina a chave de licença e processe qualquer volume sem que o contador seja acionado:
// 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
Sem necessidade de medição, rastreamento de consumo ou alertas de orçamento. Custos previsíveis desde o primeiro dia. Consulte o tutorial de leitura de texto em imagens para obter um passo a passo completo de introdução.
Soberania de dados e capacidade offline
As implicações de conformidade do OCR na nuvem não são teóricas. Todos os documentos processados pelo Visão Computacional do Azure ultrapassam os limites de uma organização. O arquivo README do Azure documenta as estruturas regulatórias específicas afetadas: entidades cobertas pela HIPAA, contratados de defesa sujeitos ao ITAR, organizações certificadas pelo CMMC, empresas europeias regulamentadas pelo GDPR e qualquer operação em uma rede isolada da internet.
Abordagem de Visão Computacional do Azure
Mesmo com a seleção de endpoints regionais e um Acordo de Parceiro Comercial assinado, o fluxo de dados é fixo:
// 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
Uma rede isolada da internet não consegue alcançar o URL do ponto de extremidade — o Visão Computacional do Azure não possui modo offline. Para organizações que operam SCIFs, instalações militares ou ambientes de processamento isolados, o serviço é arquiteturalmente incompatível, independentemente do preço.
Abordagem IronOCR
O IronOCR processa documentos durante o processo de chamada. Não existe conexão de saída:
// 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
// Não network 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
// Não network 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
' Não 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
A implementação do Docker elimina completamente os requisitos de rede de saída:
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
# Não Azure endpoint, no API key, no outbound network rules needed
ENTRYPOINT ["dotnet", "YourApp.dll"]
Para entidades abrangidas pela HIPAA, conformidade com o ITAR ou cenários isolados da rede FedRAMP, o IronOCR elimina toda a categoria de risco de processadores de dados terceirizados. Consulte o guia de implantação do Azure para executar o IronOCR na infraestrutura do Azure, mantendo os documentos locais na instância de computação, e o guia de implantação do Docker para configuração do contêiner.
Design de API síncrona versus assíncrona
A API de leitura do Azure é assíncrona porque não pode ser síncrona — a E/S na nuvem tem latência de rede.IronOCR processa localmente e pode retornar sincronicamente, o que simplifica o código de chamada, elimina a propagação async através da pilha de chamadas e remove os modos de falha inerentes ao I/O de rede.
Abordagem de Visão Computacional do Azure
Cada chamada OCR do Azure requer await. O código de produção adiciona lógica de repetição para erros de limite de taxa 429 e erros de serviço 5xx. Uma implementação mínima para produção teria a seguinte aparência:
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
Isso não é excesso de engenharia defensiva — é o mínimo exigido para qualquer chamada de API do Azure em produção. Limites de taxa, interrupções de serviço e erros transitórios são situações reais que qualquer consumidor do Azure encontrará.
Abordagem IronOCR
O processamento local elimina a superfície de falha da rede. O escopo do tratamento de erros se restringe ao sistema de arquivos e à validação de entrada:
// Não async 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);
}
// Não async 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
' Não async 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
No RequestFailedException, sem loops de tente novamente, sem coordenação Task.WhenAll para trabalhos em lote. Se você precisar de assíncrono para integração com um pipeline de controlador assíncrono, Task.Run(() => ocr.Read(path)) envolve a chamada síncrona sem alterações estruturais à lógica do OCR em si. A referência da API do IronTesseract abrange toda a interface síncrona. Para cargas de trabalho que realmente precisam de padrões assíncronos, o IronOCR também fornece um guia de OCR assíncrono dedicado.
Configuração de credenciais e endpoints
O Visão Computacional do Azure requer o provisionamento de infraestrutura antes do primeiro teste. O IronOCR requer a instalação do NuGet e, opcionalmente, uma chave de licença.
Abordagem de Visão Computacional do Azure
Sequência de configuração do Azure antes de escrever qualquer código OCR:
- Crie uma conta do Azure, caso ainda não possua uma.
- Acesse o portal do Azure e crie um recurso dos Serviços Cognitivos (ou um recurso dos Serviços de IA do Azure).
- Selecione um nível de preço e uma região.
- Copie o URL do endpoint (formato:
https://your-resource.cognitiveservices.azure.com/). - Copie uma das duas chaves de API.
- Armazene ambos os valores de maneira segura — em variáveis de ambiente, Azure Key Vault, ou
appsettings.json(somente não-produção). - Instale
Azure.AI.Vision.ImageAnalysisvia NuGet. - Inicialize
ImageAnalysisClientcom o endpoint e a credencial.
Para o processamento de PDF, repita os passos 2-8 para um recurso Form Recognizer com um pacote NuGet diferente (Azure.AI.FormRecognizer) e uma classe de cliente diferente (DocumentAnalysisClient).
O appsettings.json armazena endpoint e chave:
{
"Azure": {
"ComputerVision": {
"Endpoint": "https://your-resource.cognitiveservices.azure.com/",
"ApiKey": "your-api-key"
}
}
}
A rotação de chaves de API, o gerenciamento da expiração de credenciais e a administração de URLs de endpoints em diferentes ambientes (desenvolvimento, teste e produção) são tarefas operacionais contínuas sem equivalente no processamento local.
Abordagem IronOCR
O guia de configuração do IronTesseract reduz a configuração a duas etapas:
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
A chave de licença é uma sequência estática. Não expira por solicitação, não requer rotação e não envia dados para validação após a ativação. Os ambientes de implantação não precisam de regras de firewall de saída para que o OCR funcione.
Referência de Mapeamento de API
| Visão Computacional do Azure | Equivalente de IronOCR |
|---|---|
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 (escala de 0-100 vs 0-1 do Azure) |
word.BoundingPolygon |
word.X, word.Y, word.Width, word.Height |
DocumentAnalysisClient |
IronTesseract + OcrInput |
AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-read", stream) |
ocr.Read(input) com input.LoadPdf(path) |
operation.Value.Pages |
result.Pages |
page.Lines / line.Content |
result.Lines / line.Text |
RequestFailedException (retry 429) |
Não aplicável — sem limites de taxa |
RequestFailedException (retry 500) |
Não aplicável — nenhum erro de serviço |
Quando as equipes consideram migrar do Visão Computacional do Azure para o IronOCR
Requisitos de conformidade Bloqueiam o processamento em nuvem
Uma empresa de software independente (ISV) da área da saúde que está desenvolvendo um sistema de gerenciamento de documentos começa usando o Visão Computacional do Azure porque ele permite uma integração rápida. Então chega o primeiro cliente Enterprise — um sistema hospitalar com um responsável pela segurança HIPAA que faz duas perguntas: "Para onde vão nossas informações de saúde protegidas?" e "Vocês podem nos mostrar o Acordo de Parceiro Comercial (BAA) que cobre esse terceiro?". O Azure possui um BAA, mas a resposta à primeira pergunta — "data centers da Microsoft" — desencadeia uma longa revisão de segurança, uma solicitação de relatórios de auditoria da Microsoft e um cronograma de conformidade que atrasa o contrato. A mudança para o IronOCR remove a pergunta por completo. As informações de saúde protegidas (PHI) nunca saem do ambiente do cliente. O âmbito da conformidade permanece restrito à própria organização do cliente.
O crescimento do volume torna a precificação por transação insustentável.
Uma equipe de operações inicia um pipeline de processamento de faturas com capacidade para 5.000 documentos por mês — confortavelmente dentro do nível gratuito do Azure. À medida que o volume cresce, os custos por transação se acumulam com cada documento processado.IronOCR Professional ($2,999) é uma compra única sem taxas por documento. Equipes que projetam um crescimento de volume, mesmo que moderado, atingem o ponto de equilíbrio rapidamente, após o qual cada documento adicional representa economia.
A latência da rede afeta os SLAs de processamento.
Um serviço de processamento de documentos tem como meta um SLA de ponta a ponta de 2 segundos. O Visão Computacional do Azure adiciona de 200 a 800 ms de latência de rede para chamadas na mesma região e de 500 a 2000 ms para implantações entre regiões diferentes — antes mesmo do cálculo do OCR. Sob carga, o limite de taxa de 10 TPS no S1 força o enfileiramento, o que aumenta ainda mais a latência. O IronOCR processa uma única imagem de 300 DPI em 100 a 400 ms em hardware de servidor comum, sem filas, sem limite de taxa e sem saltos de rede. O SLA torna-se previsível porque depende apenas do hardware, e não da integridade do serviço Azure ou das condições da rede.
Requisitos de infraestrutura isolada da internet
Empresas contratadas pela área de defesa, agências de inteligência e operadores de infraestrutura crítica executam cargas de trabalho em redes que, por projeto, não possuem conectividade com a internet. O Visão Computacional do Azure é tecnicamente incompatível com esses ambientes — o ponto de extremidade não pode ser alcançado. As equipes nesses setores precisam de uma biblioteca que seja implantada como um binário independente, opere sem qualquer conexão de saída e passe por revisões de segurança que proíbam explicitamente a transmissão de dados para a nuvem. A implementação do IronOCR em Linux e o suporte ao Docker permitem que ele seja implantado em ambientes restritos sem modificações.
Simplificando a implantação em múltiplos ambientes
Uma equipe que gerencia ambientes de desenvolvimento, teste e produção para um aplicativo SaaS possui três recursos do Azure Cognitive Services, três conjuntos de chaves de API e três URLs de endpoint — cada um exigindo armazenamento seguro, políticas de rotação e configuração específica do ambiente. Todo ambiente de implantação precisa de acesso de rede de saída para o Azure.IronOCR reduz a configuração por ambiente para uma variável de ambiente (IRONOCR_LICENSE), elimina o requisito de acesso à rede e remove o overhead operacional do gerenciamento de credenciais entre ambientes.
Considerações Comuns de Migração
Padrão Assíncrono para Síncrono
O código do consumidor Azure é async por necessidade. O IronOCR não requer modo assíncrono, mas a transição é mecânica. Substitua os tipos de retorno async Task<string> por string, remova palavras-chave await e async e exclua o loop de tentativa. Se o método de chamada for um controlador ASP.NET ou serviço que deve permanecer assíncrono, envolva a chamada IronOCR em Task.Run:
// 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
Normalização da Escala de Confiança
Azure Computer Vision retorna confiança em palavras como um float entre 0 e 1.IronOCR retorna confiança como um double em uma escala de 0-100. Qualquer código que utilize limites para valores de confiança do Azure precisa ser ajustado:
// 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}%")
A documentação de referência da API OcrResult contém todas as propriedades dos resultados, incluindo a escala de confiança. O guia prático sobre índices de confiança aborda a seleção de limiares e a interpretação de cada elemento.
Consolidação do serviço de processamento de PDF
O Azure divide o OCR de imagens e o OCR de PDFs em dois serviços separados, com clientes, pacotes NuGet e configurações de endpoint distintos. Migrar significa consolidar ambos os caminhos em uma única instância IronTesseract. O método OcrInput.LoadPdf aceita um caminho de arquivo, stream, ou matriz de bytes, com um parâmetro Password opcional para arquivos criptografados — nenhum segundo cliente é necessário:
// 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);
// Saída em PDF pesquisável — 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);
// Saída em PDF pesquisável — 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)
' Saída em PDF pesquisável — no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf")
End Using
' Password-protected PDF
Using encInput As New OcrInput()
encInput.LoadPdf("secured.pdf", Password:="secret")
Dim encResult = ocr.Read(encInput)
End Using
O guia de entrada de PDF aborda a seleção de intervalo de páginas, a entrada de fluxo e o pipeline de renderização de PDF nativo. Para entradas de imagem, consulte o guia de entrada de imagem .
Extração de dados estruturados sem reconhecimento de formulários
Equipes usando os modelos predefinidos do Form Recognizer (faturas, recibos, documentos de identidade) para extração de campo precisam replicar essa lógica de extração no IronOCR usando OCR baseado em região com CropRectangle. A extração posicional é explícita, e não baseada em modelo:
// 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
O guia de OCR baseado em região cobre o uso do CropRectangle em detalhe. Para fluxos de trabalho específicos de faturas, o tutorial de OCR para faturas demonstra o padrão de extração completo.
Funcionalidades adicionais do IronOCR
Além dos pontos de comparação acima, o IronOCR oferece recursos que o Visão Computacional do Azure não expõe por meio de sua API OCR padrão:
- Processamento de documentos digitalizados : Todo o processo de pré-processamento — correção de distorção, redução de ruído, contraste, binarização e nitidez — é aplicado antes que o mecanismo de OCR analise a imagem, melhorando a precisão em digitalizações que retornam resultados vazios ou de baixa confiança das APIs na nuvem.
- Acompanhamento do progresso de documentos longos : Inscreva-se para receber notificações de progresso durante o processamento de PDFs com várias páginas — útil para trabalhos em lote de longa duração com requisitos de feedback na interface do usuário.
- Pré-processamento de visão computacional : Pré-processamento baseado em aprendizado profundo para documentos complexos, como fotos tiradas em ângulos ou sob iluminação inconsistente.
Compatibilidade com .NET e Preparação para o Futuro
O IronOCR é compatível com .NET 8, .NET 9, .NET Standard 2.0 e .NET Framework 4.6.2 a 4.8 a partir de um único pacote NuGet . Ele oferece suporte a Windows x64, Windows x86, Linux x64, macOS (Intel e Apple Silicon) e ARM64 — abrangendo toda a gama de destinos de implantação .NET modernos, incluindo Azure App Service, AWS Lambda, contêineres Docker e servidores Linux locais. O SDK do Visão Computacional do Azure for .NET (Azure.AI.Vision.ImageAnalysis) também mantém a compatibilidade com o .NET moderno, mas a arquitetura de nuvem significa que a compatibilidade com o runtime da linguagem é secundária em relação à compatibilidade com o endpoint do Azure, que é versionado e atualizado independentemente do SDK. O IronOCR distribui atualizações de idioma e mecanismo por meio do NuGet, mantendo o modelo de atualização consistente com o restante do ecossistema .NET .
Conclusão
O Visão Computacional do Azure é um serviço de OCR eficiente para equipes que já operam no ecossistema do Azure, cujos documentos não possuem restrições regulatórias de transmissão na nuvem e cujo volume se enquadra nos planos gratuitos ou nos planos pagos de baixo volume. A API assíncrona é funcional, a precisão em documentos padrão é confiável e os modelos predefinidos do Form Recognizer reduzem o esforço de desenvolvimento para tipos de documentos estruturados, como faturas e recibos.
O modelo de custos, no entanto, não é escalável. Com 50.000 documentos por mês, o IronOCR Lite se paga em menos de dois meses graças à economia nas taxas de transação do Azure. A cobrança por página para PDFs com várias páginas aumenta consideravelmente o custo. Cada ano operacional após o ponto de equilíbrio representa dinheiro que não vai para a Microsoft. Para qualquer equipe que projete um crescimento superior a 10.000 documentos por mês, a longo prazo, a vantagem econômica é uma licença local perpétua.
O argumento da soberania dos dados é mais absoluto. Se informações de saúde protegidas (PHI), dados controlados pelo ITAR, comunicações privilegiadas entre advogado e cliente ou qualquer categoria de documento que não possa legal ou contratualmente cruzar um limite organizacional passar pelo seu pipeline de OCR, o Visão Computacional do Azure será excluído do projeto — não prejudicado, excluído. O modelo de processamento local do IronOCR lida com essas cargas de trabalho sem comprometer a arquitetura.
A complexidade da sondagem assíncrona representa uma sobrecarga real. A lógica de tentativas, o gerenciamento de limite de taxa, os modos de falha de rede e a divisão entre ImageAnalysisClient e DocumentAnalysisClient para imagens versus PDFs adicionam código que não tem valor de OCR — é código de integração na nuvem. O método síncrono Read() do IronOCR lida com imagens e PDFs com código idêntico, sem necessidade de propagação assíncrona e sem necessidade de lógica de tentativa. Para equipes que desejam concentrar seus esforços de engenharia no desenvolvimento da aplicação em vez da infraestrutura de APIs na nuvem, essa simplicidade agrega valor exponencial ao longo da vida útil do projeto.
Perguntas frequentes
O que é o OCR do Azure Computer Vision?
O Azure Computer Vision OCR é uma solução de OCR usada por desenvolvedores e empresas para extrair texto de imagens e documentos. É uma das várias opções de OCR avaliadas juntamente com o IronOCR para desenvolvimento de aplicativos .NET.
Como o IronOCR se compara ao Azure Computer Vision OCR para desenvolvedores .NET?
IronOCR é uma biblioteca OCR .NET nativa do NuGet que utiliza o IronTesseract como mecanismo principal. Comparada ao Azure Computer Vision OCR, oferece implantação mais simples (sem instaladores de SDK), preço fixo e uma API C# limpa, sem interoperabilidade COM ou dependências de nuvem.
O IronOCR é mais fácil de configurar do que o Azure Computer Vision OCR?
O IronOCR é instalado por meio de um único pacote NuGet. Não há instaladores de SDK, arquivos de licença para copiar, componentes COM para registrar ou binários de tempo de execução separados para gerenciar. Todo o mecanismo de OCR está incluído no pacote.
Quais são as diferenças de precisão entre o OCR do Azure Computer Vision e o IronOCR?
O IronOCR alcança alta precisão de reconhecimento para documentos comerciais padrão, faturas, recibos e formulários digitalizados. Para documentos muito degradados ou com escritas incomuns, a precisão varia de acordo com a qualidade da fonte. O IronOCR inclui filtros de pré-processamento de imagem para melhorar o reconhecimento em entradas de baixa qualidade.
O IronOCR suporta extração de texto de PDFs?
Sim. O IronOCR extrai texto tanto de PDFs nativos quanto de imagens digitalizadas de PDFs em uma única chamada. Ele também suporta arquivos TIFF com várias páginas, imagens e fluxos de dados. Para PDFs digitalizados, o OCR é aplicado página por página, com objetos de resultado por página.
Como se compara o licenciamento do Azure Computer Vision OCR ao do IronOCR?
O IronOCR utiliza uma licença perpétua com preço fixo, sem cobranças por página ou por digitalização. Organizações que processam grandes volumes de documentos pagam o mesmo valor de licença, independentemente do volume. Detalhes e preços por volume estão disponíveis na página de licenciamento do IronOCR.
Quais idiomas o IronOCR suporta?
O IronOCR suporta 127 idiomas através de pacotes de idiomas NuGet separados. Adicionar um idioma requer um único comando 'dotnet add package IronOcr.Languages.{Idioma}'. Não é necessário inserir arquivos manualmente nem configurar caminhos.
Como faço para instalar o IronOCR em um projeto .NET ?
Instale via NuGet: 'Install-Package IronOcr' no Console do Gerenciador de Pacotes ou 'dotnet add package IronOcr' na CLI. Pacotes de idiomas adicionais são instalados da mesma forma. Não é necessário instalar o SDK nativo.
O IronOCR é adequado para implantações em Docker e contêineres, ao contrário do Azure Computer Vision?
Sim. O IronOCR funciona em contêineres Docker por meio de seu pacote NuGet. A chave de licença é definida por meio de uma variável de ambiente. Não são necessários arquivos de licença, caminhos de SDK ou montagens de volume para o próprio mecanismo de OCR.
Posso experimentar o IronOCR antes de comprar, em comparação com o Azure Computer Vision?
Sim. O modo de avaliação do IronOCR processa documentos e retorna resultados de OCR com uma marca d'água sobreposta. Você pode verificar a precisão em seus próprios documentos antes de adquirir uma licença.
O IronOCR suporta leitura de código de barras juntamente com extração de texto?
O IronOCR concentra-se na extração de texto e OCR. Para leitura de código de barras, a Iron Software fornece o IronBarcode como uma biblioteca complementar. Ambos estão disponíveis individualmente ou como parte do pacote Iron Suite.
É fácil migrar do Azure Computer Vision OCR para o IronOCR?
A migração do Azure Computer Vision OCR para o IronOCR normalmente envolve a substituição das sequências de inicialização pela instanciação do IronTesseract, a remoção do gerenciamento do ciclo de vida COM e a atualização das chamadas de API. A maioria das migrações reduz significativamente a complexidade do código.

