Como usar imagens de desenho do sistema para processamento OCR em C#

Como ler objetos System.Drawing em C

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

IronOCR permite ler texto de System.Drawing objetos como Bitmap e Image envolvendo-os em OcrImageInput, proporcionando funcionalidade OCR perfeita para aplicações .NET nas plataformas Windows, macOS e Linux.

System.Drawing.Bitmap é uma classe no .NET Framework usada para trabalhar com imagens bitmap. Ele fornece métodos e propriedades para criar, manipular e exibir imagens bitmap.

System.Drawing.Image é uma classe base para todos os objetos de imagem GDI+ no .NET Framework. É a classe pai para vários tipos de imagem, incluindo System.Drawing.Bitmap.

IronSoftware.Drawing.AnyBitmap é uma classe bitmap em IronDrawing, uma biblioteca de código aberto originalmente desenvolvida por Iron Software. Ajuda engenheiros de software C# a substituir System.Drawing.Common em projetos .NET nas plataformas Windows, macOS e Linux.

Início rápido: Ler texto de um System.Drawing.Bitmap

Com uma única instrução, crie um IronTesseract e alimente-o com um System.Drawing.Bitmap envolvido por OcrImageInput para extrair todo o texto. Este exemplo de início rápido demonstra como o IronOCR converte imagens em texto legível com configuração mínima.

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

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

    var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));
  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 um arquivo System.Drawing.Bitmap?

Primeiro, instancie a classe IronTesseract para realizar OCR. Crie um System.Drawing.Bitmap a partir de um dos vários métodos. No exemplo de código, é utilizado um caminho de arquivo.

Em seguida, use a instrução using para criar o objeto OcrImageInput, passando a imagem do objeto System.Drawing.Bitmap para ele. Finalmente, use o método Read para realizar OCR.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs
using IronOcr;
using System.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to Bitmap
Bitmap bitmap = new Bitmap("Potter.tiff");

