Ir para o conteúdo do rodapé
UTILIZANDO O IRONOCR

Como ler texto de uma imagem em Blazor

O framework Blazor é desenvolvido pela equipe ASP.NET, que é usado para desenvolver aplicações web interativas com UI usando HTML e C# ao invés de JavaScript. O Blazor executa código C# diretamente no navegador da web usando WebAssembly. Isso facilita a construção e desenvolvimento de componentes com lógica e o seu reuso repetidas vezes. É um framework popular entre desenvolvedores para criar UI em C#.

Neste artigo, vamos criar um aplicativo Blazor Server para ler texto de arquivos de imagem usando o Reconhecimento Óptico de Caracteres (OCR) com IronOCR.

Como ler texto de imagem usando reconhecimento óptico de caracteres no Blazor?

Pré-requisitos

  1. Tenha a versão mais recente do Visual Studio. Você pode baixá-lo a partir deste link.
  2. Carga de trabalho de Desenvolvimento ASP.NET e Web. Ao instalar o Visual Studio, selecione a carga de trabalho de Desenvolvimento ASP.NET e Web para instalação, pois é necessária para este projeto.
  3. Biblioteca IronOCR C#. Vamos usar o IronOCR para converter dados de imagem em texto legível por máquina. Você pode baixar o arquivo .DLL do pacote IronOCR diretamente do site da Iron ou baixá-lo do site do NuGet. Uma maneira mais conveniente de baixar e instalar o IronOCR é a partir do Gerenciador de Pacotes NuGet no Visual Studio.

Criar um App Blazor Server

Abra o Visual Studio e siga os passos para criar um App Blazor Server:

  1. Clique em Criar um Novo Projeto e, em seguida, selecione "Blazor Server App" dos modelos de projeto listados.

Como Ler Texto de Imagem no Blazor, Figura 1: Criar um novo Blazor Server App no Visual Studio Crie um novo App Blazor Server no Visual Studio

  1. Em seguida, nomeie seu projeto de forma apropriada. Aqui, estamos chamando de BlazorReadText.

Como Ler Texto de Imagem no Blazor, Figura 2: Configurar o projeto Blazor Configure o projeto Blazor

  1. Finalmente, defina as informações adicionais e clique em Criar.

Como Ler Texto de Imagem no Blazor, Figura 3: Selecionando Long Term Support .NET Framework e informações adicionais para o projeto Selecionando suporte de longo prazo do .NET Framework e informações adicionais para o projeto

O App Blazor Server está agora criado. Agora precisamos instalar os pacotes necessários antes de extrair os dados da imagem usando o IronOCR.

Adicionando Pacotes Necessários

BlazorInputFile

O primeiro passo é instalar o pacote BlazorInputFile. É um componente para aplicativos Blazor e é usado para fazer upload de arquivos únicos ou múltiplos para o servidor. Este componente será usado para fazer o upload de um arquivo de imagem na página Razor no aplicativo Blazor. Abra Gerenciar Pacotes NuGet para Soluções e procure por BlazorInputFile.

Como Ler Texto de Imagem no Blazor, Figura 4: Instalar pacote BlazorInputFile Instalar pacote BlazorInputFile

Marque a caixa de seleção para o projeto e clique em Instalar.

Agora, abra o arquivo _Host.cshtml na pasta Pages e adicione o seguinte arquivo JavaScript:

<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
HTML

Como Ler Texto de Imagem no Blazor, Figura 5: Navegar para arquivo _Host.cshtml do Solution Explorer Navegar para arquivo _Host.cshtml do Solution Explorer

Finalmente, adicione o seguinte código no arquivo _Imports.razor.

@using BlazorInputFile
@using BlazorInputFile
$vbLabelText   $csharpLabel

IronOCR

IronOCR é uma biblioteca C# para escanear e ler imagens em diferentes formatos. Ela oferece a funcionalidade de trabalhar com imagens em mais de 125 idiomas globais.

Para instalar o IronOCR, abra o Gerenciador de Pacotes NuGet e procure por IronOCR. Selecione o projeto e clique no botão Instalar.

Como Ler Texto de Imagem no Blazor, Figura 6: Instalar pacote IronOcr no Gerenciador de Pacotes NuGet Instalar pacote IronOcr no Gerenciador de Pacotes NuGet

