Ir para o conteúdo do rodapé
COMPARAR COM OUTROS COMPONENTES

Uma comparação entre o IronOCR e o Dynamsoft OCR.

O Reconhecimento Óptico de Caracteres, ou OCR, é um processo de entrada de dados que envolve o reconhecimento e digitalização de texto, tanto escrito quanto impresso. É um tipo de tecnologia computacional que emprega análise de imagem para converter fotografias digitais de texto impresso em letras e números que podem ser usados por outros programas, como processadores de texto. O texto é convertido em códigos de caracteres para que possa ser pesquisado e alterado em um computador.

Enquanto o passado era um mundo onde todos os documentos eram físicos, e o futuro pode ser uma sociedade onde todos os documentos são digitais, o presente está em fluxo. Documentos físicos e digitais coexistem neste estado de transição — por isso, tecnologias como OCR são essenciais para a conversão de ida e volta.

Recuperação de documentos, entrada de dados e acessibilidade são apenas algumas das aplicações para OCR. A maioria das aplicações de OCR vem de papéis escaneados, embora fotografias também sejam ocasionalmente empregadas. OCR é uma economia de tempo valiosa, pois reescrever o material é muitas vezes a única outra opção. A seguir estão alguns exemplos de como o OCR pode ser usado:

  • Arquivos de texto editáveis podem ser recuperados de documentos escaneados, incluindo faxes.
  • Uso de escaneamentos de livros para criar e-books pesquisáveis e editáveis.
  • Uso de fotos de capturas de tela para buscar e alterar texto.
  • Tecnologia de texto para fala é usada para ler livros para pessoas com deficiência visual.

Embora estes sejam apenas alguns das aplicações para OCR, eles demonstram a versatilidade da tecnologia em uma ampla gama de indústrias. Quase todos os funcionários em todas as empresas dependem substancialmente de documentos diariamente, portanto, o uso empresarial é uma consideração chave no desenvolvimento de sistemas OCR.

Neste artigo, vamos comparar os dois leitores OCR mais poderosos:

  • IronOCR
  • Dynamsoft OCR

IronOCR e Dynamsoft OCR são duas bibliotecas OCR .NET que suportam a conversão de imagens escaneadas e o processamento de documentos PDF. Você pode transformar imagens em texto pesquisável com apenas algumas linhas de código. Você também pode recuperar palavras, letras e parágrafos individuais.

IronOCR — os recursos excepcionais

IronOCR oferece a capacidade única de detectar, ler e interpretar texto de fotos e documentos PDF que não foram escaneados precisamente. IronOCR oferece a abordagem mais simples para extrair texto de documentos e fotos, mesmo que não seja sempre o mais rápido, pois ele automaticamente aprimora e corrige escaneamentos de baixa qualidade, reduzindo inclinação, distorção, ruído de fundo e problemas de perspectiva, enquanto também melhora a resolução e o contraste.

IronOCR permite que os desenvolvedores o enviem imagens escaneadas de uma ou várias páginas, e ele retornará todo o texto, códigos de barras e informações de QR. Um conjunto de classes na biblioteca OCR adiciona capacidade OCR a aplicações baseadas na web, desktop ou console. O Tesseract OCR C#, bem como os aplicativos net JPG, PNG, TIFF, PDF, GIF e BMP, são apenas alguns dos formatos que podem ser usados como entrada.

O motor de Reconhecimento Óptico de Caracteres (OCR) do IronOCR pode ler texto preparado usando muitas fontes comuns, itálicos, pesos e sublinhados. Classes de recorte tornam possível que o OCR funcione rápida e precisamente. Ao trabalhar com documentos de várias páginas, o mecanismo multithreading do IronOCR acelera a OCR.

Recursos do IronOCR

