Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Quer fazer OCR manuscrito? Este blog é uma visão geral abrangente dos métodos mais recentes de reconhecimento de manuscrito usando aprendizado profundo. Revisamos as pesquisas e artigos mais recentes e também construímos um leitor de caligrafia a partir do zero.


Nanoredes API OCR tem muitos interessantes casos de uso. Fale com um especialista em IA da Nanonets para saber mais.


Introdução

Espera-se que o tamanho do mercado de Reconhecimento Óptico de Caracteres (OCR) seja de US$ 13.38 bilhões até 2025, com um crescimento ano a ano de 13.7%. Esse crescimento é impulsionado pela rápida digitalização dos processos de negócios usando OCR para reduzir seus custos de mão de obra e economizar horas de trabalho preciosas. Embora o OCR tenha sido considerado um problema resolvido, há um componente-chave dele, o Reconhecimento de Manuscrito (OCR Manuscrita) ou Reconhecimento de Texto Manuscrita (HTR), que ainda é considerado uma declaração de problema desafiadora. A alta variação nos estilos de caligrafia entre as pessoas e a baixa qualidade do texto manuscrito em comparação com o texto impresso representam obstáculos significativos para convertê-lo em texto legível por máquina. No entanto, é um problema crucial a ser resolvido para vários setores, como saúde, seguros e bancos.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning
Fonte :- https://www.semanticscholar.org/paper/Handwriting-recognition-on-form-document-using-and-Darmatasia-Fanany/

Avanços recentes no Deep Learning, como o advento de arquiteturas de transformadores, aceleraram nosso progresso no reconhecimento de texto manuscrito. O reconhecimento de texto manuscrito é denominado Intelligent Character Recognition (ICR) devido ao fato de que os algoritmos necessários para resolver o ICR precisam de muito mais inteligência do que resolver OCR genérico.

Neste artigo, aprenderemos sobre a tarefa de reconhecimento de texto manuscrito, seus meandros e como podemos resolvê-lo usando técnicas de aprendizado profundo.


Quer extrair dados de formulários manuscritos? Vá para Nanoredes e comece a criar modelos de OCR de manuscrito gratuitamente!


Desafios no reconhecimento de caligrafia

  1. Grande variabilidade e ambigüidade de derrames de pessoa para pessoa
  2. O estilo de escrita de uma pessoa também varia de tempos em tempos e é inconsistente
  3. Má qualidade do documento / imagem de origem devido à degradação ao longo do tempo
  4. O texto em documentos impressos fica em linha reta, enquanto os humanos não precisam escrever uma linha de texto em linha reta em papel branco
  5. A escrita cursiva torna a separação e o reconhecimento de caracteres um desafio
  6. O texto manuscrito pode ter rotação variável para a direita, o que está em contraste com o texto impresso onde todo o texto fica reto
  7. Coletar um bom conjunto de dados rotulado para aprender não é barato em comparação com dados sintéticos

Os casos de uso

Saúde e produtos farmacêuticos

A digitalização da prescrição do paciente é um grande problema na indústria farmacêutica / de saúde. Por exemplo, a Roche está lidando com milhões de petabytes de PDFs médicos diariamente. Outra área onde a detecção de texto manuscrito tem impacto importante é o registro do paciente e a digitalização do formulário. Ao adicionar reconhecimento de escrita à mão ao seu kit de ferramentas de serviços, hospitais / produtos farmacêuticos podem melhorar significativamente a experiência do usuário

Seguros

Uma grande indústria de seguros recebe mais de 20 milhões de documentos por dia e um atraso no processamento do sinistro pode afetar terrivelmente a empresa. O documento de reivindicações pode conter vários estilos de escrita à mão diferentes e a automação manual pura de processamento de reivindicações vai desacelerar completamente o pipeline

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning
Fonte: - https://www.researchgate.net/figure/mages-of-handwritten-bank-cheques-from-different-countries-a-Brazilian-1-b-American_fig2_226705617