Adicione o namespace IronOCR no arquivo _Imports.razor:

@using IronOCR
@using IronOCR
$vbLabelText   $csharpLabel

Criar Componente de UI Blazor

Um componente representa uma interface de usuário com lógica de negócios para exibir comportamento dinâmico. O Blazor usa Componentes Razor para construir seus aplicativos. Esses componentes podem ser aninhados, reutilizados e compartilhados entre projetos. Por padrão, as páginas Counter e FetchData são fornecidas na aplicação; removendo aqueles para simplicidade.

Clique com o botão direito na pasta pages sob a aplicação BlazorReadText, e então selecione Adicionar > Componente Razor. Se você não encontrar o Componente Razor, clique em Novo Item e, nos componentes C#, selecione "Componente Razor". Nomeie o componente como "OCR.razor" e clique em Adicionar.

Como Ler Texto de Imagem no Blazor, Figura 7: Adicionar novo Componente Razor Adicionar novo Componente Razor

Uma boa prática é separar o código desta página Razor como em outra classe. Novamente, clique com o botão direito na pasta de páginas e selecione Adicionar > Classe. Nomeie a classe com o mesmo nome da página e clique em Adicionar. O Blazor é um framework inteligente, e ele marca esta classe com a página que compartilha o mesmo nome.

Como Ler Texto de Imagem no Blazor, Figura 8: Criar um arquivo de código OCR.razor.cs para o Componente Razor OCR.razor Criar um arquivo de código OCR.razor.cs para o Componente Razor OCR.razor

Agora, vamos passar para a implementação do código real que irá ler dados da imagem usando IronOCR.

Código Fonte do Componente UI Blazor OCR.razor para Ler Dados de Imagem

Para reconhecer texto em uma imagem, envie a imagem, converta-a em dados binários e, em seguida, aplique o método IronOCR para extrair o texto.

Abra a classe OCR.razor.cs e escreva o seguinte código fonte de exemplo:

using BlazorInputFile;
using Microsoft.AspNetCore.Components;
using IronOcr;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace BlazorReadText.Pages
{
    public class OCRModel : ComponentBase
    {
        // Holds the extracted text from the image
        protected string imageText;

        // Holds the base64 string preview of the image
        protected string imagePreview;

        // Byte array to store uploaded image data
        private byte[] imageFileBytes;

        // Default status message for file upload
        const string DefaultStatus = "Maximum size allowed for the image is 4 MB";
        protected string status = DefaultStatus;

        // Maximum file size allowed (4MB)
        const int MaxFileSize = 4 * 1024 * 1024;

        // Method to handle image preview and size/type validation
        protected async Task ViewImage(IFileListEntry[] files)
        {
            var file = files.FirstOrDefault();
            if (file == null)
            {
                return;
            }

            if (file.Size > MaxFileSize)
            {
                status = $"The file size is {file.Size} bytes, which exceeds the allowed limit of {MaxFileSize} bytes.";
                return;
            }

            if (!file.Type.Contains("image"))
            {
                status = "Please upload a valid image file.";
                return;
            }

            using (var memoryStream = new MemoryStream())
            {
                await file.Data.CopyToAsync(memoryStream);
                imageFileBytes = memoryStream.ToArray();
                string base64String = Convert.ToBase64String(imageFileBytes, 0, imageFileBytes.Length);
                imagePreview = $"data:image/png;base64,{base64String}";
                status = DefaultStatus;
            }
        }

        // Method to extract text from the uploaded image using IronOCR
        protected private async Task GetText()
        {
            if (imageFileBytes != null)
            {
                using (var ocr = new IronTesseract())
                using (var input = new OcrInput(imageFileBytes))
                {
                    OcrResult result = ocr.Read(input);
                    imageText = result.Text;
                }
            }
        }
    }
}
using BlazorInputFile;
using Microsoft.AspNetCore.Components;
using IronOcr;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace BlazorReadText.Pages
{
    public class OCRModel : ComponentBase
    {
        // Holds the extracted text from the image
        protected string imageText;

        // Holds the base64 string preview of the image
        protected string imagePreview;

        // Byte array to store uploaded image data
        private byte[] imageFileBytes;

        // Default status message for file upload
        const string DefaultStatus = "Maximum size allowed for the image is 4 MB";
        protected string status = DefaultStatus;

        // Maximum file size allowed (4MB)
        const int MaxFileSize = 4 * 1024 * 1024;

        // Method to handle image preview and size/type validation
        protected async Task ViewImage(IFileListEntry[] files)
        {
            var file = files.FirstOrDefault();
            if (file == null)
            {
                return;
            }

            if (file.Size > MaxFileSize)
            {
                status = $"The file size is {file.Size} bytes, which exceeds the allowed limit of {MaxFileSize} bytes.";
                return;
            }

            if (!file.Type.Contains("image"))
            {
                status = "Please upload a valid image file.";
                return;
            }

            using (var memoryStream = new MemoryStream())
            {
                await file.Data.CopyToAsync(memoryStream);
                imageFileBytes = memoryStream.ToArray();
                string base64String = Convert.ToBase64String(imageFileBytes, 0, imageFileBytes.Length);
                imagePreview = $"data:image/png;base64,{base64String}";
                status = DefaultStatus;
            }
        }

        // Method to extract text from the uploaded image using IronOCR
        protected private async Task GetText()
        {
            if (imageFileBytes != null)
            {
                using (var ocr = new IronTesseract())
                using (var input = new OcrInput(imageFileBytes))
                {
                    OcrResult result = ocr.Read(input);
                    imageText = result.Text;
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

No código acima:

  • O método ViewImage é usado para lidar com o arquivo de imagem enviado. Ele valida se o arquivo é uma imagem e verifica se o tamanho atende ao limite especificado. Se ocorrer algum erro no tamanho do arquivo ou no tipo de arquivo, ele é tratado usando um bloco if-else. A imagem é então copiada para um MemoryStream e convertida em um array de bytes, pois IronOcr.OcrInput pode aceitar uma imagem em formato binário.
  • O método GetText utiliza o IronOCR para extrair texto da imagem de entrada. IronOCR emprega o motor Tesseract 5 e suporta mais de 125 idiomas.

O texto extraído é armazenado na variável imageText para exibição. A biblioteca suporta imagens de texto em inglês sem configuração adicional. Você pode aprender mais sobre o uso de diferentes idiomas nesta página de exemplo de código.

Código Fonte do Componente UI Frontend do Blazor

Em seguida, crie a UI para a aplicação. Abra o arquivo OCR.razor e escreva o seguinte código:

@page "/IronOCR"
@inherits OCRModel

<h2>Optical Character Recognition (OCR) Using Blazor and IronOCR Software</h2>

<div class="row">
    <div class="col-md-5">
        <textarea disabled class="form-control" rows="10" cols="15">@imageText</textarea>
    </div>
    <div class="col-md-5">
        <div class="image-container">
            <img class="preview-image" width="800" height="500" src=@imagePreview>
        </div>
        <BlazorInputFile.InputFile OnChange="@ViewImage" />
        <p>@status</p>
        <hr />
        <button class="btn btn-primary btn-lg" @onclick="GetText">
            Extract Text
        </button>
    </div>
</div>

No código acima, a UI inclui:

  • Uma tag de arquivo de entrada para escolher um arquivo de imagem.
  • Uma tag de imagem para exibir a imagem.
  • Um botão que aciona o método GetText.
  • Uma área de texto para exibir o texto extraído dos dados da imagem.

Por fim, adicione um link para a página OCR.razor no arquivo NavMenu.razor na pasta Shared:

<div class="nav-item px-3">
    <NavLink class="nav-link" href="IronOCR">
        <span class="oi oi-plus" aria-hidden="true"></span> Read Image Text
    </NavLink>
</div>
<div class="nav-item px-3">
    <NavLink class="nav-link" href="IronOCR">
        <span class="oi oi-plus" aria-hidden="true"></span> Read Image Text
    </NavLink>
</div>
HTML

Remova os links para Counter e FetchData, pois eles não são necessários.

Tudo está agora completo e pronto para uso. Pressione F5 para executar a aplicação.

A interface deve aparecer conforme mostrado abaixo:

Como Ler Texto de Imagem no Blazor, Figura 9: A interface do usuário do Blazor Server App A interface do App do Servidor Blazor

Vamos enviar uma imagem e extrair o texto para visualizar o resultado.

Como Ler Texto de Imagem no Blazor, Figura 10: Imagem carregada e textos extraídos Imagens enviadas e textos extraídos

O texto de saída está limpo e pode ser copiado da área de texto.

Resumo

Este artigo demonstrou como criar um Componente UI Blazor com código por trás dele na Aplicação Server Blazor para ler textos de imagens. O IronOCR é uma biblioteca versátil para extrair texto em qualquer aplicação baseada em C#. Ele suporta o mais recente .NET Framework e pode ser bem utilizado com aplicações Razor. IronOCR é uma biblioteca multiplataforma suportada no Windows, Linux, macOS, Docker, Azure, AWS e MAUI. Além disso, IronOCR oferece alta precisão usando os melhores resultados do Tesseract, sem configurações adicionais. Ele suporta TIFF em quadros múltiplos, arquivos PDF e todos os formatos de imagem populares. Também é possível ler valores de código de barras a partir de imagens.

Você também pode experimentar o IronOCR gratuitamente em uma avaliação gratuita. Baixe a biblioteca de software aqui.

Perguntas frequentes

Como posso ler o texto de uma imagem em um aplicativo Blazor Server?

Você pode usar o IronOCR para ler texto de uma imagem em um aplicativo Blazor Server. Primeiro, carregue a imagem usando o pacote BlazorInputFile e, em seguida, use o método GetText do IronOCR para extrair o texto da imagem.

Quais são os passos necessários para configurar um aplicativo Blazor Server para OCR?

Para configurar um aplicativo Blazor Server para OCR, certifique-se de ter o Visual Studio com a carga de trabalho ASP.NET e Desenvolvimento Web. Em seguida, crie um novo aplicativo Blazor Server e instale o IronOCR por meio do Gerenciador de Pacotes NuGet.

Como faço para lidar com o envio de arquivos em uma aplicação Blazor?

O gerenciamento de uploads de arquivos em uma aplicação Blazor pode ser feito utilizando o pacote BlazorInputFile. Este pacote permite o upload de um ou múltiplos arquivos, o que é essencial para o processamento de imagens para OCR.

O IronOCR suporta vários idiomas na extração de texto?

Sim, o IronOCR suporta vários idiomas para extração de texto. Ele utiliza o mecanismo Tesseract 5, que permite alta precisão no reconhecimento de texto em diversos idiomas a partir de imagens.

Quais são as vantagens de usar o IronOCR em aplicações multiplataforma?

O IronOCR oferece diversas vantagens para aplicações multiplataforma, incluindo compatibilidade com Windows, Linux, macOS, Docker, Azure, AWS e MAUI. Isso o torna uma opção versátil para OCR em diversos ambientes.

Como extrair texto de uma imagem usando o IronOCR em um componente Blazor?

Em um componente Blazor, você pode extrair texto de uma imagem primeiro carregando o arquivo de imagem e, em seguida, usando a classe OCR.razor.cs para chamar o método GetText do IronOCR, que processa a imagem e extrai o texto.

Quais são os componentes principais de uma interface de usuário Blazor para funcionalidade de OCR?

Uma interface de usuário Blazor para funcionalidade OCR inclui uma tag de entrada de arquivo para selecionar imagens, uma tag de imagem para pré-visualização, um botão para iniciar o processo de OCR e uma área de texto para exibir o texto extraído.

Como faço para navegar até a página de OCR em um aplicativo Blazor?

Para navegar até a página de OCR em um aplicativo Blazor, adicione um item de navegação no arquivo NavMenu.razor localizado na pasta Shared. Inclua um NavLink que aponte para a página de OCR.

Kannaopat Udonpant
Engenheiro de Software
Antes de se tornar Engenheiro de Software, Kannapat concluiu um doutorado em Recursos Ambientais pela Universidade de Hokkaido, no Japão. Durante o doutorado, Kannapat também integrou o Laboratório de Robótica Veicular, que faz parte do Departamento de Engenharia de Bioprodução. Em 2022, ele utilizou suas habilidades ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me