Para gerenciamento de Tesseract, utilizamos o IronOCR porque é único nas seguintes formas:

  • Funciona imediatamente no .NET puro
  • Não requer que o Tesseract seja instalado na sua máquina
  • Executa os mecanismos mais recentes: Tesseract 5 (assim como Tesseract 4 e 3)
  • Está disponível para qualquer projeto .NET: .NET Framework 4.5+, .NET Standard 2+ e .NET Core 2, 3 & .NET 5
  • Tem precisão e velocidade melhoradas em relação ao Tesseract tradicional
  • Suporta Xamarin, Mono, Azure e Docker
  • Gerencia o complexo sistema de dicionário do Tesseract usando pacotes NuGet
  • Suporta PDFs, Tiffs MultiFrame e todos os principais formatos de imagem sem configuração
  • Pode corrigir digitalizações de baixa qualidade e inclinadas para obter os melhores resultados do Tesseract.

Dynamsoft OCR — recursos

A biblioteca Dynamsoft.NET OCR é um componente .NET que fornece reconhecimento óptico de caracteres rápido e confiável. É usada para criar aplicativos de desktop .NET em C# ou VB.NET. Você pode simplesmente criar código para converter o texto inútil em PDF ou fotos em texto digital para edição, pesquisa, arquivamento e muito mais usando as APIs básicas do OCR.

Imagens de scanners e outros dispositivos compatíveis com TWAIN podem ser adquiridas das seguintes formas:

  • Os mecanismos de transferência de imagem de memória nativa, em buffer e arquivo de disco são todos suportados.
  • Com o alimentador de documentos automático, é possível a digitalização em lote (ADF).
  • Os atributos TWAIN podem ser usados para modificar funcionalidades comuns do dispositivo.
  • IfAutoFeed, IfAutoScan, Resolution, BitDepth, Brightness, Contrast, Unit, Duplex e outros recursos podem ser alterados.
  • Suporta a detecção de páginas em branco.
  • Permite que você altere e salve perfis de scanner.

Capturar imagens de webcams compatíveis com UVC e WIA:

  • Mostre um feed de vídeo ao vivo enquanto captura fotos de uma webcam escolhida.
  • Personalize as configurações da câmera: Brightness, Contrast, Hue, Saturation, Sharpness, Gamma, White Balance, Backlight Compensation, Gain, Color Enable, Zoom, Focus, Exposure, Iris, Pan, Tilt, Roll.

Carregamento/Visualização de Imagem Robusto

  • Imagens nos formatos BMP, JPEG, PNG, TIFF e TIFF multipágina podem ser carregadas.
  • Zoom in e out em fotos é suportado.
  • Imagens podem ser recuperadas de um drive local, de um servidor FTP, de um servidor HTTP ou de um banco de dados.
  • Decodificação de imagem para BMP, JPEG, PNG e TIFF usando um dos conjuntos mais abrangentes de componentes de imagem .NET

Salvar e Enviar/Download

  • Permite que você leia e grave fotos sobre um fluxo de arquivo.
  • Suporta salvar fotos capturadas como BMP, JPEG, PNG, TIFF ou TIFF multipágina em um drive local, servidor web ou banco de dados.
  • As compressões RLE, G3/G4, LZW, PackBits e TIFF são todas suportadas.
  • Uploads e downloads HTTPS são suportados.
  • Um dos conjuntos mais extensos de componentes de imagem .NET disponíveis suporta codificação de imagem BMP, JPEG, PNG e TIFF.
  • Permite anexar fotos recém-obtidas a arquivos TIFF existentes.

Ler Texto de PDFs Digitalizados ou Outras Imagens no ASP.NET (Reconhecimento Óptico de Caracteres)

Os clientes querem que o trabalho seja concluído rapidamente no mundo acelerado de hoje. Clientes com projetos urgentes nos contatam frequentemente. Nossa tecnologia pode simplesmente reconhecer o conteúdo de uma imagem e convertê-lo em texto, se o projeto envolver a digitalização de papéis que contêm imagens. O Reconhecimento Óptico de Caracteres (OCR) economiza tempo e dinheiro da sua empresa, além de reduzir erros de entrada de dados.

Usando IronOCR

O IronOCR utiliza a classe IronOcr.IronTesseract para realizar suas conversões de OCR.