Bancário

As pessoas passam cheques regularmente e os cheques ainda desempenham um papel importante na maioria das transações que não envolvem dinheiro. Em muitos países em desenvolvimento, o presente procedimento de processamento de cheques exige que um funcionário do banco leia e insira manualmente as informações presentes em um cheque e também verifique as entradas como assinatura e data. Como um grande número de cheques deve ser processado todos os dias em um banco, um sistema de reconhecimento de texto manuscrito pode economizar custos e horas de trabalho humano

Bibliotecas online

Enormes quantidades de conhecimento histórico estão sendo digitalizadas através do upload de varreduras de imagens para acesso a todo o mundo. Mas esse esforço não é muito útil até que o texto nas imagens possa ser identificado, que pode ser indexado, consultado e navegado. O reconhecimento de caligrafia desempenha um papel fundamental em trazer à vida documentos, cartões postais, estudos de pesquisa da Idade Média e do século 20, etc.

De Depósito

Os métodos de reconhecimento de escrita à mão podem ser amplamente classificados nos dois tipos abaixo

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning
  1. Métodos Online : - Os métodos online envolvem uma caneta digital / stylus e têm acesso às informações do traço, localização da caneta enquanto o texto está sendo escrito, conforme mostrado na figura à direita acima. Uma vez que tendem a ter muitas informações no que diz respeito ao fluxo do texto a ser escrito, podem ser classificados com uma precisão bastante elevada e a demarcação entre diferentes caracteres no texto torna-se muito mais clara
  2. Métodos offline :- Os métodos offline envolvem o reconhecimento de texto uma vez que ele é escrito e, portanto, não terá informações sobre os traços/direções envolvidos durante a escrita com uma possível adição de algum ruído de fundo da fonte, ou seja, papel.

No mundo real nem sempre é possível/escalável carregar uma caneta digital com sensores para capturar as informações do traço e, portanto, a tarefa de reconhecer texto offline é um problema muito mais relevante. Assim, agora vamos discutir várias técnicas para resolver o problema de reconhecimento de texto offline.

Técnicas

As abordagens iniciais para resolver o reconhecimento de escrita envolveram métodos de aprendizado de máquina como Hidden Markov Models (HMM), SVM etc. Uma vez que o texto inicial é pré-processado, a extração de recursos é realizada para identificar informações importantes, como loops, pontos de inflexão, proporção etc. de caráter individual. Esses recursos gerados agora são alimentados a um classificador, digamos HMM, para obter os resultados. O desempenho dos modelos de aprendizado de máquina é bastante limitado devido à fase de extração manual de recursos e sua capacidade limitada de aprendizado. A etapa de extração de recursos varia para cada idioma individual e, portanto, não é escalável. Com o advento do aprendizado profundo, houve melhorias tremendas na precisão do reconhecimento de caligrafia. Vamos discutir algumas das pesquisas proeminentes na área de aprendizado profundo para reconhecimento de caligrafia

Redes Neurais Recorrentes Multi-dimensionais

O RNN/LSTM como sabemos pode lidar com dados sequenciais para identificar padrões temporais e gerar resultados. Mas eles estão limitados a lidar com dados 1D e, portanto, não serão diretamente aplicáveis ​​aos dados de imagem. Para resolver este problema, os autores deste artigo propuseram uma estrutura multidimensional RNN/LSTM como pode ser visto na figura abaixo

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

