Como fazer OCR com Tesseract, OpenCV e Python PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Como fazer OCR com Tesseract, OpenCV e Python

Como fazer OCR com Tesseract, OpenCV e Python

Nesta postagem do blog, tentaremos explicar a tecnologia por trás do Tesseract Engine mais usado, que foi atualizado com os mais recentes conhecimentos pesquisados ​​em reconhecimento óptico de caracteres. Este artigo também servirá como um guia prático / tutorial sobre como implementar OCR em python usando o mecanismo Tesseract. Estaremos percorrendo os seguintes módulos:

  • Recursos de OCR do Tesseract
  • Pré-processamento para OCR usando OpenCV
  • Executando Tesseract com CLI e Python
  • Limitações do motor Tesseract

Conteúdo

Introdução

OCR = Reconhecimento Óptico de Caracteres. Em outras palavras, os sistemas OCR transformam uma imagem bidimensional de texto, que pode conter texto impresso ou manuscrito a partir de sua representação de imagem em texto legível por máquina. O OCR como um processo geralmente consiste em vários subprocessos para executar com a maior precisão possível. Os subprocessos são:

  • Pré-processamento da imagem
  • Localização de Texto
  • Segmentação de personagem
  • Reconhecimento de Caracteres
  • Pós-processamento

Os subprocessos na lista acima, é claro, podem ser diferentes, mas essas são aproximadamente as etapas necessárias para abordar o reconhecimento automático de caracteres. No software OCR, seu objetivo principal é identificar e capturar todas as palavras exclusivas usando diferentes idiomas de caracteres de texto escritos.

Por quase duas décadas, os sistemas de reconhecimento óptico de caracteres têm sido amplamente utilizados para fornecer entrada automatizada de texto em sistemas computadorizados. No entanto, durante todo esse tempo, os sistemas convencionais de OCR (como OCR zonal) nunca superaram sua incapacidade de ler mais do que um punhado de fontes tipográficas e formatos de página. Tipos com espaçamento proporcional (que inclui praticamente todas as cópias tipográficas), fontes de impressora a laser e até mesmo muitas fontes de máquina de escrever não proporcionais permaneceram fora do alcance desses sistemas. E, como resultado, o OCR convencional nunca alcançou mais do que um impacto marginal no número total de documentos que precisam ser convertidos em formato digital.

Como fazer OCR com Tesseract, OpenCV e Python
Processo de reconhecimento óptico de caracteres (cortesia)

Os mecanismos de OCR de próxima geração lidam com esses problemas mencionados acima de maneira muito boa, utilizando as pesquisas mais recentes na área de aprendizado profundo. Aproveitando a combinação de modelos profundos e enormes conjuntos de dados disponíveis publicamente, os modelos alcançam precisões de última geração em determinadas tarefas. Hoje em dia também é possível gerar dados sintéticos com fontes diferentes usando redes adversárias generativas e algumas outras abordagens generativas.

O reconhecimento óptico de caracteres permanece um problema desafiador quando o texto ocorre em ambientes irrestritos, como cenas naturais, devido a distorções geométricas, fundos complexos e fontes diversas. A tecnologia ainda possui um imenso potencial devido aos vários casos de uso de OCR baseado em aprendizado profundo, como


Tem um problema de OCR em mente? Quer reduzir os custos de entrada de dados da sua organização? Vá para Nanoredes e construir modelos de OCR para extrair texto de imagens or extrair dados de PDFs com base em IA PDFOCR!


Ferramentas de OCR de código aberto

Há uma grande quantidade de reconhecimento de caracteres ópticos software disponível. Não encontrei nenhuma comparação de qualidade entre eles, mas vou escrever sobre alguns deles que parecem ser os mais amigáveis ​​para o desenvolvedor.

Tesseract - um mecanismo de OCR de código aberto que ganhou popularidade entre os desenvolvedores de OCR. Mesmo que às vezes seja doloroso implementar e modificar, não havia muitas alternativas de OCR grátis e poderosas no mercado por muito tempo. Tesseract começou como um Ph.D. projeto de pesquisa em HP Labs, Bristol. Ele ganhou popularidade e foi desenvolvido pela HP entre 1984 e 1994. Em 2005, a HP lançou o Tesseract como um software de código aberto. Desde 2006 é desenvolvido pelo Google.

Como fazer OCR com Tesseract, OpenCV e Python
comparação de tendências do google para diferentes ferramentas de OCR de código aberto

