Como usar imagens de entrada para processamento OCR em C#

Como ler fluxos de dados em C# para OCR

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

IronOCR lê dados de imagem diretamente de streams em C# passando o stream para os construtores OcrInput ou OcrImageInput, permitindo processamento eficiente de OCR 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.

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronOcr
  2. Copie e execute este trecho de código.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita

    arrow pointer


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);
$vbLabelText   $csharpLabel

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:

  1. Eficiência de memória : Processar dados em partes, em vez de carregar arquivos inteiros na memória.
  2. Segurança : Processe documentos confidenciais sem criar arquivos temporários no disco.
  3. Desempenho : Eliminar a sobrecarga de E/S das operações do sistema de arquivos.
  4. 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);
$vbLabelText   $csharpLabel

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?

Demonstração de OCR: documento no Visualizador de Fotos com o texto extraído 'Capítulo Oito: A Festa de Aniversário de Morte' exibido no console de depuração.

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;
}
$vbLabelText   $csharpLabel

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);
$vbLabelText   $csharpLabel

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");
$vbLabelText   $csharpLabel

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:

  1. Reutilize instâncias IronTesseract: Crie uma única instância e reutilize-a em várias operações
  2. Implementar Rastreamento de Progresso : Para fluxos de dados grandes, utilize o rastreamento de progresso para monitorar o status do processamento.
  3. Processar em Paralelo: IronOCR suporta processamento simultâneo para múltiplos streams
  4. 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 0 antes de passar para IronOCR
  • Descarte: Use instruções using para 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.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Analisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente de Programa Principal - Equipe da Comunidade .NET
Jeff também é Gerente de Programa Principal das equipes do .NET e do Visual Studio. Ele é o produtor executivo da série de conferências virtuais .NET Conf e apresenta o "Fritz and Friends", uma transmissão ao vivo para desenvolvedores que vai ao ar duas vezes por semana, onde ele conversa sobre tecnologia e escreve código junto com os espectadores. Jeff cria workshops, apresentações e planeja conteúdo para os maiores eventos de desenvolvedores da Microsoft, incluindo o Microsoft Build, o Microsoft Ignite, a .NET Conf e o Microsoft MVP Summit.
Pronto para começar?
Nuget Downloads 5,525,971 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.