A seguir está a diferença entre um RNN geral e um RNN multidimensional. Em um RNN geral, a camada oculta digamos que i recebe o estado de uma camada oculta anterior no tempo i-1. Em RNN multidimensional, digamos, por exemplo, um RNN bidimensional, a camada oculta (i, j) recebe estados de várias camadas ocultas anteriores, ou seja, (i-2, j) e (i, j-1) e, assim, captura o contexto de ambos altura e largura em uma imagem que é fundamental para obter uma compreensão clara da região local por uma rede. Isso é estendido para obter informações não apenas de camadas anteriores, mas também de camadas futuras semelhantes a como um BI-LSTM recebe informações de t-1 e t + 1. Da mesma forma, uma camada escondida 1D MDRNN i pode agora receber informações (i-2, j), (i, j-1), (i + 1, j), (i, j + 1), capturando assim o contexto em todas as direções

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Toda a estrutura da rede é mostrada acima. MDLSTM é usado, o que nada mais é do que substituir o bloco RNN por um bloco LSTM da discussão acima de MDRNN. A entrada é dividida em blocos de tamanho 3 × 4 que agora são alimentados em camadas MDSTM. A rede tem uma estrutura hierárquica de camadas MDLSTM seguidas por camadas feed-forward (ANN) em tandem. Em seguida, a saída final é convertida em um vetor 1D e é fornecida à função CTC para gerar a saída

Classificação Temporal Conexionista (CTC) éum algoritmo usado para lidar com tarefas como reconhecimento de voz, reconhecimento de escrita, etc. onde apenas os dados de entrada e a transcrição de saída estão disponíveis mas não são fornecidos detalhes de alinhamento, ou seja, como uma determinada região no áudio para a fala ou uma determinada região nas imagens para a escrita manual está alinhado a um caractere específico. Heurísticas simples, como dar a cada personagem a mesma área, não funcionarão, pois a quantidade de espaço que cada personagem ocupa varia na caligrafia de pessoa para pessoa e de tempos em tempos.

Para o nosso caso de uso de reconhecimento de manuscrito, considere as regiões da imagem de entrada para uma frase específica como entrada X=[x1,x2, ...,x ** T] enquanto saída esperada como Y=[y1,y2, ...,y ** U] . Dado X, devemos encontrar Y preciso. O algoritmo CTC funciona pegando a entrada X e distribuindo todos os Y possíveis, usando o que podemos fazer uma previsão para a saída final.

O CTC usa um caractere básico, digamos, para diferenciar entre caracteres duplicados e caracteres repetidos em uma região de entrada. Por exemplo, um caractere específico pode abranger várias regiões de entrada e, portanto, o CTC produziria o mesmo caractere consecutivamente. Exemplo: - Entrada james e Saída do CTC é jjaammmees. A saída final é derivada do colapso das saídas repetidas e, portanto, obtemos james. Mas agora, para apresentar caracteres duplicados, diga 'l' em hello, precisamos ter uma separação no lugar e, portanto, todas as saídas são separadas por hífen (-). Agora, a saída para hello pode ser h-ee-ll-lll-oo que, se recolhida, se tornará hello e não helo. Mais informações sobre o funcionamento do CTC podem ser vistas aqui CTC.

Ao decodificar a saída do CTC com base na heurística simples de maior probabilidade para cada posição, podemos obter resultados que podem não fazer sentido no mundo real. Para resolver isso, podemos empregar um decodificador diferente para melhorar os resultados. Vamos discutir diferentes tipos de decodificação

  1. Decodificação de melhor caminho : - Esta é a decodificação genérica que discutimos até agora. Em cada posição, pegamos a saída do modelo e encontramos o resultado com a maior probabilidade.
  2. Decodificação de pesquisa de feixe : - Em vez de obter uma única saída da rede toda vez que a pesquisa de feixe sugere manter vários caminhos de saída com todas as probabilidades mais altas e expandir a cadeia com novas saídas e caminhos de queda com probabilidades menores para manter o tamanho do feixe constante. Os resultados obtidos por meio desta abordagem são mais precisos do que usando a abordagem gananciosa
  3. Pesquisa de feixe com modelo de linguagem :- A pesquisa de feixe fornece resultados mais precisos do que a pesquisa de grade, mas ainda não resolve o problema de obter resultados significativos. Para resolver isso, podemos usar um modelo de linguagem junto com a busca de feixe usando as probabilidades do modelo e o modelo de linguagem para gerar os resultados finais.