OCRopus - OCRopus é um sistema de OCR de código aberto que permite fácil avaliação e reutilização dos componentes de OCR por pesquisadores e empresas. Uma coleção de programas de análise de documentos, não um sistema OCR pronto para uso. Para aplicá-lo aos seus documentos, pode ser necessário fazer um pré-processamento de imagens e, possivelmente, treinar novos modelos. Além dos scripts de reconhecimento em si, existem vários scripts para edição e correção de verdadeiras, medindo taxas de erro, determinando matrizes de confusão fáceis de usar e editar.


Ocular - O Ocular funciona melhor em documentos impressos em uma impressora manual, incluindo aqueles escritos em vários idiomas. Ele opera usando a linha de comando. É um sistema OCR histórico de última geração. Seus principais recursos são:

  • Aprendizagem não supervisionada de fontes desconhecidas: requer apenas imagens de documentos e um corpo de texto.
  • Capacidade de lidar com documentos barulhentos: tinta, espaçamento, alinhamento vertical inconsistentes
  • Suporte para documentos multilíngues, incluindo aqueles que têm considerável troca de código em nível de palavra.
  • Aprendizagem não supervisionada de padrões de variação ortográfica, incluindo grafias arcaicas e taquigrafia de impressora.
  • Transcrição simultânea e conjunta nas formas diplomática (literal) e normalizada.


SwiftOCR - Também mencionarei o mecanismo de OCR escrito em Swift, uma vez que há um grande desenvolvimento sendo feito para avançar no uso do Swift como a linguagem de programação de desenvolvimento usada para aprendizado profundo. Verificação de saída blog para descobrir mais por quê. SwiftOCR é uma biblioteca de OCR rápida e simples que usa redes neurais para reconhecimento de imagem. SwiftOCR afirma que seu motor supera a biblioteca Tessaract bem conhecida.

Nesta postagem do blog, vamos colocar foco no Tesseract OCR e saiba mais sobre como funciona e como é usado.


OCR Tesseract

Tesseract é um mecanismo de reconhecimento de texto (OCR) de código aberto, disponível sob a licença Apache 2.0. Pode ser usado diretamente ou (para programadores) usando uma API para extrair texto impresso de imagens. Ele suporta uma ampla variedade de idiomas. O Tesseract não possui uma GUI integrada, mas existem várias disponíveis no Página da 3ª parte. Tesseract é compatível com muitas linguagens de programação e frameworks através de wrappers que podem ser encontrados SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Ele pode ser usado com a análise de layout existente para reconhecer texto em um documento grande ou pode ser usado em conjunto com um detector de texto externo para reconhecer texto de uma imagem de uma única linha de texto.

Como fazer OCR com Tesseract, OpenCV e Python
Fluxo de processo de OCR para construir API com Tesseract de um no blog

O Tesseract 4.00 inclui um novo subsistema de rede neural configurado como um reconhecedor de linha de texto. Tem suas origens em LSTM baseado em Python da OCRopus implementação, mas foi reprojetado para Tesseract em C ++. O sistema de rede neural no Tesseract é anterior ao TensorFlow, mas é compatível com ele, pois há uma linguagem de descrição de rede chamada Variable Graph Specification Language (VGSL), que também está disponível para TensorFlow.

Para reconhecer uma imagem contendo um único caractere, normalmente usamos uma Rede Neural Convolucional (CNN). Texto de comprimento arbitrário é uma sequência de caracteres e tais problemas são resolvidos usando RNNs e LSTM é uma forma popular de RNN. Leia esta postagem para saber mais sobre LSTM.


Tecnologia - Como funciona

LSTMs são ótimos para aprender sequências, mas ficam muito lentos quando o número de estados é muito grande. Existem resultados empíricos que sugerem que é melhor pedir a um LSTM para aprender uma sequência longa do que uma sequência curta de muitas classes. O Tesseract foi desenvolvido a partir do modelo OCRopus em Python que era um fork de um LSMT em C ++, chamado CLSTM. CLSTM é uma implementação do modelo de rede neural recorrente LSTM em C ++, usando a biblioteca Eigen para cálculos numéricos.

Como fazer OCR com Tesseract, OpenCV e Python
Processo de OCR Tesseract 3 de papel

O Tesseract 3.x legado dependia do processo de vários estágios, onde podemos diferenciar as etapas:

  • Encontrar palavras
  • Localização de linha
  • Classificação de personagem

