Automatizando a digitalização de recibos com OCR e Deep Learning PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Automatizando a digitalização de recibos com OCR e Deep Learning

Automatizando a digitalização de recibos com OCR e Deep Learning

Quer automatizar a extração de dados de recibos? Confira o pré-treinado da Nanonets Recibo OCR or Construa o seu próprio OCR de recibo personalizado. Você também pode agendar uma demonstração para saber mais sobre nossos casos de uso de AP!


Recibo OCR ou a digitalização de recibos aborda o desafio de extrair automaticamente informações de um recibo. Neste artigo abordo a teoria por trás da digitalização de recibos e implemento um pipeline ponta a ponta usando OpenCV e Tesseract. Também reviso alguns trabalhos importantes que fazem Digitalização de Recibos usando Deep Learning.

O que é digitalização de recibos?

Os recibos contêm as informações necessárias para que as negociações ocorram entre empresas e grande parte delas está em papel ou em formatos semiestruturados, como PDFs e imagens em papel / cópias impressas. Para gerenciar essas informações de forma eficaz, as empresas extraem e armazenam as informações relevantes contidas nesses documentos. Tradicionalmente, isso é conseguido extraindo manualmente as informações relevantes e inserindo-as em um banco de dados, o que é um processo caro e trabalhoso.

A digitalização de recibos aborda o desafio de extrair automaticamente as informações de um recibo.

Extrair informações importantes de recibos e convertê-los em documentos estruturados pode servir a muitos aplicativos e serviços, como arquivamento eficiente, indexação rápida e análise de documentos. Eles desempenham funções críticas na simplificação de processos com uso intensivo de documentos e automação de escritório em muitas áreas financeiras, contábeis e fiscais.

Automatizando a digitalização de recibos com OCR e Deep Learning

Precisa de um robusto recibo OCR or scanner de recibo extrair dados de recibos? Confira Nanonets API de OCR de recibo!


Quem achará a digitalização de recibos útil?

Aqui estão algumas áreas onde a digitalização de recibos pode causar um grande impacto:

Automação de contas a pagar e receber

Calcular contas a pagar (AP) e contas a receber (ARs) manualmente é caro, demorado e pode causar confusão entre gerentes, clientes e fornecedores. Com a digitalização, as empresas podem eliminar essas desvantagens e podem ter mais vantagens - maior transparência, análise de dados, capital de giro aprimorado e rastreamento mais fácil.

Otimização da cadeia de suprimentos

As cadeias de suprimentos são a espinha dorsal do funcionamento adequado de muitas empresas. Gerenciar tarefas, fluxos de informações e fluxos de produtos é a chave para garantir o controle completo do fornecimento e da produção. Isso é essencial para que as organizações cumpram os prazos de entrega e controlem os custos de produção.

As empresas que estão realmente prosperando hoje em dia têm algo significativo em comum: uma cadeia de suprimentos digitalizada. 89% de empresas com cadeias de suprimentos digitais recebem pedidos perfeitos de fornecedores internacionais, garantindo a entrega no prazo. Um dos elementos-chave para realizar a próxima geração digital da Cadeia de Suprimentos 4.0 é automatizar a captura e gerenciamento de dados e muitos desses dados são a forma de recebimentos e faturas. A entrada manual de recibos atua como um gargalo em toda a cadeia de suprimentos e leva a atrasos desnecessários. Se esse processamento de recibos for digitalizado, poderá levar a ganhos substanciais de tempo e eficiência.


Tem um problema de OCR em mente? Quer digitalizar faturas, PDFs ou matrículas? Vá para Nanoredes e construir modelos OCR gratuitamente!


Por que é um problema difícil?

A digitalização de recibos é difícil porque os recibos têm muitas variações e, por vezes, são de baixa qualidade. A digitalização de recibos também introduz vários artefatos em nossa cópia digital. Esses artefatos apresentam muitos desafios de legibilidade.

Automatizando a digitalização de recibos com OCR e Deep Learning

Aqui está uma lista de algumas coisas que tornam um problema difícil de resolver

  • Texto manuscrito
  • Fontes pequenas
  • Imagens barulhentas
  • Imagens desbotadas
  • Movimento e vibração da câmera
  • Marcas d'água
  • rugas
  • Texto desbotado

Um canal tradicional de digitalização de recibos

Um pipeline típico para esse tipo de abordagem ponta a ponta envolve:

  • Pré-processando
  • Reconhecimento Óptico de Caracteres
  • Extração de Informação
  • Despejo de dados
Automatizando a digitalização de recibos com OCR e Deep Learning

Vamos nos aprofundar em cada parte do pipeline. A primeira etapa do processo é o pré-processamento.

Pré-processando

A maioria dos recibos digitalizados é barulhenta e tem artefatos e, portanto, para o OCR e os sistemas de extração de informações funcionarem bem, é necessário pré-processar os recibos. Os métodos de pré-processamento comuns incluem - Escala de cinza, Limiar (Binarização) e Remoção de ruído.

Escala de cinza é simplesmente converter uma imagem RGB em uma imagem em tons de cinza.

A remoção de ruído normalmente envolve a remoção de ruído de sal e pimenta ou ruído gaussiano.

A maioria dos mecanismos de OCR funciona bem em imagens em preto e branco. Isso pode ser alcançado por limiar, que é a atribuição de valores de pixel em relação ao valor de limiar fornecido. Cada valor de pixel é comparado com o valor limite. Se o valor do pixel for menor que o limite, ele é definido como 0, caso contrário, é definido como um valor máximo (geralmente 255).

O OpenCV oferece várias opções de limite – Limite Simples, Limite Adaptativo

Automatizando a digitalização de recibos com OCR e Deep Learning

Reconhecimento Óptico de Caracteres

A próxima etapa no pipeline é OCR. É usado para ler texto de imagens, como um documento digitalizado ou uma imagem. Esta tecnologia é usada para converter virtualmente qualquer tipo de imagem contendo texto escrito (digitado, manuscrito ou impresso) em dados de texto legíveis por máquina. OCR envolve 2 etapas - detecção de texto e reconhecimento de texto.

Automatizando a digitalização de recibos com OCR e Deep Learning

Existem várias abordagens para OCR. A abordagem convencional de visão por computador é

  • Usando filtros para separar os caracteres do fundo
  • Aplique detecção de contorno para reconhecer os caracteres filtrados
  • Use a classificação de mago para identificar os personagens

Aplicar filtros e classificação de imagem é bastante simples (pense na Classificação MNIST usando SVN), mas a correspondência de contorno é um problema muito difícil e requer muito esforço manual e não é generalizável.

Em seguida, vêm as abordagens de aprendizado profundo. O Deep Learning generaliza muito bem. Uma das abordagens mais populares para detecção de texto é EAST. EAST (detector de texto de cena preciso e eficiente) é uma abordagem simples, mas poderosa, para detecção de texto. A rede EAST é, na verdade, uma versão da conhecida U-Net, boa para detectar recursos de diferentes tamanhos.

Automatizando a digitalização de recibos com OCR e Deep Learning

CRNN e STN-OCR (Spatial Transformer Networks) são outros papéis populares que executam OCR.

Extração de Informação

A abordagem mais comum para o problema de Extração de Informações é baseada em regras, onde as regras são escritas após o OCR para extrair as informações necessárias. Esta é uma abordagem poderosa e precisa, mas requer que você escreva novas regras ou modelos para um novo tipo de documento.

Vários baseados em regras fatura sistemas de análise existem na literatura.

Os métodos baseados em regras dependem fortemente das regras de modelo predefinidas para extrair informações de layouts de faturas específicas

Uma abordagem que se tornou muito comum nos últimos anos é usar uma estrutura de detecção de objetos padrão como YOLO, Faster R-CNN para reconhecer campos. Portanto, em vez da detecção de texto puro, o reconhecimento de campo e a detecção de texto são executados simultaneamente. Isso torna o pipeline menor (Detecção de texto → Reconhecimento → Extração para detecção → Reconhecimento). Não há necessidade de escrever nenhuma regra, pois o detector de objetos aprende a reconhecer esses campos.

Despejo de Dados

Depois de extrair as informações, o despejo de dados pode ser feito conforme nosso caso de uso exigir. Freqüentemente, um formato JSON para armazenar as informações dos campos é conveniente. Esses arquivos JSON podem ser facilmente convertidos em arquivos XML, planilhas do Excel, arquivos CSV ou arquivos de texto simples, dependendo de quem deseja trabalhar com os dados e como.

Digitalização de recibos usando Tesseract

Agora que temos uma ideia do pipeline, vamos implementá-lo em um recibo de exemplo. Este é o recibo com o qual trabalharemos. Nosso objetivo ao final disso é extrair o nome do Restaurante, Itens adquiridos com sua quantidade e custo, data de compra e o total.

Automatizando a digitalização de recibos com OCR e Deep Learning

Pré-processando

Como nosso recibo já está em escala de cinza e não há muito ruído, só vou fazer o limite aplicando um limite de 210. Você pode ajustar o valor para obter a saída correta. Muito menos e você perderá muito. Muito perto de 255 tornará tudo preto.

Precisamos instalar o OpenCV primeiro.

pip install opencv-python

Aqui está o código para limite.

import cv2
import numpy as np
from matplotlib import pyplot as plt # Read the image
img = cv2.imread('receipt.jpg',0)
# Simple thresholding
ret,thresh1 = cv2.threshold(img,210,255,cv2.THRESH_BINARY)
cv2.imshow(thresh1,’gray’)

É assim que a saída se parece.

Automatizando a digitalização de recibos com OCR e Deep Learning

Detecção de Texto

Para detecção de texto, usarei uma biblioteca de código aberto chamada Tesseract. É a biblioteca OCR definitiva e foi desenvolvida pelo Google desde 2006. A versão mais recente do Tesseract (v4) oferece suporte a OCR baseado em aprendizado profundo que é significativamente mais preciso. O próprio mecanismo de OCR subjacente utiliza uma rede Long Short-Term Memory (LSTM).

Primeiro, vamos instalar a versão mais recente do Tesseract.

Para ubuntu

sudo apt install tesseract-ocr

Para macOS

brew install tesseract --HEAD

Para Windows, você pode baixar os binários deste página

Verifique sua versão do tesseract.

tesseract -v

Resultado -

tesseract 4.0.0-beta.3
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11
Found AVX512BW
Found AVX512F
Found AVX2
Found AVX
Found SSE

Instale suas ligações Tesseract + Python

Agora que temos o binário Tesseract instalado, agora precisamos instalar as ligações Tesseract + Python para que nossos scripts Python possam se comunicar com o Tesseract. Também precisamos instalar o pacote do idioma alemão, pois o recibo é em alemão.

pip install pytesseract
sudo apt-get install tesseract-ocr-deu

Agora que instalamos o Tesseract, vamos começar a detectar as caixas de texto.Tesseract tem embutida funcionalidade para detectar caixas de texto.

import pytesseract
from pytesseract import Output
import cv2 img = cv2.imread('receipt.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
n_boxes = len(d['level'])
for i in range(n_boxes): (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.imshow(img,'img')

Aqui está a saída do código de detecção de texto.

Automatizando a digitalização de recibos com OCR e Deep Learning

Reconhecimento de Texto

Faremos o Tesseract para realizar o OCR. O Tesseract 4 usa uma abordagem de aprendizado profundo que tem um desempenho significativamente melhor do que a maioria das outras implementações de código aberto.

Aqui está o código de reconhecimento de texto. Embora seja uma linha muito simples, há muitas coisas sob o capô.

extracted_text = pytesseract.image_to_string(img, lang = 'deu')

Aqui está a saída bruta.

'BerghotelnGrosse Scheideggn3818 GrindelwaldnFamilie R.MüllernnRech.Nr. 4572 30.07.2007/13:29: 17nBar Tisch 7/01n2xLatte Macchiato &ä 4.50 CHF 9,00n1xGloki a 5.00 CH 5.00n1xSchweinschnitzel ä 22.00 CHF 22.00nIxChässpätz 1 a 18.50 CHF 18.50nnTotal: CHF 54.50nnIncl. 7.6% MwSt 54.50 CHF: 3.85nnEntspricht in Euro 36.33 EURnEs bediente Sie: UrsulannMwSt Nr. : 430 234nTel.: 033 853 67 16nFax.: 033 853 67 19nE-mail: grossescheidegs@b luewin. ch'

Aqui está a saída formatada

Berghotel
Grosse Scheidegg
3818 Grindelwald
Familie R.Müller Rech.Nr. 4572 30.07.2007/13:29: 17
Bar Tisch 7/01
2xLatte Macchiato &ä 4.50 CHF 9,00
1xGloki a 5.00 CH 5.00
1xSchweinschnitzel ä 22.00 CHF 22.00
IxChässpätz 1 a 18.50 CHF 18.50 Total: CHF 54.50 Incl. 7.6% MwSt 54.50 CHF: 3.85 Entspricht in Euro 36.33 EUR
Es bediente Sie: Ursula MwSt Nr. : 430 234
Tel.: 033 853 67 16
Fax.: 033 853 67 19
E-mail: grossescheidegs@b luewin. ch

Precisa digitalizar documentos, recibos ou faturas mas com preguiça de codificar? Vá para Nanoredes e construir modelos OCR gratuitamente!


Extração de Informação

Como mencionei antes, a maneira mais comum de extrair informações é por uma abordagem baseada em regras.

Todos os recebimentos deste hotel seguirão uma estrutura fixa e as informações aparecerão em linhas diferentes. Isso se reflete na saída do OCR, onde as novas linhas são representadas por 'n'. Usando isso, vamos escrever um conjunto de regras para extrair informações. Este conjunto de regras pode ser aplicado a qualquer recibo deste hotel, uma vez que seguirá o mesmo formato.

Automatizando a digitalização de recibos com OCR e Deep Learning

Estarei extraindo o nome do restaurante, a data da transação, os itens comprados, sua quantidade, custos totais por item e o valor total usando comandos simples em Python e expressões regulares.

Este é um dicionário onde armazenarei as informações extraídas.

receipt _ocr = {}

A primeira etapa é extrair o nome do restaurante. A localização do nome do restaurante será constante em todos os recibos e está nas 2 primeiras linhas. Vamos usar isso para criar uma regra.

splits = extracted_text.splitlines()
restaurant_name = splits[0] + '' + splits[1]

Em seguida, extraímos a data da transação. Regex de data é bastante simples.


import re
# regex for date. The pattern in the receipt is in 30.07.2007 in DD:MM:YYYY date_pattern = r'(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)dd'
date = re.search(date_pattern, extracted_text).group()
receipt_ocr['date'] = date
print(date)

Resultado -

‘30.10.2007’

Em seguida, extraímos todas as informações relacionadas aos itens e custo.

Os itens contêm um CHF que é o franco suíço. Vamos detectar todas as ocorrências de ICC. Agora podemos detectar linhas reconhecendo os caracteres entre 2 n e contendo um CHF. Estou detectando o total aqui também.

# get lines with chf
lines_with_chf = []
for line in splits: if re.search(r'CHF',line): lines_with_chf.append(line) print(lines_with_chf)

Resultado -

2xLatte Macchiato &ä 4.50 CHF 9,00
1xSchweinschnitzel ä 22.00 CHF 22.00
IxChässpätz 1 a 18.50 CHF 18.50
Total: CHF 54.50
Incl. 7.6% MwSt 54.50 CHF: 3.85

Se você notar, o Tesseract perdeu um item porque detectou CH em vez de CHF. Abordarei os desafios dos sistemas OCR tradicionais na próxima seção.

# get items, total, ignore Incl
items = []
for line in lines_with_chf: print(line) if re.search(r'Incl',line): continue if re.search(r'Total', line): total = line else: items.append(line) # Get Name, quantity and cost all_items = {}
for item in items: details = item.split() quantity_name = details[0] quantity = quantity_name.split('x')[0] name = quantity_name.split('x')[1] cost = details[-1] all_items[name] = {'quantity':quantity, 'cost':cost} total = total.split('CHF')[-1] # Store the results in the dict
receipt_ocr['items'] = all_items
receipt_ocr[‘total’] = total import json receipt_json = json.dumps(receipt_ocr)
print(receipt_json)

Imprimindo nossa saída JSON -

{'date': '30.07.2007', 'items': {'Chässpätz': {'cost': '18.50', 'quantity': 'I'}, 'Latte': {'cost': '9,00', 'quantity': '2'}, 'Schweinschnitzel': {'cost': '22.00', 'quantity': '1'}}, 'total': ' 54.50'}

Todas as informações importantes foram extraídas e despejadas em recibo_json ..

Problemas com a abordagem convencional

Embora tenhamos extraído as informações, o pipeline acima perde algumas coisas e está abaixo do ideal. Para cada novo recibo, precisamos escrever um novo conjunto de regras e, portanto, não é escalonável.

Pode haver muitas variações em layouts, fontes e tamanhos de fontes, documentos manuscritos, etc. As diferenças nos layouts afetarão as abordagens baseadas em regras e precisam ser levadas em consideração, o que se torna muito tedioso. As diferenças na fonte e nos tamanhos das fontes dificultam o reconhecimento e a extração de informações.

Por que um canal de aprendizado profundo de ponta a ponta é melhor?

Um dos maiores problemas com a abordagem padrão é a falta de generalização. As abordagens baseadas em regras não podem generalizar e novas regras precisam ser escritas para qualquer novo modelo. Além disso, quaisquer alterações ou variações em um modelo existente também precisam ser levadas em consideração.

Uma abordagem de Deep Learning será capaz de aprender essas regras e generalizar facilmente em diferentes layouts, desde que os tenhamos em nosso conjunto de dados de treinamento.

Aprendizagem profunda e extração de informações

Aqui, eu reviso alguns artigos que usam abordagens de Aprendizado Profundo de ponta a ponta.

LINDA

CUTIE: Aprendendo a compreender documentos com o extrator de informações de texto universal convolucional

Este artigo propõe um método de extração de informações chave baseado em aprendizagem com exigência limitada de recursos humanos. Ele combina as informações do significado semântico e da distribuição espacial de textos em documentos. Seu modelo proposto, Convolutional Universal Text Information Extractor (CUTIE), aplica redes neurais convolucionais em textos em grade onde os textos são incorporados como recursos com conotações semânticas.

Automatizando a digitalização de recibos com OCR e Deep Learning

O modelo proposto, aborda o problema de extração de informações-chave por

  • Primeiro criando textos em grade com a proposta método de mapeamento posicional de grade. Para gerar os dados da grade para a rede neural convolucional, a imagem do documento digitalizado é processada por um mecanismo de OCR para adquirir os textos e suas posições absolutas / relativas. Os textos são mapeados a partir da imagem do documento digitalizado original para a grade alvo, de modo que a grade mapeada preserva a relação espacial original entre os textos ainda mais adequada para ser usada como entrada para a rede neural convolucional.
  • Em seguida, o modelo CUTIE é aplicado nos textos em grade. A rica informação semântica é codificada a partir dos textos em grade no estágio inicial da rede neural convolucional com uma camada de incorporação de palavras.

O CUTIE permite olhar simultaneamente para as informações semânticas e espaciais dos textos na imagem do documento digitalizado e pode chegar a um novo resultado do estado da arte para a extração de informações importantes.

Modelo CUTIE

Eles têm 2 modelos CUTIE-A e CUTIE-B. o CUTIE-A proposto é uma rede neural convolucional de alta capacidade que funde recursos de multi-resolução sem perder recursos de alta resolução. CUTIE-B é uma rede convolucional com convolução átrica para aumentar o campo de visão e módulo Atrous Spatial Pyramid Pooling (ASPP) para capturar contextos multi-escala. Ambos CUTIE-A e CUITE-B conduzem o processo de codificação de significado semântico com uma camada de incorporação de palavras no estágio inicial.

A tarefa de CUTIE tem semelhança com a tarefa de segmentação semântica. A grade mapeada contém pontos de dados espalhados (tokens de texto) em contraste com as imagens espalhadas com pixels. Os textos-chave do mapeamento posicional da grade estão próximos ou distantes uns dos outros devido aos diferentes tipos de layouts de documentos. Portanto, a incorporação da capacidade de processamento de contexto em várias escalas beneficia a rede.

Conjunto de dados

O método proposto é avaliado no desafio de leitura robusta do ICDAR 2019 no conjunto de dados SROIE e também em um conjunto de dados autoconstruído com 3 tipos de imagens de documentos digitalizados.

A Conjunto de dados ICDAR 2019 SROIE é usado, que contém 1000 imagens inteiras de recibo digitalizadas. Cada imagem de recibo contém cerca de quatro campos de texto chave, como nome da mercadoria, preço unitário, data e custo total. O texto anotado no conjunto de dados consiste principalmente em dígitos e caracteres ingleses.

O conjunto de dados auto-construído contém 4 recibos digitalizados e anotados em espanhol, incluindo recibos de táxi, recibos de entretenimento de refeições (ME) e recibos de hotel, com 484 classes diferentes de informações importantes.

Resultados

O desempenho geral é avaliado usando a precisão média (AP - e medido em termos de precisão por classe nas 9 classes.) E precisão média suave (softAP), onde a previsão de uma classe de informação chave é determinada como correta se as verdades fundamentais forem positivas são previstos corretamente, mesmo se alguns falsos positivos forem incluídos na previsão final. a análise conjunta de AP e softAP fornece uma melhor compreensão do desempenho do modelo.

Você pode ver os resultados na tabela abaixo.

Automatizando a digitalização de recibos com OCR e Deep Learning

GCNs para VRDs

Convolução de gráfico para extração de informação multimodal de documentos visualmente ricos

Este artigo apresenta um modelo baseado em convolução de gráfico para combinar informações textuais e visuais apresentadas em documentos visualmente ricos (VRDs). Embeddings de gráfico são treinados para resumir o contexto de um segmento de texto no documento e ainda combinados com embeddings de texto para extração de entidade.

Neste artigo, eles chamam um documento de ARV e vou insistir nele.

Cada documento é modelado como um gráfico de segmentos de texto, onde cada segmento de texto é composto pela posição do segmento e o texto dentro dele. O gráfico é composto de nós que representam segmentos de texto e arestas que representam dependências visuais, como formas relativas e distância, entre dois nós.

Automatizando a digitalização de recibos com OCR e Deep Learning

Os embeddings de gráfico produzidos pela convolução de gráfico resumem o contexto de um segmento de texto no documento, que são posteriormente combinados com embeddings de texto para extração de entidade usando um modelo BiLSTM-CRF padrão.

Modelo

O modelo primeiro codifica cada segmento de texto no documento em incorporação de gráfico, usando várias camadas de convolução de gráfico. A incorporação representa as informações no segmento de texto, dado seu contexto visual e textual. O contexto visual é o layout do documento e as posições relativas do segmento individual em relação a outros segmentos. O contexto textual é o agregado de informações de texto no documento em geral; O modelo aprende a atribuir pesos maiores em textos de segmentos vizinhos. Em seguida, o artigo combina os embeddings de gráfico com embeddings de texto e aplica um modelo BiLSTM-CRF padrão para extração de entidade.

Automatizando a digitalização de recibos com OCR e Deep Learning

Conjunto de dados

Dois conjuntos de dados do mundo real são usados. São eles: Nota Fiscal de Imposto sobre Valor Agregado (VATI) e Recebimento de Compra Internacional (DPI). VATI consiste em 3000 fotos carregadas pelo usuário e tem 16 entidades exatamente. As entidades de exemplo são os nomes do comprador / vendedor, a data e o valor do imposto. As faturas são em chinês e tem um template fixo por se tratar de uma fatura padrão nacional.

IPR é um conjunto de dados de 1500 documentos de recibo digitalizados em inglês que tem 4 entidades para ser exata (número da fatura, nome do fornecedor, nome do pagador e valor total). Existem 146 modelos de recibos.

Resultados

A pontuação F1 é usada para avaliar o desempenho do modelo em todos os experimentos. A tabela abaixo apresenta os resultados dos 2 conjuntos de dados.

Automatizando a digitalização de recibos com OCR e Deep Learning

A linha de base I aplica BiLSTM-CRF a cada segmento de texto, onde cada segmento de texto é uma frase individual.

A linha de base II aplica o modelo de marcação aos segmentos de texto concatenados.

Mais rápido-RCNN + AED

Abordagem de aprendizado profundo para reconhecimento de recebimento

Este artigo apresenta uma abordagem de aprendizado profundo para o reconhecimento de recibos digitalizados. O sistema de reconhecimento possui dois módulos principais: detecção de texto baseada na Rede de Proposta de Texto Connectionist e reconhecimento de texto baseado em Codificador-Decodificador baseado em Atenção. O sistema atingiu 71.9% da pontuação F1 para a tarefa de detecção e reconhecimento.

Detecção de texto

A estrutura CTPN é semelhante ao Faster R-CNN, com a adição da camada LSTM. O modelo de rede consiste principalmente em três partes: extração de recursos por VGG16, LSTM bidirecional e regressão de caixa delimitadora

Automatizando a digitalização de recibos com OCR e Deep Learning

Reconhecimento de Texto

O AED é usado para reconhecer linhas de texto. O AED tem dois módulos principais: DenseNet para extrair recursos de uma imagem de texto e um LSTM combinado com um modelo de atenção para prever o texto de saída.

Automatizando a digitalização de recibos com OCR e Deep Learning

Conjunto de dados

O conjunto de dados do SROIE 2019 é usado. Eles dividiram os dados de treinamento em treinamento, validação e teste e selecionaram aleatoriamente 80% dos recebimentos para treinamento, 10% dos recebimentos para validação e o restante para teste. Resultando em 500 recibos para treinamento, 63 recibos para validação e 63 para teste.

Resultados

Para detecção de texto, o papel usa Intersecção sobre União (TIoU) com reconhecimento de estanqueidade. Para reconhecimento de texto, o papel usa F1, Precisão e Rechamada.

Automatizando a digitalização de recibos com OCR e Deep Learning

A Tabela I mostra o resultado do CTPN com três condições: CTPN nas imagens originais; pré-processamento + CTPN, pré-processamento + CTPN + verificação OCR. A Tabela 2 mostra os resultados da rede AED.

Automatizando a digitalização de recibos com OCR e Deep Learning

É claro que existe uma maneira mais fácil e intuitiva de fazer isso.


Precisa de um robusto recibo OCR extrair dados de recibos? Confira Nanonets API de OCR de recibo!


OCR com nanonets

Atualização nº 1: acabamos de lançar nosso recibo OCR modelo pré-treinado. Acesse https://app.nanonets.com e comece a testar!

Automatizando a digitalização de recibos com OCR e Deep Learning

A API Nanonets OCR permite construir modelos OCR com facilidade. Você não precisa se preocupar com o pré-processamento de suas imagens ou com a correspondência de modelos ou construção de mecanismos baseados em regras para aumentar a precisão do seu modelo de OCR.

Você pode fazer upload de seus dados, anotá-los, definir o modelo para treinar e esperar por previsões por meio de uma IU baseada em navegador sem escrever uma única linha de código, se preocupar com GPUs ou encontrar as arquiteturas certas para seus modelos de aprendizado profundo. Você também pode adquirir as respostas JSON de cada predição para integrá-la com seus próprios sistemas e construir aplicativos com tecnologia de aprendizado de máquina baseados em algoritmos de última geração e uma infraestrutura forte.

Usando a GUI: https://app.nanonets.com/

Você também pode usar a Nanonets-OCR API seguindo as etapas abaixo:

Etapa 1: Clonar o repositório, instalar dependências

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

Etapa 2: Obtenha sua chave de API gratuita
Obtenha sua chave de API gratuita em http://app.nanonets.com/#/keys

Automatizando a digitalização de recibos com OCR e Deep Learning

Etapa 3: defina a chave da API como uma variável de ambiente

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Etapa 4: crie um novo modelo

python ./code/create-model.py

Observação: Isso gera um MODEL_ID necessário para a próxima etapa

Etapa 5: adicionar ID do modelo como variável de ambiente

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Observação: você receberá YOUR_MODEL_ID da etapa anterior

Etapa 6: fazer upload dos dados de treinamento
Os dados do treinamento são encontrados em images (arquivos de imagem) e annotations (anotações para os arquivos de imagem)

python ./code/upload-training.py

Etapa 7: modelo de trem
Assim que as imagens forem carregadas, comece a treinar o modelo

python ./code/train-model.py

Etapa 8: obter o estado do modelo
O modelo leva cerca de 2 horas para treinar. Você receberá um e-mail assim que o modelo for treinado. Enquanto isso, você verifica o estado do modelo

python ./code/model-state.py

Etapa 9: faça a previsão
Uma vez que o modelo é treinado. Você pode fazer previsões usando o modelo

python ./code/prediction.py ./images/151.jpg

Leitura

Update:
‌ Adicionado mais material de leitura sobre os avanços mais recentes na automatização da digitalização de recibos usando OCR e Deep Learning.

Carimbo de hora:

Mais de IA e aprendizado de máquina