Mais detalhes na geração de resultados de decodificação precisos podem ser vistos neste artigo

Codificador-Decodificador e Redes de Atenção

Os modelos Seq2Seq com redes de codificador-decodificador foram recentemente populares para resolver as tarefas de reconhecimento de fala, tradução automática, etc. Vamos discutir algumas pesquisas seminais nesta área

Escaneie, compareça e leia

Neste trabalho seminal Scan, Attend and Read (SAR), os autores propõem o uso de um modelo baseado na atenção para o reconhecimento de caligrafia de ponta a ponta. A principal contribuição da pesquisa é a transcrição automática de texto sem segmentação em linhas como uma etapa de pré-processamento e, assim, pode digitalizar uma página inteira e dar resultados.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

O SAR usa uma arquitetura baseada em MDLSTM semelhante à que discutimos acima, com uma pequena mudança na camada final. Após a última camada linear, ou seja, o bloco de soma final na figura acima, os mapas de recursos são recolhidos na dimensão vertical e uma função softmax final é aplicada para obter os resultados.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

A arquitetura SAR consiste em uma arquitetura MDLSTM que atua como extrator de recursos. O módulo de colapso final com uma saída softmax e perda CTC é substituído por um módulo de atenção e um decodificador LSTM. O modelo de atenção usado é uma combinação híbrida de atenção baseada em conteúdo e atenção baseada em localização, que é explicada em mais detalhes no próximo artigo. Os módulos LSTM do decodificador tomam o estado anterior, o mapa de atenção anterior e os recursos do codificador para gerar o caractere de saída final e o vetor de estado para a próxima previsão.

Convolver, participar e soletrar

Este artigo propõe um modelo seqüência a seqüência baseado na atenção para o reconhecimento de palavras manuscritas. A arquitetura proposta tem três partes principais: um codificador, que consiste em um CNN e um GRU bidirecional, um mecanismo de atenção dedicado a focar nas características pertinentes e um decodificador formado por um GRU unidirecional, capaz de soletrar a palavra correspondente, personagem por personagem.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

O codificador usa uma CNN para extrair recursos visuais. Uma arquitetura VGG-19-BN pré-treinada é usada como extrator de recursos. A imagem de entrada é convertida no mapa de características X, que é então remodelado em X', dividindo todos os canais em colunas e combinando-os para obter as informações sequenciais. X' é ainda convertido em H usando uma GRU bidirecional. GRU é uma rede neural semelhante ao LSTM na natureza e pode capturar informações temporais.

Além disso, um modelo de atenção é empregado ao prever a saída do decodificador. O artigo discute dois tipos diferentes de mecanismos de atenção explorados.

  1. Atenção baseada em conteúdo : - A ideia por trás disso é encontrar a semelhança entre o estado oculto atual do decodificador e o mapa de recursos do codificador. Podemos encontrar os vetores de recursos mais correlacionados no mapa de recursos do codificador, que pode ser usado para prever o caractere atual no intervalo de tempo atual. Mais detalhes sobre como funciona o mecanismo de atenção podem ser vistos aqui Atenção
  2. Atenção com base na localização :- A principal desvantagem dos mecanismos de localização baseada em conteúdo é que há uma suposição implícita de que as informações de localização estão incorporadas na saída do codificador. Caso contrário, não há como diferenciar entre as saídas de caracteres que são repetidas do decodificador. Por exemplo, considere uma palavra Charmander, o caractere a é repetido duas vezes nela e, sem informações de localização, o decodificador não poderá prevê-los como caracteres separados. Para aliviar isso, o caractere atual e seu alinhamento são previstos usando a saída do codificador e o alinhamento anterior. Mais detalhes sobre como funciona o atendimento baseado em localização podem ser vistos SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

O decodificador é um GRU multicamadas unidirecional. Em cada etapa de tempo t, ele recebe a entrada da etapa de tempo anterior e o vetor de contexto do módulo de atenção. A decodificação multinomial e a suavização de rótulo são exploradas no treinamento para melhorar a capacidade de generalização.

Modelos de transformadores

Embora as redes codificador-decodificador tenham sido muito boas em obter resultados para reconhecimento de manuscrito, elas têm um gargalo no treinamento devido às camadas LSTM envolvidas e, portanto, não podem ser paralelizadas. Recentemente, os transformadores tiveram bastante sucesso e substituíram o LSTM na resolução de várias tarefas relacionadas à linguagem. Vamos discutir agora como os modelos baseados em transformadores podem ser aplicados para reconhecimento de escrita.

Preste atenção ao que você lê

Neste trabalho, os autores propuseram o uso de uma arquitetura baseada em transformador usando camadas de atenção e autoatenção com várias cabeças em estágios visuais e de texto e, portanto, podem aprender tanto o reconhecimento de caracteres quanto as dependências relacionadas ao idioma das sequências de caracteres a serem decodificadas. Uma vez que o conhecimento da linguagem está embutido no próprio modelo, não há necessidade de nenhuma etapa adicional de pós-processamento usando um modelo de linguagem e, portanto, tem a capacidade de prever resultados que não fazem parte do vocabulário. Para conseguir isso, a codificação do texto ocorre no nível do caractere e não no nível da palavra. Como a arquitetura do transformador permite treinar o modelo em paralelo para cada região ou personagem, o processo de treinamento é muito simplificado.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

A arquitetura da rede consiste nos seguintes componentes

  1. Codificador visual : - Extrair recursos relevantes e aplicar auto-atenção visual multifacetada em diferentes localizações de personagens
  2. Transcritor de Texto : - Realiza a tarefa de pegar a entrada de texto, codificá-la, aplicando a auto-atenção linguística com vários cabeçalhos e aplicando a atenção mútua nos recursos visuais e textuais.
Codificador Visual

O backbone Resnet50 é usado para extras de recursos como pode ser visto na figura acima. A saída do mapa de recursos tridimensional do Resnet3 Fc é passada para o módulo de Codificação Temporal que remodela para 50d mantendo a mesma largura e, portanto, a forma de (fxh, w). Isso é alimentado em uma camada totalmente conectada para reduzir a forma para (f, w) e a saída resultante é Fc'. Além disso, uma codificação posicional TE é adicionada a Fc' para reter a informação de posição, conforme mencionado no artigo Transformer de Vaswani. Mais informações de como a arquitetura do transformador é projetada podem ser vistas SUA PARTICIPAÇÃO FAZ A DIFERENÇA. A saída é passada por uma camada totalmente conectada para obter o mapa de feições final com forma (f, w). A saída final é passada por um módulo de atenção com várias cabeças com 8 cabeças para obter um mapa de recursos visual rico

Transcritor de Texto

O texto de entrada é passado por um codificador que gera embeddings em nível de caractere. Esses embeddings são combinados com a localização temporal semelhante à forma como no Visual Encoder usando um módulo Temporal Encoder. Este resultado é então transmitido para um módulo de Autoatenção de Linguagem Múltipla que é semelhante ao módulo de atenção no codificador Visual. Os recursos de texto gerados ao longo dos recursos visuais do codificador visual são passados ​​para um módulo de atenção mútua, cuja tarefa é alinhar e combinar os recursos aprendidos das imagens e das entradas de texto. A saída é passada por uma função softmax para obter o resultado final.

Ao avaliar os dados de teste, as transcrições não estão disponíveis. Assim, apenas o token inicial <S> é passado como entrada e o primeiro caractere predito é retornado ao sistema, que gera o segundo caractere predito. Este processo de inferência é repetido em um loop até que o símbolo de fim de seqüência <E> seja produzido ou quando o comprimento máximo de saída N for atingido.

Geração de texto manuscrito