A localização de palavras foi feita organizando as linhas de texto em bolhas, e as linhas e regiões são analisadas quanto a densidade fixa ou texto proporcional. As linhas de texto são divididas em palavras de forma diferente, de acordo com o tipo de espaçamento entre caracteres. O reconhecimento então prossegue como um processo de duas etapas. Na primeira passagem, é feita uma tentativa de reconhecer cada palavra por vez. Cada palavra satisfatória é passada para um classificador adaptativo como dados de treinamento. O classificador adaptável então tem a chance de reconhecer com mais precisão o texto na parte inferior da página.

A modernização da ferramenta Tesseract foi um esforço para limpar o código e adicionar um novo modelo LSTM. A imagem de entrada é processada em caixas (retângulo) linha por linha, alimentando o modelo LSTM e dando saída. Na imagem abaixo podemos visualizar como funciona.

Como fazer OCR com Tesseract, OpenCV e Python
Como o Tesseract usa o modelo LSTM apresentação de negócios

Depois de adicionar uma nova ferramenta de treinamento e treinar o modelo com muitos dados e fontes, o Tesseract obtém um melhor desempenho. Ainda assim, não é bom o suficiente para trabalhar com texto manuscrito e fontes estranhas. É possível ajustar ou treinar novamente as camadas superiores para experimentação.


Instalando Tesseract

Instalar tesseract no Windows é fácil com os binários pré-compilados encontrados SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Não se esqueça de editar a variável de ambiente “path” e adicionar o caminho tesseract. Para instalação em Linux ou Mac, é instalado com poucos comandos.

Após a instalação, verifique se tudo está funcionando digitando command no terminal ou cmd:

$ tesseract --version

E você verá uma saída semelhante a:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

Você pode instalar o wrapper python para tesseract depois disso usando pip.
$ pip install pytesseract

A biblioteca Tesseract é fornecida com uma ferramenta útil de linha de comando chamada tesseract. Podemos usar esta ferramenta para realizar OCR em imagens e a saída é armazenada em um arquivo de texto. Se quisermos integrar o Tesseract em nosso código C ++ ou Python, usaremos a API do Tesseract.


Executando Tesseract com CLI

Chame o mecanismo Tesseract na imagem com caminho_imagem e converter imagem em texto, escrito linha por linha no prompt de comando, digitando o seguinte:

$ tesseract image_path stdout

Para escrever o texto de saída em um arquivo:

$ tesseract image_path text_result.txt

Para especificar o nome do modelo de idioma, escreva o atalho do idioma após -l sinalizador, por padrão, leva o idioma inglês:

$ tesseract image_path text_result.txt -l eng

Por padrão, o Tesseract espera uma página de texto ao segmentar uma imagem. Se você deseja apenas fazer OCR em uma região pequena, tente um modo de segmentação diferente, usando o –Psm argumento. Existem 14 modos disponíveis que podem ser encontrados SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Por padrão, o Tesseract automatiza totalmente a segmentação da página, mas não executa orientação e detecção de script. Para especificar o parâmetro, digite o seguinte:

$ tesseract image_path text_result.txt -l eng --psm 6

Há também mais um argumento importante, o modo de mecanismo de OCR (oem). O Tesseract 4 tem dois motores OCR - o motor Tesseract Legacy e o motor LSTM. Existem quatro modos de operação escolhidos usando a opção –oem.
0 Apenas mecanismo legado.
1 Apenas motor LSTM de redes neurais.
2 motores Legacy + LSTM.
3 Padrão, com base no que está disponível.

Como fazer OCR com Tesseract, OpenCV e Python
Resultado do mecanismo de OCR Tesseract

OCR com Pytesseract e OpenCV

Pytesseract é um invólucro para Tesseract-OCR Engine. Ele também é útil como um script de invocação independente para tesseract, pois pode ler todos os tipos de imagem suportados pelas bibliotecas de imagens Pillow e Leptonica, incluindo jpeg, png, gif, bmp, tiff e outros. Leia mais informações sobre a abordagem Python SUA PARTICIPAÇÃO FAZ A DIFERENÇA. O código para este tutorial pode ser encontrado neste repositório.

import cv2 import pytesseract img = cv2.imread('image.jpg') # Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Pré-processamento para Tesseract

Para evitar todas as formas como a precisão da saída do tesseract pode cair, você precisa ter certeza de que a imagem está apropriadamente pré-processado.