// Import System.Drawing.Bitmap
using var imageInput = new OcrImageInput(bitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

Por que a instrução using é importante para o OcrImageInput?

A instrução using é crucial ao trabalhar com OcrImageInput porque garante o gerenciamento adequado de recursos e a limpeza de memória. OcrImageInput implementa IDisposable, o que significa que contém recursos não gerenciados que precisam ser liberados ao término do uso do objeto. Sem a instrução using, esses recursos podem não ser liberados prontamente, levando potencialmente a vazamentos de memória ou bloqueios de arquivo. Isso é particularmente importante ao processar várias imagens em operações em lote. Para obter mais detalhes sobre o gerenciamento adequado de recursos no IronOCR, consulte nossa documentação de referência da API .

Quais são os métodos comuns de carregamento de Bitmaps?

System.Drawing.Bitmap fornece vários métodos de carregamento além do construtor de caminho de arquivo usado em nosso exemplo. Você pode criar Bitmaps a partir de streams (new Bitmap(stream)), de Images existentes (new Bitmap(image)), ou até mesmo criar bitmaps em branco com dimensões específicas (new Bitmap(width, height)). Ao trabalhar com aplicações web, o carregamento a partir de fluxos de dados é particularmente útil para processar arquivos enviados. Para recursos incorporados, você pode usar Assembly.GetManifestResourceStream(). IronOCR lida com todas essas fontes Bitmap perfeitamente através do construtor OcrImageInput. Saiba mais sobre os diferentes métodos de entrada em nosso guia de Imagens (jpg, png, gif, tiff, bmp) .

Quando devo descartar o objeto Bitmap?

O momento de descarte do bitmap depende do fluxo de trabalho do seu aplicativo. Se você precisar apenas do Bitmap para OCR, descarte-o imediatamente após criar o OcrImageInput. No entanto, se precisar realizar várias operações ou exibir a imagem, mantenha o navegador ativo até que todas as operações sejam concluídas. Sempre use instruções using ou blocos try-finally para garantir o descarte. Lembre-se de que OcrImageInput cria sua própria cópia interna, para que o Bitmap original possa ser descartado após a criação de OcrImageInput. Para cenários complexos que envolvem múltiplas operações de imagem, considere nossos exemplos de Filtros de Otimização de Imagem OCR .

Como faço para ler um arquivo System.Drawing.Image?

Ler de um System.Drawing.Image é tão simples quanto criar o objeto OcrImageInput com o Image e depois realizar o processo padrão de OCR usando o método Read.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs
using IronOcr;
using Image = System.Drawing.Image;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as Image
Image image = Image.FromFile("Potter.tiff");

// Import System.Drawing.Image
using var imageInput = new OcrImageInput(image);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

Qual a diferença entre Imagem e Bitmap para OCR?

Enquanto System.Drawing.Bitmap é uma implementação específica para imagens bitmap, System.Drawing.Image é uma classe base abstrata que pode representar vários formatos de imagem, incluindo JPEG, PNG, GIF e TIFF. Para fins de OCR, IronOCR trata ambos de forma idêntica através do OcrImageInput, mas Image fornece mais flexibilidade ao trabalhar com diferentes formatos. Bitmap oferece capacidades de manipulação em nível de pixel, enquanto Image é melhor para manuseio geral de imagens. Ambos funcionam igualmente bem com o mecanismo avançado Tesseract 5 do IronOCR. A escolha depende das suas necessidades de aplicação em geral, e não do desempenho do OCR.

Por que usar Image.FromFile em vez de outros métodos de carregamento?

Image.FromFile é o método mais simples e direto para carregar imagens do disco. Ele detecta automaticamente o formato da imagem e gerencia o processo de leitura do arquivo. Métodos alternativos como Image.FromStream são melhores para aplicações web ou ao trabalhar com streams de memória. Image.FromFile bloqueia o arquivo até que o Image seja descartado, o que pode ser uma consideração em aplicações multi-thread. Para cenários de produção que exigem alto desempenho ou acesso simultâneo, considere carregar as imagens em fluxos de memória primeiro. Nosso exemplo de OCR Tesseract multithread demonstra as melhores práticas para processamento simultâneo de imagens.

Como faço para ler um arquivo IronSoftware.Drawing.AnyBitmap?

Da mesma forma, após criar ou obter um objeto AnyBitmap, você pode construir a classe OcrImageInput. O construtor irá lidar com todas as etapas necessárias para importar os dados. O exemplo de código abaixo demonstra isso.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import IronSoftware.Drawing.AnyBitmap
using var imageInput = new OcrImageInput(anyBitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

Por que escolher AnyBitmap em vez das classes System.Drawing?

AnyBitmap oferece superior compatibilidade entre plataformas em comparação com classes System.Drawing. Enquanto System.Drawing.Common tem suporte limitado em plataformas não Windows no .NET 6+, AnyBitmap funciona perfeitamente em Windows, Linux e macOS. Ela fornece uma API consistente sem dependências específicas de plataforma, tornando-a ideal para implantações em nuvem e aplicativos conteinerizados. AnyBitmap também oferece melhor gerenciamento de memória e otimizações de desempenho especificamente projetadas para tarefas de processamento de imagens. Para obter informações detalhadas sobre compatibilidade, consulte nossa documentação de compatibilidade .

Quais plataformas o AnyBitmap suporta?

AnyBitmap suporta todas as principais plataformas onde o .NET é executado: Windows (x86, x64, ARM), Linux (incluindo Alpine Linux para Docker) e macOS (tanto Intel quanto Apple Silicon). Essa ampla compatibilidade com plataformas faz dele a escolha recomendada para aplicações .NET modernas que precisam ser executadas em diversos ambientes. É particularmente valioso para implantações em nuvem no AWS Lambda ou no Azure Functions. Saiba mais sobre a configuração específica da plataforma em nossos guias para ambientes Linux , macOS e Docker .

Como o AnyBitmap gerencia a memória?

AnyBitmap implementa gerenciamento de memória eficiente através de integração de coleta de lixo automática e padrões de descarte explícitos. Ele utiliza o agrupamento de memória para buffers alocados com frequência e implementa a semântica de cópia sob demanda (copy-on-write) para melhor desempenho. Ao contrário de System.Drawing.Bitmap que pode manter bloqueios de arquivo, AnyBitmap carrega imagens completamente na memória, prevenindo problemas de acesso a arquivos. Isso também proporciona um melhor controle sobre o uso da memória em cenários de alto desempenho. Para aplicações que processam grandes volumes de imagens, a eficiência de memória de AnyBitmap pode reduzir significativamente a pegada geral de memória. Consulte nosso guia System.Drawing.Common Alternatives para dicas de migração.

Como posso especificar uma região de varredura?

Na construção da classe OcrImageInput, você pode especificar a área a ser escaneada. Isso permite definir a região específica do documento de imagem para OCR. Dependendo do documento de imagem, especificar a região de digitalização pode melhorar significativamente o desempenho. No exemplo de código fornecido, apenas o número e o título do capítulo são extraídos.

:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
$vbLabelText   $csharpLabel

Quando devo usar a varredura de região para obter melhor desempenho?

A digitalização regional melhora drasticamente o desempenho quando você precisa apenas de texto de áreas específicas em layouts de documentos consistentes. Os casos de uso comuns incluem a extração de cabeçalhos, campos de formulário, totais de faturas ou informações de cartões de identificação. Os ganhos de desempenho são mais significativos com imagens grandes, onde o texto ocupa uma pequena porção. Para uma fatura de 3000x4000 pixels, digitalizar apenas a região do valor total pode ser de 10 a 20 vezes mais rápido do que o OCR de página inteira. A varredura regional também melhora a precisão, eliminando possíveis ruídos de outras áreas. Para mais exemplos baseados em regiões, consulte nosso guia Áreas de Conteúdo e Regiões de Cultivo com PDFs .

Como faço para determinar as coordenadas corretas para minha região?

Determinar coordenadas requer entender que Rectangle usa o formato (X, Y, Largura, Altura), onde (0,0) é o canto superior esquerdo. Comece abrindo sua imagem em um editor de imagens que exiba as coordenadas do cursor. Como alternativa, utilize os recursos de depuração do IronOCR para visualizar as regiões de texto detectadas. Para layouts dinâmicos, considere usar IronOCR para realizar uma varredura completa primeiro e depois analisar o OcrResult para encontrar posições de texto programaticamente. Nosso exemplo "Textos Destacados para Depuração" mostra como visualizar regiões de OCR para uma determinação precisa de coordenadas.

O que acontece se a região ultrapassar os limites da imagem?

Quando uma região específica ultrapassa os limites da imagem, o IronOCR a recorta automaticamente para se ajustar à área válida da imagem. Por exemplo, se sua imagem tiver 1000x1000 pixels e você especificar um retângulo em (900, 900, 200, 200), o IronOCR processará apenas a área de (900, 900) a (1000, 1000). Esse recorte automático evita erros, mas pode resultar em extração de texto incompleta se suas coordenadas estiverem incorretas. Sempre verifique se suas regiões correspondem às dimensões reais da imagem. Para tamanhos de imagem dinâmicos, calcule as regiões como porcentagens em vez de pixels fixos. O guia "Região OCR de uma Imagem" fornece mais exemplos de como lidar com regiões de forma segura.

Resultado do OCR

Demonstração de extração OCR mostrando o texto do capítulo de Harry Potter no Visualizador de Fotos e a saída extraída no console de depuração.

Perguntas frequentes

Como extrair texto de um System.Drawing.Bitmap usando OCR em C#?

O IronOCR facilita a extração de texto de objetos System.Drawing.Bitmap. Primeiro, instancie a classe IronTesseract, depois envolva seu Bitmap em um objeto OcrImageInput usando uma instrução using e, finalmente, chame o método Read. O código mínimo é: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));