A geração de texto manuscrito é a tarefa de gerar texto manuscrito com aparência real e, portanto, pode ser usado para aumentar os conjuntos de dados existentes. Como sabemos, o aprendizado profundo requer muitos dados para treinar, enquanto obter um enorme corpus de imagens de caligrafia rotuladas para diferentes idiomas é uma tarefa complicada. Para resolver isso, podemos usar Redes Adversariais Generativas para gerar dados de treinamento. Vamos discutir uma dessas arquiteturas aqui

ScrabbleGAN

ScrabbleGAN segue uma abordagem semi-supervisionada para sintetizar imagens de texto manuscritas que são versáteis em estilo e léxico. Ele tem a capacidade de gerar imagens de comprimentos variados. O gerador também pode manipular o estilo de texto resultante, o que nos permite decidir se o texto deve ser cursivo ou dizer o quão grosso / fino deve ser o traço da caneta

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

A arquitetura consiste em um gerador totalmente convolucional baseado no BigGAN. Para cada caractere na entrada, um filtro correspondente é escolhido e todos os valores são concatenados, o que é então multiplicado por um vetor de ruído z que controla o estilo de texto gerado. Como pode ser visto acima, as regiões geradas para cada caractere individual se sobrepõem, ajudando na geração de texto recursivo conectado, bem como permitindo a flexibilidade de diferentes tamanhos de caracteres. Por exemplo, m ocupa muito do espaço, enquanto e e t ocupam uma área limitada. Para manter o mesmo estilo para palavras ou frases inteiras, o vetor de estilo z é mantido constante para todos os caracteres.

Um discriminador convolucional baseado na arquitetura BigGAN é usado para classificar se o estilo de geração de imagens parece falso ou real. O discriminador não depende de anotações de nível de caractere e, portanto, não é baseado em um GAN condicional de classe. A vantagem disso é que não há necessidade de dados rotulados e, portanto, dados de corpus não vistos que não fazem parte dos dados de treinamento podem ser usados ​​para discriminador de treinamento. Junto com o discriminador, um reconhecedor de texto R é treinado para classificar se o texto gerado faz sentido no mundo real ou se é sem sentido. O reconhecedor é baseado em arquiteturas CRNN com a cabeça recorrente removida para tornar o reconhecedor um pouco mais fraco e não reconhecer texto mesmo que não esteja claro. O texto gerado na saída de R é comparado com o texto de entrada dado ao gerador e uma penalidade correspondente é adicionada à função de perda.

As saídas geradas pelo ScrabbleGAN são mostradas abaixo

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Conjuntos de dados: -

  1. IAM : - O conjunto de dados IAM contém cerca de 100 mil imagens de palavras do idioma inglês com palavras escritas por 657 autores diferentes. O conjunto de treinamento, teste e validação contém palavras escritas por authorLink mutuamente exclusivos: - http://www.fki.inf.unibe.ch/databases/iam-handwriting-database
  2. CVL : - O conjunto de dados CVL consiste em sete documentos manuscritos escritos por cerca de 310 participantes, resultando em cerca de 83 mil culturas de palavras, divididos em conjuntos de treinamento e testeLink: - https://cvl.tuwien.ac.at/research/cvl-databases/an-off-line-database-for-writer-retrieval-writer-identification-and-word-spotting/
  3. RIMES : - Contém palavras da língua francesa de cerca de 60 mil imagens e escritas por 1300 autores correspondendo a cerca de 5 e-mails escritos por cada pessoa.Link: - http://www.a2ialab.com/doku.php?id=rimes_database:start

Métricas :-

Taxa de erro de caractere : - É calculado como a distância Levenshtein que é a soma das substituições de caracteres (Sc), inserções (Ic) e exclusões (Dc) que são necessárias para transformar uma string na outra, dividida pelo número total de caracteres no verdade fundamental (Nc)

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Taxa de erros de palavras : - É calculado como a soma das substituições de palavras (Sw), inserções (Iw) e exclusões (Dw) que são necessárias para transformar uma string na outra, dividido pelo número total de palavras na verdade fundamental (Nw)

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Treine seu próprio modelo de reconhecimento de caligrafia