Isso inclui redimensionamento, binarização, remoção de ruído, enquadramento, etc.

Para pré-processar a imagem para OCR, use qualquer uma das seguintes funções python ou siga o Documentação OpenCV.

import cv2
import numpy as np img = cv2.imread('image.jpg') # get grayscale image
def get_grayscale(image): return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # noise removal
def remove_noise(image): return cv2.medianBlur(image,5) #thresholding
def thresholding(image): return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] #dilation
def dilate(image): kernel = np.ones((5,5),np.uint8) return cv2.dilate(image, kernel, iterations = 1) #erosion
def erode(image): kernel = np.ones((5,5),np.uint8) return cv2.erode(image, kernel, iterations = 1) #opening - erosion followed by dilation
def opening(image): kernel = np.ones((5,5),np.uint8) return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) #canny edge detection
def canny(image): return cv2.Canny(image, 100, 200) #skew correction
def deskew(image): coords = np.column_stack(np.where(image > 0)) angle = cv2.minAreaRect(coords)[-1] if angle < -45: angle = -(90 + angle) else: angle = -angle (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) return rotated #template matching
def match_template(image, template): return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

Vamos trabalhar com um exemplo para ver melhor as coisas. Esta é a aparência da nossa imagem original –

Como fazer OCR com Tesseract, OpenCV e Python
O sistema de escrita Aurebesh

Após o pré-processamento com o seguinte código

image = cv2.imread('aurebesh.jpg') gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

e plotando as imagens resultantes, obtemos os seguintes resultados.

Como fazer OCR com Tesseract, OpenCV e Python
A imagem após o pré-processamento

A saída da imagem original é semelhante a esta -

GALACTIC BASIC
(AUREBESH) RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

Esta é a aparência da saída para diferentes imagens pré-processadas –

Imagem de borda fina (não tão boa) -

CAE Cn Cae AS
(AUREBESE) EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e ecm emclomt Cia cuoomct mi im

Imagem limitada -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

Imagem de abertura -

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH


Obtendo caixas ao redor do texto

Usando o Pytesseract, você pode obter as informações da caixa delimitadora dos resultados de OCR usando o seguinte código.

O script a seguir fornecerá informações de caixa delimitadora para cada caractere detectado pelo tesseract durante o OCR.

import cv2
import pytesseract img = cv2.imread('image.jpg') h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) for b in boxes.splitlines(): b = b.split(' ') img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Se você quiser caixas ao redor de palavras em vez de caracteres, a função image_to_data será útil. Você pode usar o image_to_data função com tipo de saída especificado com pytesseract Output.

Como fazer OCR com Tesseract, OpenCV e Python

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


Usaremos o exemplo de imagem da fatura acima para testar nossos resultados de tesseract.

import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg') d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

Isso deve dar a você a seguinte saída -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Usando este dicionário, podemos obter cada palavra detectada, suas informações de caixa delimitadora, o texto nelas e as pontuações de confiança de cada uma.

Você pode plotar as caixas usando o código abaixo -

n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: (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, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Veja como seria a imagem de um exemplo de fatura.

Como fazer OCR com Tesseract, OpenCV e Python


Correspondência de modelo de texto

Veja o exemplo de tentar encontrar onde uma data está em uma imagem. Aqui, nosso modelo será um padrão de expressão regular que compararemos com nossos resultados de OCR para encontrar as caixas delimitadoras apropriadas. Vamos usar o regex módulo e o image_to_data função para isso.

import re
import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys()) date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$' n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: if re.match(date_pattern, d['text'][i]): (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, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Como esperado, obtemos uma caixa em torno da data da fatura na imagem.

Como fazer OCR com Tesseract, OpenCV e Python

Modos de segmentação de página

Existem várias maneiras de analisar uma página de texto. A API tesseract fornece vários modos de segmentação de página se você deseja executar OCR em apenas uma pequena região ou em orientações diferentes, etc.

Aqui está uma lista dos modos de segmentação de página suportados pelo tesseract –

0 Orientação e detecção de script (OSD) apenas.
1 Segmentação de página automática com OSD.
2 Segmentação automática de página, mas sem OSD ou OCR.
3 Segmentação de página totalmente automática, mas sem OSD. (Padrão)
4 Considere uma única coluna de texto de tamanhos variáveis.
5 Considere um único bloco uniforme de texto alinhado verticalmente.
6 Considere um único bloco de texto uniforme.
7 Trate a imagem como uma única linha de texto.
8 Trate a imagem como uma única palavra.
9 Trate a imagem como uma única palavra em um círculo.
10 Trate a imagem como um único caractere.
11 Texto esparso. Encontre o máximo de texto possível em nenhuma ordem específica.
12 Texto esparso com OSD.
13 Linha bruta. Trate a imagem como uma única linha de texto, ignorando os hacks específicos do Tesseract.

Para alterar o modo de segmentação da página, altere o --psm argumento em sua string de configuração customizada para qualquer um dos códigos de modo mencionados acima.


Detectar orientação e script

Você pode detectar a orientação do texto em sua imagem e também o script em que está escrito. A seguinte imagem -
Como fazer OCR com Tesseract, OpenCV e Python
depois de executar o seguinte código -

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

irá imprimir a seguinte saída.

angle: 90
script: Latin

Detectar apenas dígitos

Veja esta imagem por exemplo -
Como fazer OCR com Tesseract, OpenCV e Python
O texto extraído desta imagem tem esta aparência.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

Você pode reconhecer apenas dígitos, alterando a configuração para o seguinte

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

A saída ficará assim.

-- . 43876324
172018
0 76496234

Caracteres na lista de permissões

Digamos que você queira apenas detectar certos caracteres da imagem fornecida e ignorar o resto. Você pode especificar sua lista de permissões de caracteres (aqui, usamos todos os caracteres minúsculos de a a z apenas) usando a seguinte configuração.

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

Resultado -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Personagens na lista negra

Se você tiver certeza de que alguns caracteres ou expressões definitivamente não aparecerão em seu texto (o OCR retornará um texto errado no lugar dos caracteres da lista negra), você pode colocar esses caracteres na lista negra usando a seguinte configuração.

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Resultado -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

Detectar em vários idiomas

Você pode verificar os idiomas disponíveis digitando no terminal

$ tesseract --list-langs

Para baixar o tesseract para um idioma específico, use

$ sudo apt-get install tesseract-ocr-LANG

onde LANG é o código de três letras do idioma de que você precisa. Você pode descobrir os valores LANG SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Você pode baixar o .traindata arquivo para o idioma que você precisa SUA PARTICIPAÇÃO FAZ A DIFERENÇA e coloque-o em $TESSDATA_PREFIX diretório (deve ser o mesmo onde o tessdata está instalado) e deve estar pronto para uso.

Note - Apenas idiomas que têm um .traineddata formato de arquivo são suportados por tesseract.

Para especificar o idioma no qual você precisa de sua saída de OCR, use o -l LANG argumento na configuração onde LANG é o código de 3 letras para o idioma que você deseja usar.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Veja esta imagem por exemplo -
Como fazer OCR com Tesseract, OpenCV e Python
Você pode trabalhar com vários idiomas alterando o parâmetro LANG como tal -

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

e você obterá a seguinte saída -

Here’s some Greek: Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ. 6 Thai Here’s some Thai: ν᾿ ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

Note - O idioma especificado primeiro para o -l parâmetro é o idioma principal.

Infelizmente, o tesseract não tem um recurso para detectar o idioma do texto em uma imagem automaticamente. Uma solução alternativa é fornecida por outro módulo python chamado langdetect que pode ser instalado via pip.

$ pip install langdetect

Este módulo, novamente, não detecta o idioma do texto usando uma imagem, mas precisa de uma entrada de string para detectar o idioma. A melhor maneira de fazer isso é primeiro usando o tesseract para obter texto OCR em qualquer idioma que você sinta que está lá, usando langdetect para descobrir quais idiomas estão incluídos no texto do OCR e, em seguida, execute o OCR novamente com os idiomas encontrados.

Digamos que temos um texto que pensamos estar em inglês e português.

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config) from langdetect import detect_langs
detect_langs(txt)

Isso deve gerar uma lista de idiomas no texto e suas probabilidades.

[en:0.714282468983554, es:0.2857145605644145]

Os códigos de idioma usados ​​por langdetect siga os códigos ISO 639-1. Para comparar, por favor, verifique isto e isto. Descobrimos que os idiomas usados ​​no texto são o inglês e o espanhol.

Obtemos o texto novamente alterando a configuração para

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

Note – O Tesseract tem um desempenho ruim quando, em uma imagem com vários idiomas, os idiomas especificados na configuração estão errados ou nem são mencionados. Isso também pode enganar um pouco o módulo langdetect.


Usando tessdata_fast

Se a velocidade é uma preocupação importante para você, você pode substituir seus modelos de linguagem tessdata por modelos tessdata_fast que são versões inteiras de 8 bits dos modelos tessdata.

De acordo com o tessdata_fast github -

Este repositório contém versões inteiras rápidas de modelos treinados para o Mecanismo de OCR de código aberto Tesseract.

Esses modelos funcionam apenas com o mecanismo de OCR LSTM do Tesseract 4.

  • Trata-se de um compromisso de velocidade/precisão quanto ao que oferece a melhor "valor pelo dinheiro" em velocidade versus precisão.
  • Para alguns idiomas, isso ainda é melhor, mas para a maioria não.
  • A configuração de rede com “melhor custo-benefício” foi então inteirada para maior velocidade.
  • A maioria dos usuários vai querer usar esses arquivos de dados treinados para fazer OCR e eles serão enviados como parte de distribuições Linux, por exemplo. Ubuntu 18.04.
  • Ajuste fino / treinamento incremental NÃO ser possível a partir destes fast modelos, pois são inteiros de 8 bits.
  • Ao usar os modelos neste repositório, apenas o novo mecanismo de OCR baseado em LSTM é compatível. O legado tesseract O mecanismo não é compatível com esses arquivos, portanto, os modos OEM '0' e '2' do Tesseract não funcionarão com eles.

Para utilizar o tessdata_fast modelos em vez de tessdata, tudo que você precisa fazer é baixar o seu tessdata_fast arquivo de dados de linguagem de SUA PARTICIPAÇÃO FAZ A DIFERENÇA e coloque-o dentro do seu $TESSDATA_PREFIX diretório.


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


Treinamento Tesseract sobre dados personalizados

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. 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 400000 linhas de texto abrangendo cerca de 4500 fontes.

Para executar com sucesso o tutorial de treinamento Tesseract 4.0 LSTM, você precisa ter uma instalação funcional do Tesseract 4 e Tesseract 4 Training Tools e também ter os scripts de treinamento e arquivos de dados treinados necessários em determinados diretórios. Visita repositório do github para arquivos e ferramentas.

O Tesseract 4.00 leva alguns dias a algumas semanas para treinar do zero. Mesmo com todos esses novos dados de treinamento, aqui estão algumas opções de treinamento:

  • Sintonia fina - Começando com um idioma treinado existente, treine em seus dados adicionais específicos. Por exemplo, treinamento em um conjunto de dados escrito à mão e algumas fontes adicionais.
  • Corte a camada superior – da rede e treinar novamente uma nova camada superior usando os novos dados. Se o ajuste fino não funcionar, esta é provavelmente a próxima melhor opção. A analogia por que isso é útil é tomar como exemplo modelos treinados no conjunto de dados ImageNet. O objetivo é construir um classificador de gato ou cachorro, as camadas inferiores do modelo são boas para abstração de baixo nível, como cantos, linhas horizontais e verticais, mas as camadas superiores do modelo combinam esses recursos e detectam orelhas, olhos, nariz de gato ou cachorro. e assim por diante. Ao treinar novamente apenas as camadas superiores, você está usando o conhecimento das camadas inferiores e combinando-o com seu novo conjunto de dados diferente.
  • Retreinar do zero - Esta é uma abordagem muito lenta, a menos que você tenha um conjunto de treinamento muito representativo e suficientemente grande para o seu problema. O melhor recurso para treinar do zero é seguir este repositório do github.

Um guia sobre como treinar seus dados personalizados e criar .traineddata arquivos podem ser encontrados SUA PARTICIPAÇÃO FAZ A DIFERENÇA, SUA PARTICIPAÇÃO FAZ A DIFERENÇA e SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Não cobriremos o código de treinamento usando o Tesseract nesta postagem do blog.

Como fazer OCR com Tesseract, OpenCV e Python

Limitações do Tesseract

O Tesseract funciona melhor quando há uma segmentação limpa do texto do primeiro plano do fundo. Na prática, pode ser extremamente desafiador garantir esses tipos de configuração. Existem vários motivos pelos quais você pode não obter uma saída de boa qualidade do Tesseract, como se a imagem tivesse ruído no fundo. Quanto melhor for a qualidade da imagem (tamanho, contraste, iluminação), melhor será o resultado do reconhecimento. É necessário um pouco de pré-processamento para melhorar os resultados do OCR, as imagens precisam ser dimensionadas de maneira adequada, ter o máximo de contraste possível e o texto deve ser alinhado horizontalmente. O Tesseract OCR é bastante poderoso, mas tem as seguintes limitações.

