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
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@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
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@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;
                }
            }
        }
    }
}
Imports BlazorInputFile
Imports Microsoft.AspNetCore.Components
Imports IronOcr
Imports System.IO
Imports System.Linq
Imports System.Threading.Tasks

Namespace BlazorReadText.Pages
	Public Class OCRModel
		Inherits ComponentBase

		' Holds the extracted text from the image
		Protected imageText As String

		' Holds the base64 string preview of the image
		Protected imagePreview As String

		' Byte array to store uploaded image data
		Private imageFileBytes() As Byte

		' Default status message for file upload
		Private Const DefaultStatus As String = "Maximum size allowed for the image is 4 MB"
		Protected status As String = DefaultStatus

		' Maximum file size allowed (4MB)
		Private Const MaxFileSize As Integer = 4 * 1024 * 1024

		' Method to handle image preview and size/type validation
		Protected Async Function ViewImage(ByVal files() As IFileListEntry) As Task
			Dim file = files.FirstOrDefault()
			If file Is Nothing Then
				Return
			End If

			If file.Size > MaxFileSize Then
				status = $"The file size is {file.Size} bytes, which exceeds the allowed limit of {MaxFileSize} bytes."
				Return
			End If

			If Not file.Type.Contains("image") Then
				status = "Please upload a valid image file."
				Return
			End If

			Using memoryStream As New MemoryStream()
				Await file.Data.CopyToAsync(memoryStream)
				imageFileBytes = memoryStream.ToArray()
				Dim base64String As String = Convert.ToBase64String(imageFileBytes, 0, imageFileBytes.Length)
				imagePreview = $"data:image/png;base64,{base64String}"
				status = DefaultStatus
			End Using
		End Function

		' Method to extract text from the uploaded image using IronOCR
		Private Protected Async Function GetText() As Task
			If imageFileBytes IsNot Nothing Then
				Using ocr = New IronTesseract()
				Using input = New OcrInput(imageFileBytes)
					Dim result As OcrResult = ocr.Read(input)
					imageText = result.Text
				End Using
				End Using
			End If
		End Function
	End Class
End Namespace
$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

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim