Como Converter Imagem em Texto via Streams de Dados em C# com IronOCR
IronOCR converte imagem em texto diretamente de streams em C# passando o stream para os construtores OcrInput ou OcrImageInput, permitindo leitura de texto eficiente sem salvar arquivos no disco.
Um fluxo é um fluxo contínuo de informação binária que pode ser lida ou escrita. Em programação, os fluxos processam de forma eficiente dados que são muito grandes para a memória, dividindo-os em partes gerenciáveis.
Os métodos de importação do IronOCR aceitam fluxos de dados de imagem diretamente. Passe os dados do fluxo para um método de importação, que lidará automaticamente com todas as etapas necessárias. Para cenários avançados, explore a Classe OcrInput que oferece opções extensas para preparar vários formatos de entrada.
Início rápido: Use um fluxo para entrada OCR em segundos
Este exemplo demonstra OCR imediato alimentando um System.IO.Stream no IronOCR, pulando caminhos de arquivo e recuperando texto reconhecido com código mínimo.
-
Instale IronOCR com o Gerenciador de Pacotes NuGet
PM > Install-Package IronOcr -
Copie e execute este trecho de código.
using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); -
Implante para testar em seu ambiente de produção.
Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita
- Baixe uma biblioteca C# para leitura de fluxos de dados.
- Obtenha e prepare os dados do fluxo de imagens.
- Passe o fluxo de imagem para o construtor **`OcrImageInput`** para importar a imagem.
- Utilize o método `Read` para realizar o OCR.
- Defina a área de leitura especificando a região de recorte.
Como faço para ler fluxos de dados com o IronOCR?
Primeiro, instancie a classe IronTesseract para executar OCR. Use o método FromFile de AnyBitmap para importar o arquivo de imagem. Este objeto AnyBitmap converte os dados da imagem em um stream. Em seguida, use a instrução using para criar o objeto OcrImageInput passando o stream de imagem com o método GetStream. Finalmente, use o método Read para executar OCR.
:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs
using IronOcr;
using IronSoftware.Drawing;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");
// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")
' Import image stream
Private imageInput = New OcrImageInput(anyBitmap.GetStream())
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
O OCR baseado em fluxo beneficia aplicações web que recebem uploads de imagens, processam imagens de bancos de dados ou lidam com dados temporários que não devem ser gravados em disco. A abordagem de stream integra-se perfeitamente com objetos System.Drawing e outras bibliotecas de manipulação de imagens.
Por que usar fluxos de dados para OCR?
Trabalhar com fluxos oferece diversas vantagens para desenvolvedores .NET:
- Eficiência de memória : Processar dados em partes, em vez de carregar arquivos inteiros na memória.
- Segurança : Processe documentos confidenciais sem criar arquivos temporários no disco.
- Desempenho : Eliminar a sobrecarga de E/S das operações do sistema de arquivos.
- Flexibilidade : Trabalhe com uploads da web, BLOBs de banco de dados e transformações em memória.
Para processar documentos com várias páginas ou lidar com fluxos de PDF , o IronOCR mantém a mesma API simples, ao mesmo tempo que oferece um desempenho robusto. Ao trabalhar com documentos digitalizados, você também pode aproveitar os recursos do IronOCR para ler documentos digitalizados de forma eficiente por meio do processamento de fluxo.
Como posso especificar uma região de digitalização para OCR de fluxo?
Para melhorar o desempenho em imagens grandes e obter leituras específicas de certas regiões, utilize a classe CropRectangle. O construtor OcrImageInput aceita um objeto CropRectangle como segundo parâmetro, permitindo especificar qual região do documento de imagem deve ser lida. O exemplo de código abaixo especifica que apenas o número do capítulo e a região do título devem ser lidos.
:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");
// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);
// Add image
using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")
' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)
' Add image
Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Output the result to console
Console.WriteLine(ocrResult.Text)
Essa técnica é particularmente útil quando você precisa realizar OCR em uma região específica de uma imagem ou ao lidar com documentos estruturados onde o texto aparece em locais previsíveis. Para cenários mais complexos envolvendo tabelas ou dados estruturados, explore como ler tabelas em documentos .
Qual é a aparência da região escaneada na saída?
Que técnicas avançadas de processamento de fluxos de dados posso usar?
Ao trabalhar com fluxos de dados, utilize recursos adicionais do IronOCR para melhorar a precisão do reconhecimento. Os filtros de otimização de imagem podem ser aplicados diretamente aos dados de fluxo antes do processamento OCR:
using IronOcr;
using IronSoftware.Drawing;
using System.IO;
// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
IronTesseract ocrTesseract = new IronTesseract();
// Configure for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
using var input = new OcrImageInput(imageStream);
// Apply preprocessing filters
input.Deskew();
input.DeNoise();
input.Sharpen();
var result = ocrTesseract.Read(input);
return result.Text;
}
using IronOcr;
using IronSoftware.Drawing;
using System.IO;
// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
IronTesseract ocrTesseract = new IronTesseract();
// Configure for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
using var input = new OcrImageInput(imageStream);
// Apply preprocessing filters
input.Deskew();
input.DeNoise();
input.Sharpen();
var result = ocrTesseract.Read(input);
return result.Text;
}
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO
' Process stream with filters
Public Function ProcessStreamWithFilters(imageStream As Stream) As String
Dim ocrTesseract As New IronTesseract()
' Configure for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
Using input As New OcrImageInput(imageStream)
' Apply preprocessing filters
input.Deskew()
input.DeNoise()
input.Sharpen()
Dim result = ocrTesseract.Read(input)
Return result.Text
End Using
End Function
Para um processamento de imagem aprimorado, considere usar o Assistente de Filtro para determinar automaticamente as melhores etapas de pré-processamento para seus tipos de documento específicos. Além disso, ao lidar com imagens rotacionadas ou distorcidas em seus fluxos, a funcionalidade de correção de orientação de imagem pode melhorar significativamente a precisão do OCR.
Como faço para trabalhar com diferentes fontes de fluxo de dados?
O IronOCR lida perfeitamente com diversas fontes de fluxo de dados. Seja processando uploads de um formulário web, recuperando imagens de um banco de dados ou convertendo entre formatos, a API permanece consistente:
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);
// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);
// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);
// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);
// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
Imports System.IO
Imports System.Net
' From MemoryStream
Dim imageBytes As Byte() = GetImageBytesFromDatabase()
Using memoryStream As New MemoryStream(imageBytes)
Using input As New OcrImageInput(memoryStream)
' Process input
End Using
End Using
' From FileStream
Using fileStream As New FileStream("document.png", FileMode.Open)
Using input2 As New OcrImageInput(fileStream)
' Process input2
End Using
End Using
' From network stream
Using webClient As New WebClient()
Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg")
Using input3 As New OcrImageInput(networkStream)
' Process input3
End Using
End Using
End Using
Para obter resultados ideais, considere ajustar as configurações de DPI ao trabalhar com fluxos de baixa resolução. O IronOCR detecta automaticamente o DPI, mas a configuração manual pode melhorar a precisão para casos de uso específicos. Ao trabalhar com documentos de várias páginas, explore o processamento de fluxos de arquivos TIFF e GIF com várias páginas .
Como lidar com resultados de OCR de fluxos de dados?
Após processar seu fluxo de dados, o IronOCR fornece objetos de resultado avançados que vão além da simples extração de texto. A classe OcrResult contém informações detalhadas sobre texto reconhecido, incluindo pontuações de confiança, posicionamento e estrutura:
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);
// Access detailed results
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");
foreach (var paragraph in page.Paragraphs)
{
Console.WriteLine($"Paragraph: {paragraph.Text}");
Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
}
}
// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);
// Access detailed results
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");
foreach (var paragraph in page.Paragraphs)
{
Console.WriteLine($"Paragraph: {paragraph.Text}");
Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
}
}
// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
Imports IronOcr
' Process stream and analyze results
Using input As New OcrImageInput(stream)
Dim result = New IronTesseract().Read(input)
' Access detailed results
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%")
For Each paragraph In page.Paragraphs
Console.WriteLine($"Paragraph: {paragraph.Text}")
Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}")
Next
Next
' Export results
Dim text As String = result.Text
Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf")
Dim hocrHtml As String = result.SaveAsHocrHtml("output.html")
End Using
O objeto de resultado também fornece métodos para exportar para PDFs pesquisáveis ou formato HTML hOCR , facilitando a criação de arquivos de documentos pesquisáveis a partir de suas entradas de fluxo. Para fins de depuração, você pode usar o recurso de realce de texto para visualizar o que o IronOCR detectou em suas imagens.
Que aspectos de desempenho devo levar em consideração?
Ao processar múltiplos fluxos de dados ou implementar soluções de OCR de alto rendimento, considere estas estratégias de otimização:
- Reutilize instâncias
IronTesseract: Crie uma única instância e reutilize-a em várias operações - Implementar Rastreamento de Progresso : Para fluxos de dados grandes, utilize o rastreamento de progresso para monitorar o status do processamento.
- Processar em Paralelo:
IronOCRsuporta processamento simultâneo para múltiplos streams - Otimizar a qualidade da imagem : Pré-processar os fluxos de vídeo para garantir resolução e nitidez ideais.
Para obter o máximo desempenho, explore as opções de configuração OCR rápidas e considere implementar o processamento multithread para operações em lote. Ao trabalhar com aplicações sensíveis ao tempo, compreender os tempos limite pode ajudar a gerenciar operações de OCR de longa duração de forma eficaz.
Como solucionar problemas comuns de streaming?
Ao trabalhar com fluxos de dados, você pode encontrar desafios específicos. Aqui estão soluções para cenários comuns:
- Posição do Stream: Sempre redefine a posição do stream para
0antes de passar paraIronOCR - Descarte: Use instruções
usingpara garantir a limpeza adequada dos recursos - Suporte a formatos : O IronOCR suporta diversos formatos de imagem, incluindo JPEG, PNG, TIFF e BMP por meio de fluxos de dados.
- Gerenciamento de memória : Para fluxos de dados grandes, considere o processamento em partes ou abordagens de streaming.
Para documentos complexos ou quando o OCR padrão não fornece resultados satisfatórios, os recursos de visão computacional podem ajudar a localizar e extrair o texto com mais precisão. Além disso, ao trabalhar com fluxos de baixa qualidade, consulte o guia sobre como corrigir digitalizações de baixa qualidade para obter técnicas de pré-processamento que podem melhorar significativamente as taxas de reconhecimento.
Para obter informações mais detalhadas sobre como trabalhar com fluxos e outros métodos de entrada, explore nossos guias práticos e exemplos de código abrangentes.
Perguntas frequentes
Como posso realizar OCR em dados de imagem sem salvá-los em disco primeiro?
O IronOCR permite processar fluxos de imagens diretamente, passando-os para os construtores OcrInput ou OcrImageInput. Isso possibilita um processamento OCR eficiente sem a criação de arquivos temporários, o que é ideal para lidar com uploads da web, BLOBs de banco de dados ou documentos confidenciais que não devem ser armazenados no disco.
Que tipos de fluxos podem ser usados como entrada para processamento OCR?
O IronOCR aceita qualquer System.IO.Stream contendo dados de imagem. Isso inclui fluxos de memória provenientes de uploads da web, fluxos de campos BLOB de bancos de dados ou fluxos criados por bibliotecas de manipulação de imagens. A biblioteca lida automaticamente com todas as etapas de conversão necessárias quando você passa o fluxo para OcrInput ou OcrImageInput.
Qual é a maneira mais simples de realizar OCR em um fluxo de dados em C#?
O método mais rápido é criar um objeto OcrInput com seu fluxo de dados e chamar o método Read: 'using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);'. Este código mínimo realiza o OCR e retorna o texto reconhecido imediatamente.
Por que devo usar fluxos em vez de caminhos de arquivo para OCR?
O OCR baseado em fluxo com IronOCR oferece diversas vantagens: eficiência de memória ao processar dados em blocos, segurança aprimorada ao evitar arquivos temporários em disco, desempenho melhorado ao eliminar a sobrecarga de E/S de arquivos e maior flexibilidade ao trabalhar com uploads da web ou BLOBs de banco de dados.
Posso especificar uma área específica de um fluxo de imagens para leitura?
Sim, o IronOCR permite definir a área de leitura especificando uma região de recorte ao processar fluxos de dados. Esse recurso permite concentrar o OCR em partes específicas da imagem sem processar o documento inteiro, melhorando tanto a velocidade quanto a precisão.
Como o processamento de fluxos de dados se integra com outras bibliotecas de manipulação de imagens?
A abordagem de fluxo do IronOCR integra-se perfeitamente com objetos System.Drawing e outras bibliotecas de manipulação de imagens do .NET. Você pode usar a classe AnyBitmap para converter imagens em fluxos usando o método GetStream, facilitando a combinação de OCR com outros fluxos de trabalho de processamento de imagens.