Limitações do Tesseract somadas na lista.

  • O OCR não é tão preciso quanto algumas soluções comerciais disponíveis para nós.
  • Não funciona bem com imagens afetadas por artefatos, incluindo oclusão parcial, perspectiva distorcida e fundo complexo.
  • Não é capaz de reconhecer caligrafia.
  • Ele pode encontrar algo sem sentido e relatar isso como saída de OCR.
  • Se um documento contiver idiomas diferentes daqueles fornecidos nos argumentos -l LANG, os resultados podem ser ruins.
  • Nem sempre é bom analisar a ordem natural de leitura dos documentos. Por exemplo, ele pode não reconhecer que um documento contém duas colunas e pode tentar juntar o texto entre as colunas.
  • Digitalizações de baixa qualidade podem produzir OCR de baixa qualidade.
  • Ele não expõe informações sobre a qual família de fontes pertence o texto.


É claro que existe uma maneira melhor, muito mais simples e intuitiva de realizar tarefas de OCR.


OCR com nanonets

Como fazer OCR com Tesseract, OpenCV e Python

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 API Nanonets-OCR 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

Como fazer OCR com Tesseract, OpenCV e Python

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


Nanonetas e humanos no loop

‌‌A tela 'Moderado' auxilia nos processos de correção e entrada e reduz a carga de trabalho do revisor manual em quase 90% e reduz os custos em 50% para a organização.

Como fazer OCR com Tesseract, OpenCV e Python

As características incluem

  1. Rastreie as previsões corretas
  2. Rastreie quais estão errados
  3. Faça correções para as imprecisas
  4. Exclua os que estão errados
  5. Preencha as previsões ausentes
  6. Filtrar imagens com intervalos de datas
  7. Obtenha contagens de imagens moderadas em comparação com as não moderadas

Todos os campos estão estruturados em uma GUI de fácil manuseio que permite ao usuário aproveitar as vantagens da tecnologia OCR e auxiliá-la no aprimoramento à medida que avança, sem ter que digitar nenhum código ou entender como a tecnologia funciona.


Tem um problema de OCR em mente? Quer reduzir os custos de entrada de dados da sua organização? Vá para Nanoredes e construir modelos de OCR para extrair texto de imagens or extrair dados de PDFs!


Conclusão

Assim como o aprendizado profundo impactou quase todas as facetas da visão computacional, o mesmo vale para o reconhecimento de caracteres e o reconhecimento de caligrafia. Modelos baseados em deep learning conseguiram obter uma precisão de reconhecimento de texto sem precedentes, muito além do tradicional extração de informação e processamento de imagem de aprendizado de máquina abordagens.

O Tesseract tem um bom desempenho quando as imagens do documento seguem as seguintes diretrizes:

  • Limpe a segmentação do texto do primeiro plano do fundo
  • Alinhado horizontalmente e dimensionado de forma adequada
  • Imagem de alta qualidade sem borrões e ruídos

A versão mais recente do Tesseract 4.0 oferece suporte a OCR baseado em aprendizado profundo que é significativamente mais preciso. O mecanismo de OCR em si é construído em uma rede Long Short-Term Memory (LSTM), um tipo de Rede Neural Recorrente (RNN).

Tesseract é perfeito para digitalizar documentos limpos e vem com alta precisão e variabilidade de fontes, já que seu treinamento foi abrangente. Eu diria que o Tesseract é uma ferramenta indispensável se sua tarefa for digitalizar livros, documentos e texto impresso em um fundo branco limpo.


Leitura

Update:
Muitas pessoas nos perguntaram como eles podem obter a data na forma de texto ou usar quando detecta a data ou qualquer outro dado específico para que possam anexar à lista.
Aqui está a resposta:
No código para desenhar uma caixa delimitadora ao redor da caixa de data, você notará uma linha que corresponde ao padrão regex com d['text']. Ele só desenha uma caixa se o padrão corresponder. Você poderia simplesmente extrair os valores de d['text'] quando o padrão corresponder e anexá-los a uma lista.

Atualização 2:
Para responder a perguntas sobre OCR em outros idiomas, atualizamos outras listas de leitura.

Carimbo de hora:

Mais de IA e aprendizado de máquina