Usamos a classe IronOcr.IronTesseract para ler texto de uma imagem e automaticamente retornar seu resultado como uma string neste exemplo básico.

// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

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

Como resultado, o parágrafo seguinte está 100% preciso:

Exemplo Simples do IronOCR

Neste exemplo simples, testaremos a precisão de nossa biblioteca de OCR em C# para ler texto de um PNG
Imagem. Este é um teste muito básico, mas as coisas vão ficar mais complicadas à medida que o tutorial continuar.

A rápida raposa marrom pula sobre o cão preguiçoso

Embora possa parecer simples à primeira vista, há um comportamento sofisticado acontecendo por trás dos bastidores: escaneando a imagem para alinhamento, qualidade e resolução, analisando seus atributos, otimizando o mecanismo de OCR e, finalmente, lendo o texto como um humano faria.

OCR é uma tarefa difícil para uma máquina realizar, e as velocidades de leitura podem ser comparáveis às de um humano. Colocando de outra maneira, OCR não é um procedimento rápido. Neste caso, no entanto, está absolutamente correto.

Precisão dos resultados da aplicação de OCR em C#

Na maioria dos cenários do mundo real, os desenvolvedores quererão que seus projetos rodem o mais rápido possível. Neste cenário, propomos que você utilize as classes OcrInput e IronTesseract do namespace de complementos do IronOCR.

Você pode definir as características exatas de um trabalho de OCR com o OcrInput, como:

  • JPEG, TIFF, GIF, BMP e PNG são apenas alguns dos formatos de imagem que podem ser usados.
  • Importação de documentos PDF em sua totalidade ou em partes
  • Aperfeiçoamento do contraste, resolução e tamanho da imagem
  • Rotação, ruído de escaneamento, ruído digital, distorção e correção de imagens negativas

IronTesseract

Escolha entre centenas de idiomas e dialetos pré-embalados

  • Utilize imediatamente os motores OCR Tesseract 5, 4 ou 3
  • Se estivermos vendo uma captura de tela, um trecho ou o documento inteiro, especifique o tipo de documento
  • Reconhecer códigos de barras
  • PDFs pesquisáveis, HTML Hocr, um DOM, e Strings são todas opções para os resultados de OCR
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

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

Podemos usar isto mesmo em uma digitalização de média qualidade com 100% de precisão.

Exemplo de Escaneamento OCR C# a Partir de TIFF

Como você pode ver, ler texto (e, se desejado, códigos de barras) de uma imagem escaneada como um TIFF foi bastante fácil. A precisão deste trabalho de OCR é de 100 por cento.

Em seguida, tentaremos uma digitalização de qualidade muito inferior da mesma página, com baixa DPI e com muita distorção e ruído digital, bem como danos ao papel original.

Digitalização OCR C# de Baixa Resolução com Ruído Digital

É aqui que o IronOCR realmente se destaca em comparação com outras bibliotecas de OCR como a Tesseract, e descobriremos que outros projetos de OCR evitam discutir o uso de OCR em imagens escaneadas do mundo real, em vez de casos de teste 'perfeitos' criados digitalmente para alcançar 100% de precisão de OCR.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

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

Sem adicionar Input.Deskew() para endireitar a imagem, obtemos uma precisão de 52,5%. Isso não é bom o suficiente.

Adicionar Input.Deskew() nos leva a uma precisão de 99,8%, que é quase tão precisa quanto o OCR de uma digitalização de alta qualidade.

Usando OCR Dynamsoft

Apresentaremos alguns trechos de código para usar o Dynamic Web TWAIN para fazer escaneamento TWAIN e OCR do lado do cliente em JavaScript.

Escanear Imagens

Você pode alterar as configurações de escaneamento e adquirir fotos de escâneres TWAIN usando as APIs simples do Dynamic Web TWAIN.

function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
JAVASCRIPT

Baixar o Módulo Profissional de OCR

Para usar o módulo Profissional de OCR no lado do cliente, será necessário incluir ocrpro.js no cabeçalho e também baixar o DLL do OCR Pro.

