NLP nas empresas | Reconhecimento de textos com Deep Learning em PDFs e imagens

Pierre Guillou
14 min readOct 1, 2021

--

Todas as empresas têm uma coisa em comum: usam e produzem muitos documentos em formatos como PDF ou imagem que dificultam a análise por modelos de NLP de tipo NER (Named Entity Recognition), por exemplo. Felizmente, as ferramentas de OCR (Optical character recognition) progrediram enormemente, em particular desde 2018 com o uso de modelos de Deep Learning para a detecção e reconhecimento de textos. Se Tesseract é a ferramenta Open Source mais conhecida, e existem outras ferramentas como o DocTR que também merecem ser testadas quanto à facilidade de uso e eficiência graças ao Deep Learning.

Notebook no github (versão 1.2 do 12/10/2021): OCR_DeepLearning_Tesseract_DocTR_colab.ipynb (nbviewer)

Sumário

  • Tesseract
    — Instalação
    — Detecção de palavras
    1. Imagem
    2. PDF
    — Detecção de pattern
    — Como melhorar Tesseract?
    1. Melhore a qualidade dos resultados com o pré-processamento de imagens
    2. Finetuning do Tesseract
  • DocTR
    — Instalação
    — Detecção de palavras
    1. Imagem
    2. PDF
    — Demo online no model hub da Hugging Face
  • Paper to HTML Converter (Allen Institute for AI)

Tesseract

Tesseract
Tesseract

Tesseract é um mecanismo de reconhecimento óptico de caracteres (OCR) para vários sistemas operacionais. É um software livre, lançado sob a licença Apache.

Originalmente desenvolvido pela Hewlett-Packard como software proprietário na década de 1980, foi lançado como Open Source em 2005 e o desenvolvimento foi patrocinado pelo Google desde 2006.

A versão 4 adiciona o mecanismo de OCR baseado em LSTM para muitos idiomas e scripts adicionais, elevando o total para 116 idiomas.

Instalação

A comprehensive guide to OCR with Tesseract, OpenCV and Python fornece todas as etapas para usar Tesseract em um notebook.

Detecção de palavras

Aqui abaixo está o resultado visual da detecção de palavras em uma imagem e um PDF (todo o código está no notebook OCR_DeepLearning_Tesseract_DocTR_colab.ipynb).

1. Imagem

Aqui está o texto extraído pelo Tesseract dessa imagem:

Covid-19 | Novo coronavirus am,  [sus Atenção com as Máscaras de Tecido  
* É de uso individual;
* Deve estar bem ajustada ao rosto;
* Não utilizar a máscara por longo tempo (máximo de 3 horas);
* Trocar sempre que tiver úmida, com sujeira aparente, danificada ou se houver dificuldade para respirar;
* Para remover a máscara, manusear o elástico ao redor das orelhas, não tocar na parte frontal da máscara e colocar em um saco fechado para futura limpeza; 5" SN a Ss
* Não deixe de adotar as medidas de higiene aa Ens respiratória para espirros/tosse; e 1 E
* Não deixe de higienizar as mãos após 7 a retirada da máscara. DOE G EE
* Mesmo de máscara, mantenha distância de mais de 1 metro de outra pessoa;
mocitl Zea INCQS Lift gTr A So go ENTAO [E CEA HSaúdeRespiratória HHigieneÉPrevenção

2. PDF

Aqui está o texto extraído pelo Tesseract desse PDF:

BOLETIM EPIDEMIOLÓGICO ESPECIAL | Secretaria de Vigilância em Saúde | Ministério da Saúde  Brasil  O Ministério da Saúde recebeu a primeira notificação  de um caso confirmado de covid-19 no Brasil em 26 de fevereiro de 2020. De 26 de fevereiro de 2020 a 27 de fevereiro de 2021 foram confirmados 10.517.232 casos e 254.221 óbitos por covid-19 no Brasil. O maior registro no número de novos casos em um único dia (87.843 casos) ocorreu no dia 7 de janeiro de 2021 e O de novos óbitos (1.595 óbitos) ocorreu no dia 29 de julho de 2020.  Em relação aos casos, a média móvel de casos registrados na SE 8 (21/2 a 27/2/2021) foi de 54.012, enquanto que na SE 7 (14 a 20/02/21) foi de 47.056, ou seja, um aumento de 15% no número de casos novos  da semana atual. Quanto aos óbitos, a média móvel de óbitos registrados na SE 8 foi de 1.178, representando um aumento de 11% em relação à média de registros da SE 07 (1.064) (Figura 6A e 68).  Durante a SE 8 de 2021 foram registrados um total de 378.084 casos novos e 8.244 óbitos novos por covid-19 no Brasil. Para o país, a taxa de incidência até o dia 27 de fevereiro de 2021 foi de 4.966,7 casos por 100 mil habitantes, enquanto a taxa de mortalidade foi de 12071 óbitos por 100 mil habitantes.  No decorrer das semanas epidemiológicas do ano  de 2020 até a SE 8 de 2021, os casos e óbitos novos relacionados à covid-19 se mostraram heterogêneos entre as diferentes regiões do país. Na semana epidemiológica atual, o Sudeste foi a região com  maior número absoluto de casos novos, seguido do Sul, Nordeste, Centro-Oeste e Norte (Figura 7). No que concerne aos óbitos, na SE 8, o Sudeste também foi aquele com maior número absoluto de óbitos novos no país, seguido pela Região Nordeste, Sul, Norte e Centro- Oeste do Brasil, respectivamente.     Na semana epidemiológica 8, o número de casos novos de covid-19 foi de 123.134 no Sudeste, 81.409 no Nordeste, 99.954 no Sul, 36.601 no Norte e 36.986 no Centro-Oeste; o número de óbitos novos foi 3.522 no Sudeste, 1.601 no Nordeste, 590 no Centro-Oeste, 1.490 no Sule 1.041 no Norte.  Conforme apresentado na Tabela 1, observa-se que  a região Norte registrou um coeficiente de incidência  de 6.232,3 casos/100 mil hab. e mortalidade de 144,6 óbitos/100 mil habitantes. O estado de Roraima apresentou a maior incidência do país, 12.956,0 casos/100 mil hab., superando inclusive a taxa de incidência da própria região Norte. A maior taxa de mortalidade do país e da região Norte foi do Amazonas, que apresentou 257,4 óbitos/100 mil habitantes. A região Nordeste  teve uma incidência de 4.290,7 casos/100 mil hab. e mortalidade de 98,2 óbitos/100 mil hab., com o estado de Sergipe apresentando a maior incidência (6.491,8 casos/100 mil hab.) e mortalidade (127,4 casos/100  mil hab.) da região. Na região Sudeste o coeficiente  de incidência foi de 4.291,0 casos/100 mil hab. e a mortalidade de 131,8 óbitos/100 mil hab., com o estado do Espírito Santo apresentando a maior incidência (8.001,6 casos /100 mil hab.) e o Rio de Janeiro a maior mortalidade (190,2 óbitos/100 mil hab.). A região Sul registrou uma incidência de 6.462,4 casos/100 mil hab.  e mortalidade de 103,6 óbitos/100 mil hab., com Santa Catarina apresentando a maior taxa de incidência (9.221,8 casos/100 mil hab.) e o Rio Grande do Sul com a maior taxa de mortalidade (10871 óbitos/100 mil hab.). Por fim, a região Centro-Oeste, que apresentou a maior incidência e mortalidade do país (6.792,9 casos/100 mil hab. e  135,3 óbitos/100 mil hab.), teve o Distrito Federal com a maior taxa de incidência (9.676,0 casos/100 mil hab.) e  o Mato Grosso com a maior taxa de mortalidade (161,3 óbitos/100 mil hab.) da região.Semana Epidemiológica 8 (21 a 27/2/2021)

Detecção de pattern

Aqui abaixo está o resultado visual da detecção de pattern em uma imagem e um PDF (todo o código está no notebook OCR_DeepLearning_Tesseract_DocTR_colab.ipynb).

Nota: procuramos aqui uma palavra em particular (Covid-10 na imagem e Brasil no PDF).

Detecção de pattern nas imagens e PDFs pelo Tesseract

Como melhorar Tesseract?

Abaixo, 2 opções são detalhadas para melhorar os resultados do Tesseract.

1. Melhore a qualidade dos resultados com o pré-processamento de imagens

Existem vários motivos pelos quais você pode não obter uma saída de boa qualidade do Tesseract. É importante observar que, a menos que você esteja usando uma fonte muito incomum ou um novo idioma, o finetuning do Tesseract provavelmente não ajudará.

Lista de técnicas de pré-processamento de imagem

2. Finetuning do Tesseract

O texto a seguir é uma tradução para o português da introdução do guia “How to use the tools provided to train Tesseract 4.00” (link na lista Training for Tesseract 4.

O Tesseract 4.00 inclui um novo mecanismo de reconhecimento baseado em rede neural que oferece uma precisão significativamente maior (em imagens de documentos) do que as versões anteriores, em troca de um aumento significativo na capacidade de computação necessária. Em linguagens complexas, no entanto, pode ser mais rápido do que o Tesseract básico.

As redes neurais requerem significativamente mais dados de treinamento e treinam muito mais devagar do que o Tesseract básico. Para idiomas baseados no latim, os dados do modelo existente fornecidos foram treinados em cerca de 400.000 linhas de texto abrangendo cerca de 4.500 fontes. Para outros scripts, não há tantas fontes disponíveis, mas eles ainda foram treinados em um número semelhante de linhas de texto. Em vez de levar de alguns minutos a algumas horas para treinar, o Tesseract 4.00 leva de alguns dias a algumas semanas. Mesmo com todos esses novos dados de treinamento, você pode considerá-los inadequados para o seu problema específico e, portanto, deseja treiná-los novamente.

Existem várias opções de treinamento:

  • Afinar. Começando com um idioma treinado existente, treine em seus dados adicionais específicos. Isso pode funcionar para problemas próximos aos dados de treinamento existentes, mas diferentes de alguma forma sutil, como uma fonte particularmente incomum. Pode funcionar até mesmo com uma pequena quantidade de dados de treinamento.
  • Corte a camada superior (ou algum número arbitrário de camadas) da rede e treine novamente uma nova camada superior usando os novos dados. Se o ajuste fino não funcionar, esta é provavelmente a próxima melhor opção. Cortar a camada superior ainda pode funcionar para treinar um idioma ou script completamente novo, se você começar com o script de aparência mais semelhante.
  • Retreine do zero. Esta é uma tarefa difícil, a menos que você tenha um conjunto de treinamento muito representativo e suficientemente grande para o seu problema. Do contrário, é provável que você termine com uma rede super ajustada que se sai muito bem com os dados de treinamento, mas não com os dados reais.

Embora as opções acima possam parecer diferentes, as etapas de treinamento são quase idênticas, exceto a linha de comando, por isso é relativamente fácil tentar de todas as maneiras, dado o tempo ou o hardware para executá-las em paralelo.

Por 4.00, pelo menos, o mecanismo de reconhecimento antigo ainda está presente e também pode ser treinado, mas está obsoleto e, a menos que haja boas razões para mantê-lo, pode ser excluído em uma versão futura.

DocTR

DocTR
DocTR

O OCR é obtido no DocTR usando uma abordagem de dois estágios com modelos de Deep Learning:

  1. detecção de texto (localização de palavras)
  2. e, em seguida, reconhecimento de texto (identificar todos os caracteres na palavra).

Assim, pode selecionar a arquitetura usada para detecção de texto e para reconhecimento de texto na lista de implementações disponíveis.

Os modelos padrão são os seguintes:

  1. detecção de texto: ResNet 50
  2. reconhecimento de texto: VGG-16 com batch normalization

Nota (fonte): DocTR trata de reconhecimento visual de texto por enquanto, então o idioma não importa, contanto que use um vocabulário compatível. Atualmente, DocTR é treinado no vocabulário francês, que possui apenas alguns caracteres com sotaque diferentes em comparação com o português. (…) Recentemente (setembro 2021), obtivemos uma nova entrada nos vocabs disponíveis para o português #464, para que possa ajustar facilmente os modelos de reconhecimento do DocTR neste vocabulário se tiver dados adequados para o treinamento!

Instalação

A documentação do DocTR fornece todas as etapas para usá-lo em um notebook.

Detecção de palavras

Aqui abaixo está o resultado visual da detecção de palavras em um PDF e uma imagem (todo o código está no notebook OCR_DeepLearning_Tesseract_DocTR_colab.ipynb).

1. Imagem

Aqui está o texto extraído pelo DocTR dessa imagem (nota: o reconhecimento de texto não usava um vocab em português):

Covid-19 Novo coronavirus Aqui somos SUS Mascaras com Tecido as de Atençao I Para familia e sua protegervoce CUIDADOS uso individual; Éde estar Deve bem ao ajustada rosto; utilizar Nao mascara a tempo (maximo longo de por 3 horas); Trocar tiver sempre com que umida, aparente, sujeira danificada ou houver se dificuldade para respirar; remover Para manusear a elastico mascara, O ao das redor tocar nâo na frontal orelhas, mascara colocar da parte e em saco um fechado futura para limpeza; Mesmo de mantenha distância mascara, mais metro de outra del de pessoa, deixe adotar Nao medidas de as de higiene respiratoria espirros/tosse; para Nao deixe de maos as higienizar apos retirada a mascara. da Ministério Saude da ir fiocruz.br/coronavirus FIOCRUZ INCQS Oswaldo Fundaçao Cruz HSaudeRespiratoria HHigienetPrevengdo

2. PDF

Aqui está o texto extraído pelo DocTR desse PDF (nota: o reconhecimento de texto não usava um vocab em português):

BOLETIM EPIDEMIOLOGICO ESPECIALISecretaria Saude Ministério de Vigilancia Saude em Semana a da 8 (21 27/2/2021) Epidemiologica Brasil Na semana numero 0 epidemiologica de casos 8, Ministério Saude recebeu 0 a da primeira notificaçao covid-19 de novos 123.134 de foi no Sudeste, 81.409 no de de covid-19 um caso confirmado Brasil de no em 99.954 26 36.601 Nordeste, Norte e no 36.986 no Sul, no fevereiro fevereiro de 2020. De 26 de de 2020 a 27 de Centro-Oeste; 0 numero de obitos novos foi 3.522 no fevereiro confirmados de 10.517.232 2021 foram casos e Sudeste, 1.601 Nordeste, 590 Centro-Oeste, no 1.490 no 254.221 obitos covid-19 Brasil. maior no 0 e no por Sul 1.041 no no Norte. registro numero de unico novos dia casos em um (87.843 casos) dia de de 2021 no e de 7 janeiro obitos 0 Conforme novos Tabela observa-se na apresentado 1, que (1.595 obitos) ocorreu dia 29 de de 2020. no Norte julho ar regiao de registrou incidência um coeficiente de e mortalidade casos/100 mil de hab. 6.232,3 144,6 média Em movel aos a de casos, casos habitantes. relaçao obitos/100 estado mil Roraima 0 de 8 na SE registrados a foi de 54.012, (21/2 a maior 27/2/2021) incidência do casos/100 apresentou 12.956,0 pais, 7 enquanto a 20/02/21) na SE que de 47.056, (14 ou inclusive foi mil hab., a taxa superando de incidência da aumento de 15% seja, numero um de casos novos no mortalidade Norte. maior taxa regiao de A propria do da semana atual. média Quanto movel aos a de e da Norte obitos, foi do pais Amazonas, regiào que apresentou obitos 8 SE foi de representando obitos/100 na um registrados habitantes. Nordeste mil 1.178, 257,4 A regiào aumento 11% em média de de registros incidência da SE à teve uma relaçao mil de casos/100 4.290,7 e hab. e 07 (Figura 6A (1.064) 6B). obitos/100 mortalidade mil de 0 estado 98,2 com hab., incidência de a maior Sergipe apresentando (6.491,8 Durante a SE de um 2021 foram 8 total de mortalidade casos/100 mil registrados e casos/100 hab.) (127,4 378.084 casos novos e covid-19 8.244 obitos novos mil hab.) Sudeste da 0 coeficiente Na por regiào. regiào Brasil. no incidência Para 0 até 0 a taxa de incidência dia 27 de pais, foi de 4.291,0 e a casos/100 mil hab. fevereiro de 2021 foi de de 100 mil 4.966,7 casos de obitos/100 mortalidade por mil 131,8 0 estado com hab., mortalidade a taxa de enquanto foi de habitantes, do Santo incidência a maior 120,1 Espirito apresentando habitantes. obitos 100 mil por (8.001,6 casos/100 mil hab.) e 0 Rio de Janeiro a maior mortalidade obitos/100 mil (190,2 Sul hab.). A regiào decorrer das No semanas do ano epidemiologicas incidência registrou uma mil de 6.462,4 casos/100 hab. de até a 8 de e obitos SE 2021, OS 2020 casos e novos de obitos/100 mortalidade mil 103,6 Santa com hab., covid-19 relacionados mostraram à se Catarina incidência a maior heterogêneos taxa de (9.221,8 apresentando diferentes entre do as Na semana regioes casos/100 Grande mil hab.) pais. Rio do Sul com e 0 a maior Sudeste atual, 0 epidemiologica foi a com mortalidade taxa de regiào obitos/100 mil hab.). (108,1 Por a fim, maior numero absoluto de casos do novos, a maior incidencia seguido Centro-Oeste, regiào apresentou que Centro-Oeste e Nordeste, Norte e mortalidade No Sul, do (Figura casos/100 que mil hab. e 7). (6.792,9 pais concerne 0 Sudeste aos obitos, também na SE foi obitos/100 8, mil teve Distrito Federal com 135,3 a 0 hab.), numero absoluto com maior de obitos novos aquele incidencia maior taxa de no casos/100 mil hab.) e (9.676,0 Centro- Nordeste, Norte e seguido 0 pela Mato Regiào Grosso mortalidade pais, com a Sul, taxa de maior (161,3 Oeste do Brasil, respectivamente. mil obitos/100 da hab.) regiào. 7

Demo online no model hub da Hugging Face

Se preferir testar DocTR sem código para rodar, use sua demo online no model hub da Hugging Face.

Paper to HTML Converter (Allen Institute for AI)

Vários outros extratores de texto existem a partir de imagens ou PDFs, e usando modelos de Deep Learning. Por exemplo, o serviço online “Paper to HTML Converter” do Allen Institute for AI.

Paper to HTML Converter (Allen Institute for AI)

Aqui está o texto extraído por esse serviço do PDF usado nesse post:

O Ministério da Saúde recebeu a primeira notificação de um caso confirmado de covid-19 no Brasil em 26 de fevereiro de 2020. De 26 de fevereiro de 2020 a 27 de fevereiro de 2021 foram confirmados 10.517.232 casos e 254.221 óbitos por covid-19 no Brasil. O maior registro no número de novos casos em um único dia (87.843 casos) ocorreu no dia 7 de janeiro de 2021 e O de novos óbitos (1.595 óbitos) ocorreu no dia 29 de julho de 2020.Em relação aos casos, a média móvel de casos registrados na SE 8 (21/2 a 27/2/2021) foi de 54.012, enquanto que na SE 7 (14 a 20/02/21) foi de 47.056, ou seja, um aumento de 15% no número de casos novos da semana atual. Quanto aos óbitos, a média móvel de óbitos registrados na SE 8 foi de 1.178, representando um aumento de 11% em relação à média de registros da SE 07 (1.064) ( Figura Conforme apresentado na Tabela 1, observa-se que a região Norte registrou um coeficiente de incidência de 6.232,3 casos/100 mil hab. e mortalidade de 144,6 óbitos/100 mil habitantes. O estado de Roraima apresentou a maior incidência do país, 12.956,0 casos/100 mil hab., superando inclusive a taxa de incidência da própria região Norte. A maior taxa de mortalidade do país e da região Norte foi do Amazonas, que apresentou 257,4 óbitos/100 mil habitantes. A região Nordeste teve uma incidência de 4.290,7 casos/100 mil hab. e mortalidade de 98,2 óbitos/100 mil hab., com o estado de Sergipe apresentando a maior incidência (6.491,8 casos/100 mil hab.) e mortalidade (127,4 casos/100 mil hab.) da região. Na região Sudeste o coeficiente de incidência foi de 4.291,0 casos/100 mil hab. e a mortalidade de 131,8 óbitos/100 mil hab., com o estado do Espírito Santo apresentando a maior incidência (8.001,6 casos/100 mil hab.) e o Rio de Janeiro a maior mortalidade (190,2 óbitos/100 mil hab.). A região Sul registrou uma incidência de 6.462,4 casos/100 mil hab. e mortalidade de 103,6 óbitos/100 mil hab., com Santa Catarina apresentando a maior taxa de incidência (9.221,8 casos/100 mil hab.) e o Rio Grande do Sul com a maior taxa de mortalidade (108,1 óbitos/100 mil hab.). Por fim, a região Centro-Oeste, que apresentou a maior incidência e mortalidade do país (6.792,9 casos/100 mil hab. e 135,3 óbitos/100 mil hab.), teve o Distrito Federal com a maior taxa de incidência (9.676,0 casos/100 mil hab.) e o Mato Grosso com a maior taxa de mortalidade (161,3 óbitos/100 mil hab.) da região.

Sobre o autor: Pierre Guillou é Head of AI na startup de HealthTech Laudite (Brasil), e consultor de IA no Brasil e na França. Entre em contato com ele por meio de seu perfil no LinkedIn.

--

--

Pierre Guillou

AI, Generative AI, Deep learning, NLP models author | Europe (Paris, Bruxelles, Liège) & Brazil