Por que a instrução `using` é importante ao trabalhar com `OcrImageInput`?

A declaração `using` é crucial porque `OcrImageInput` implementa `IDisposable` e mantém recursos não gerenciados que precisam de limpeza adequada. Sem ela, você corre o risco de vazamentos de memória ou bloqueios de arquivos, especialmente ao processar várias imagens. O `OcrImageInput` do IronOCR requer o descarte adequado para garantir o gerenciamento eficiente de recursos em seus aplicativos .NET.

Posso realizar OCR em objetos System.Drawing.Image?

Sim, o IronOCR suporta OCR em objetos System.Drawing.Image, já que Image é a classe base para Bitmap. Basta envolver seu objeto Image em OcrImageInput da mesma forma que você faria com um Bitmap, e o IronOCR extrairá o texto perfeitamente em plataformas Windows, macOS e Linux.

O que é IronSoftware.Drawing.AnyBitmap e como se relaciona com OCR?

IronSoftware.Drawing.AnyBitmap é uma classe bitmap da biblioteca IronDrawing, de código aberto, que ajuda a substituir System.Drawing.Common em projetos .NET. Ela oferece compatibilidade multiplataforma com Windows, macOS e Linux, sendo ideal para uso com o IronOCR quando você precisa de um processamento de imagem consistente em diferentes sistemas operacionais.

Posso especificar uma área específica de uma imagem para extração de texto?

Sim, o IronOCR permite definir áreas de leitura específicas especificando regiões de recorte. Esse recurso permite concentrar o processamento de OCR em seções específicas dos seus objetos System.Drawing, melhorando o desempenho e a precisão quando você precisa apenas do texto de partes específicas de uma imagem.

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.