<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
HTML

Faça edições no arquivo .js:

// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
JAVASCRIPT

Reconhecer texto usando OCR

Usar a API de reconhecimento OCR em JS para extrair texto de imagens escaneadas é tão simples quanto inserir o código abaixo.

// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
JAVASCRIPT

Lendo Regiões Recortadas de Imagens

Ambos os conjuntos de software oferecem soluções para recortar imagens para OCR.

Lendo regiões recortadas com IronOCR

O ramo do Tesseract OCR da Iron é hábil em ler regiões específicas de imagens, como mostrado na amostra de código a seguir.

Usamos System.Drawing.Rectangle para descrever a região exata de uma imagem a ser lida em pixels.

Ao lidar com um formulário padronizado que é preenchido, e somente uma parte do conteúdo muda de caso para caso, isso pode ser realmente útil.

Escaneando uma Seção de uma Página: Usamos System.Drawing.Rectangle para designar uma região para leitura em um documento, melhorando a velocidade e a precisão.

Exemplo de Escaneamento OCR C# a Partir de TIFF
Exemplo de Escaneamento OCR C# a Partir de TIFF
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
$vbLabelText   $csharpLabel

Isso resulta em um aumento de 41 por cento na velocidade, ao mesmo tempo que nos permite ser mais específicos. Isso é extremamente valioso para aplicativos de OCR .NET envolvendo documentos comparáveis e consistentes, incluindo faturas, recibos, cheques, formulários, solicitações de despesas, e assim por diante.

Ao ler PDFs, ContentAreas (recorte de OCR) também é suportado.

Lendo regiões recortadas com OCR Dynamsoft

Para começar, inicie o Visual Studio e crie um novo C# Windows Forms Application, ou abra um já existente. Precisaremos incluir DynamicDotNetTWAIN.dll, DynamicOCR.dll e o pacote de idioma apropriado.

  1. Navegue até Ferramentas -> Escolher Itens da Caixa de Ferramentas, depois vá até a guia Componentes do .NET Framework, clique no botão Procurar e localize DynamicDotNetTWAIN.dll.

  2. Clique com o botão direito no arquivo do projeto no Solution Explorer e selecione Adicionar-> Item Existente... em seguida, adicione os itens necessários do diretório de recursos OCR.

Este é o código para clicar no botão LoadImage:

private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
$vbLabelText   $csharpLabel

É assim que a aplicação parece:

Demo App de Zone OCR usando Dynamic .NET TWAIN OCR SDK

Sintonia de Desempenho de Imagem

A qualidade da imagem de entrada é o fator mais crucial na velocidade de uma tarefa de OCR. Quanto menor o ruído de fundo e maior o dpi, com um valor de meta de cerca de 200 dpi, mais rápido e preciso será o resultado do OCR.

Técnicas de Processamento de Imagem para Dynamsoft OCR

Precisamos usar OCR em uma variedade de situações, como escanear um número de cartão de crédito com nosso telefone ou extrair texto de documentos em papel. Capacidades de OCR estão incluídas no Reconhecimento de Rótulos Dynamsoft (DLR) e no Dynamic Web TWAIN (DWT).

Embora possam fazer um excelente trabalho em geral, podemos melhorar os resultados usando várias técnicas de processamento de imagem.

Clarear/remover sombras

Iluminação pobre pode ter um impacto no resultado do OCR. Para melhorar o resultado, podemos clarear as fotos ou eliminar sombras das imagens.

Inverter

Como o mecanismo de OCR é frequentemente treinado em texto em cores escuras, texto em cores claras pode ser mais difícil de descobrir e reconhecer.

Texto claro

Será mais fácil de reconhecer se invertermos sua cor

Texto claro invertido

Para realizar a inversão, podemos usar o parâmetro GrayscaleTransformationModes no DLR.

Aqui estão as configurações JSON:

"GrayscaleTransformationModes": [
    {
        "Mode": "DLR_GTM_INVERTED"
    }
]