Agora vamos ver como podemos treinar nosso próprio modelo de reconhecimento de texto manuscrito. Estaremos treinando no conjunto de dados do IAM, mas você também pode treinar o modelo em seu próprio conjunto de dados. Vamos discutir as etapas envolvidas na configuração

Data

Para baixar o registro do conjunto de dados IAM de SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Depois de registrado, baixe words.tgz de SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Contém um conjunto de dados de imagens de palavras escritas à mão. Baixe também o arquivo de anotação words.txt em SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Se você deseja usar seu próprio conjunto de dados, você precisa seguir a estruturação de dados do conjunto de dados IAM.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

A imagem acima mostra a aparência da estrutura de pastas do conjunto de dados do AIM. Aqui a01, a02 etc. representam as pastas pai, cada uma com subpastas de dados. Cada subpasta tem um conjunto de imagens com o nome da pasta adicionado como prefixo ao nome do arquivo.

Além disso, precisamos de um arquivo de anotação para mencionar os caminhos para os arquivos de imagens e as transcrições correspondentes. Considere, por exemplo, a imagem acima com nomeação de texto, abaixo seria a representação no arquivo de anotação words.txt

a01-000u-01-00 ok 156 395 932 441 100 VBG nomeando

  1. a01-000u-01-00 -> id da palavra para uma linha no formato a01-000u
  2. ok / err -> Indicador de qualidade de saída de segmentação
  3. 156 -> nível de cinza para binarizar a linha que contém esta palavra
  4. 395 932 441 100 -> caixa delimitadora ao redor desta palavra no formato x, y, w, h
  5. VBG -> a etiqueta gramatical para esta palavra. Aqui está o verbo gerúndio
  6. nomeação -> a transcrição para esta palavra

Arquitetura: -

Estaremos treinando uma arquitetura baseada em CRNN com perda de CTC. Um CNN é usado para extrair os recursos visuais que são passados ​​para um RNN e uma perda de CTC é aplicada ao final com um decodificador ganancioso para obter a saída.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

Training

Estaremos usando o código CRNN de SUA PARTICIPAÇÃO FAZ A DIFERENÇA para treinar nosso modelo. Siga as etapas abaixo para preparar os dados

python checkDirs.py

Execute o comando acima e você verá uma saída como a abaixo

[OK] palavras /
[OK] palavras / a01 / a01-000u /
[OK] palavras.txt
[OK] teste.png
[OK] words/a01/a01-000u/a01-000u-00-00.png

Agora você está pronto para começar a treinar.

Vá para o diretório raiz e execute

python main.py --train

Resultados

Após o treinamento por cerca de 50 épocas, a taxa de erro do caractere (CER) é de 10.72%, enquanto a taxa de erro da palavra (WER) é de 26.45% e, portanto, a precisão da palavra é 73.55%. Algumas das previsões podem ser vistas na figura abaixo.

Como fazer facilmente o reconhecimento de escrita manual usando Machine Learning

O modelo é capaz de prever os personagens com precisão em grande medida, mas sofre em alguns casos, como terrivelmente é predito como terrivelmente, histórias é predito como staries. Esses problemas podem ser resolvidos empregando um modelo de linguagem como uma etapa de pós-processamento junto com o decodificador, que pode gerar palavras significativas e retificar erros simples.

Resumo

Embora tenha havido desenvolvimentos significativos na tecnologia que ajudam no melhor reconhecimento de texto manuscrito, o HTR está longe de ser um problema resolvido em comparação com o OCR e, portanto, ainda não é amplamente utilizado na indústria. No entanto, com o ritmo da evolução da tecnologia e com a introdução de modelos como transformadores, podemos esperar que os modelos HTR se tornem um lugar-comum em breve.

Para obter mais pesquisas sobre este tópico, você pode começar a partir de SUA PARTICIPAÇÃO FAZ A DIFERENÇA

Leitura

Carimbo de hora:

Mais de IA e aprendizado de máquina