Resultado da leitura do DLR .net:

Resultado do texto claro

Redimensionar

Se a altura das letras for muito baixa, o mecanismo de OCR pode não produzir um bom resultado. Em geral, a imagem deve ter um DPI de pelo menos 300.

Há um parâmetro ScaleUpModes no DLR 1.1 que permite aumentar o tamanho das letras. Podemos, é claro, redimensionar a imagem nós mesmos.

Ler a imagem diretamente resulta no resultado incorreto:

Imagem 1x

Após aumentar a imagem x2, o resultado está correto:

Imagem 2x

Desalinhar

Está tudo bem se o texto estiver um pouco distorcido. No entanto, se estiver excessivamente inclinado, o resultado será alterado adversamente. Para melhorar o resultado, precisamos cortar a imagem.

Para conseguir isso, podemos usar a Transformada de Linha de Hough no OpenCV e Python.

Aqui está o código para desalinhar a imagem acima:

import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Imagem.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Imagem.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
PYTHON

Linhas detectadas:

Linhas detectadas

Desalinhado:

Imagem desalinhada

Técnicas de Processamento de Imagem para IronOCR

A qualidade da imagem de entrada não é importante aqui porque IronOCR se destaca em reparar documentos defeituosos (embora isso seja demorado e cause uso de mais ciclos de CPU em suas tarefas de OCR).

Escolher formatos de imagem de entrada com menos ruído digital, como TIFF ou PNG, também pode resultar em resultados mais rápidos do que formatos de imagem com perdas, como JPEG.

Os filtros de imagem listados abaixo podem melhorar significativamente o desempenho:

  • OcrInput.Rotate(double degrees) — Rotaciona imagens no sentido horário por um número especificado de graus. Números inteiros negativos são usados para rotação no sentido anti-horário.
  • OcrInput.Binarize() — Este filtro de imagem torna cada pixel preto ou branco, sem tons intermediários. Isso pode melhorar o desempenho do OCR em situações onde o contraste entre texto e fundo é muito baixo.
  • OcrInput.ToGrayScale() — Este filtro de imagem converte cada pixel em um tom de escala de cinza. É improvável que melhore a precisão do OCR, mas pode aumentar a velocidade.
  • OcrInput.Contrast() — Aumenta automaticamente o contraste. Em digitalizações de baixo contraste, este filtro frequentemente melhora a velocidade e a precisão do OCR.
  • OcrInput.DeNoise() — Este filtro deve ser usado apenas quando se espera ruído.
  • OcrInput.Invert() — Reverte todas as cores. Por exemplo, branco torna-se preto: preto torna-se branco.
  • OcrInput.Dilate() — Morfologia avançada. Dilatação é o processo de adicionar pixels às bordas dos objetos em uma imagem. (Inverse of Erode)
  • OcrInput.Erode() — Uma função avançada de morfologia. Erosão é o processo de remover pixels das bordas dos objetos. (Inverse of Dilate)
  • OcrInput.Deskew() — Rotaciona uma imagem para que fique ortogonal e na posição correta. Como a tolerância do Tesseract para digitalizações enviesadas pode ser de apenas 5 graus, isso é bastante útil para OCR.
  • DeepCleanBackgroundNoise() — Remove muito ruído de fundo. Use este filtro apenas se souber que há muito ruído de fundo no documento, pois pode reduzir a precisão do OCR em documentos claros e é bastante intensivo para a CPU.
  • OcrInput.EnhanceResolution — Melhora a resolução de fotos de baixa resolução. Por causa de OcrInput, este filtro é raramente usado. OcrInput detectará e resolverá a baixa resolução automaticamente.

Podemos querer usar IronTesseract para acelerar o OCR em digitalizações de alta qualidade. Se estamos buscando velocidade, podemos começar aqui e posteriormente reativar recursos até alcançar o equilíbrio adequado.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
$vbLabelText   $csharpLabel

Este resultado é 99.8% preciso em comparação com a base de 100% — mas 35% mais rápido.

Licenciamento e Preços

Licenciamento e Preços Dynamsoft

Licença por ano. Todas as tarifas incluem um ano de manutenção, que inclui atualizações gratuitas de software e suporte premium.

Dynamsoft oferece dois tipos de licenças:

Licença por dispositivo cliente

A 'Licença de Um Dispositivo Cliente' fornece acesso a uma Aplicação de mesma origem (mesmo protocolo, mesmo host e mesma porta) para usar os recursos do software a partir de um único dispositivo cliente. Um dispositivo cliente inativo é aquele que não acessou nenhuma capacidade de software por 90 dias consecutivos. Um assento de licença de dispositivo cliente inativo será instantaneamente liberado e disponibilizado para uso por qualquer outro dispositivo cliente ativo. Quando você atinge o número máximo de assentos de licença permitido, a Dynamsoft dará a você um extra de 10% de sua cota de dispositivos cliente para uso emergencial. Uma vez que a cota adicional de dispositivos cliente tenha sido esgotada, novos dispositivos cliente não poderão acessar e usar o software até que haja assentos de licença disponíveis novamente. Por favor, tenha em mente que exceder sua cota de dispositivos cliente não afeta nenhum dispositivo cliente que já tenha sido licenciado.

Licença por servidor

Para implantar a aplicação em um único servidor, é necessária uma 'Licença de Um Servidor'. Servidores referem-se tanto a servidores físicos quanto virtuais e incluem, mas não estão limitados a, servidores de produção, servidores de failover, servidores de desenvolvimento que também são usados para testes, servidores de garantia de qualidade, servidores de teste e servidores de estágio, todos os quais requerem uma licença. Licenças adicionais não são necessárias para servidores de integração contínua (servidores de build) ou servidores de desenvolvimento localhost. A licença por servidor é válida apenas para instalações de servidor on-premises e não para implementações em nuvem.

Os preços do Dynamsoft OCR começam em USD 1.249/ano.

Licenciamento e Preços do IronOCR

Como desenvolvedores, todos queremos concluir nossos projetos com o menor custo e recursos possíveis — o planejamento orçamentário é crítico. Examine o gráfico para determinar qual licença é a mais adequada às suas necessidades e orçamento.

IronOCR oferece licenças com um número personalizável de desenvolvedores, projetos e locais, permitindo que você atenda às necessidades do seu projeto enquanto paga apenas pela cobertura que necessita.

As chaves de licenciamento IronOCR permitem que você publique seu produto sem marca d'água.

As licenças começam em $799 e incluem um ano de suporte e atualizações.

Você também pode usar uma chave de licença de avaliação para experimentar o IronOCR gratuitamente.

Conclusão

Tesseract OCR no Mac, Windows, Linux, Azure OCR e Docker estão todos disponíveis com IronOCR para C#. .NET Framework 4.0 ou superior é necessário, .NET Standard 2.0+, .NET Core 2.0+, .NET 5, Mono para macOS e Linux, e Xamarin para macOS são todos exemplos de desenvolvimento multiplataforma. IronOCR também usa o mais recente motor Tesseract 5 para ler textos, códigos de barras e códigos QR de todos os principais formatos de imagem e PDF. Em minutos, esta biblioteca adiciona funcionalidade OCR aos seus aplicativos de desktop, console ou web! A OCR também pode ler PDFs e TIFFs de várias páginas e pode ser salva como um documento PDF pesquisável ou XHTML em qualquer Scan OCR. Texto simples, dados de código de barras e uma classe de resultado OCR abrangendo parágrafos, linhas, palavras e caracteres estão entre suas opções de saída de dados. Está disponível em 125 idiomas, incluindo árabe, chinês, inglês, finlandês, francês, alemão, hebraico, italiano, japonês, coreano, português, russo e espanhol, mas lembre-se de que pacotes de idiomas personalizados também podem ser gerados.

O complemento Dynamic .NET TWAIN OCR é um componente .NET rápido e confiável para reconhecimento óptico de caracteres que você pode usar em aplicativos WinForms e WPF escritos em C# ou VB .NET. Você pode digitalizar documentos ou capturar fotos de webcams usando o módulo de captura de imagem do Dynamic .NET TWAIN e depois realizar OCR nas imagens para converter o texto das imagens em texto, arquivos PDF pesquisáveis ou strings. Múltiplos idiomas asiáticos, assim como o árabe, são oferecidos além do inglês.

IronOCR oferece melhor licenciamento do que o Dynamsoft OCR; IronOcr começa em $799 com um ano gratuito, enquanto o Dynamsoft começa em $1249 com um teste gratuito. IronOCR também oferece licenças para múltiplos usuários, enquanto com o Dynamsoft, você só obtém uma licença por usuário.

Embora ambos os conjuntos de software visem oferecer o melhor desempenho em termos de leituras OCR de códigos de barras, imagem para texto, e imagem para texto, IronOCR se destaca ao brilhar sua luz mesmo em imagens que estão em condições bastante ruins. Ele automaticamente implementa seus sofisticados métodos de ajuste para lhe dar os melhores resultados de OCR. IronOCR também utiliza o Tesseract para lhe dar resultados ótimos com poucos ou nenhum erro.

A Iron Software também está oferecendo a seus clientes e usuários a opção de adquirir sua suíte completa de software em apenas dois cliques. Isso significa que pelo preço de dois dos componentes da suíte Iron Software, você pode obter atualmente todos os cinco componentes e suporte ininterrupto.

ObserveDynamsoft OCR é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pelo Dynamsoft OCR. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Como posso converter imagens de texto em formatos digitais usando C#?

Você pode utilizar o IronOCR em C# para converter imagens de texto em formatos digitais. O IronOCR oferece métodos para aprimorar e corrigir automaticamente digitalizações de baixa qualidade, tornando-o ideal para converter diversos formatos de imagem em texto.

Quais as vantagens que o IronOCR oferece para lidar com digitalizações de baixa qualidade?

O IronOCR aprimora automaticamente digitalizações de baixa qualidade, reduzindo a inclinação, a distorção e o ruído de fundo, ao mesmo tempo que melhora a resolução e o contraste, o que garante maior precisão no reconhecimento de texto.

Qual biblioteca de OCR é melhor para aplicações multiplataforma?

O IronOCR é adequado para aplicações multiplataforma, pois suporta ambientes como Xamarin e Azure, oferecendo flexibilidade para desenvolvedores que trabalham com diversas plataformas.

Quais formatos de imagem o IronOCR suporta?

O IronOCR suporta uma ampla variedade de formatos de imagem, tornando-o versátil para diferentes aplicações de OCR. Ele pode processar imagens e documentos PDF, oferecendo flexibilidade no tratamento de diversas fontes de entrada.

A tecnologia OCR pode ajudar na gestão de documentos em empresas?

Sim, a tecnologia OCR pode auxiliar significativamente na gestão de documentos, digitalizando documentos físicos e tornando-os pesquisáveis e editáveis. Isso reduz a entrada manual de dados, minimiza erros e aumenta a acessibilidade.

Como o Dynamsoft OCR lida com a aquisição de imagens de dispositivos?

O Dynamsoft OCR suporta a aquisição de imagens de dispositivos compatíveis com TWAIN e webcams, permitindo a digitalização em lote e a modificação dos atributos do scanner para um processamento de imagem eficiente.

Quais são as opções de preços do IronOCR em comparação com outras bibliotecas?

O IronOCR oferece licenças personalizáveis que podem ser adaptadas de acordo com o número de desenvolvedores, projetos e locais, proporcionando opções mais flexíveis e econômicas em comparação com algumas outras bibliotecas.

Quais são alguns problemas comuns enfrentados ao usar a tecnologia OCR?

Problemas comuns com a tecnologia OCR incluem o processamento de imagens de baixa resolução, distorção e variações nas fontes de texto. No entanto, bibliotecas como o IronOCR possuem recursos integrados para solucionar esses problemas, aprimorando a precisão do 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