Site icon AranaCorp

Reconhecimento de texto com Python

Neste tutorial, vamos ver como reconhecer texto de uma imagem usando Python e Tesseract. O Tesseract é uma ferramenta para reconhecer caracteres, e portanto texto, contidos numa imagem (OCR, Optical Character Recognition).

Instalar o Tesseract

Para instalar o tesseract, introduza os seguintes comandos num terminal

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev

pode descarregar e executar o instalador para o seu sistema operativo

Quando a instalação estiver concluída, adicione C:\Program Files\Tesseract-OCR à sua variável de ambiente Path.

Pode agora executar o tesseract e testar o resultado com o seguinte comando

tesseract <path_to_image> <path_to_result_file> -l <language>

ex:

tesseract test.png result -l fra

O Tesseract reconhecerá o texto contido na imagem test.png e escreverá o texto em bruto no ficheiro result.txt.

N.B.: O Tesseract pode ter dificuldades com a pontuação e o alinhamento do texto.

Reconhecimento de texto com o Pytesseract

Pode então instalar o pacote pytesseract

pip install pytesseract

A vantagem de utilizar Python, e OpenCV em particular, é que pode processar imagens e implementar a ferramenta em pacotes de software maiores. Segue-se uma lista de algumas das vantagens:

No script seguinte, carregamos a imagem com o OpenCV e desenhamos rectângulos à volta do texto detectado. Os dados de posição são obtidos utilizando a função image_to_data. O texto em bruto pode ser obtido utilizando a função image_to_string

from PIL import Image
import pytesseract
from pytesseract import Output
import cv2
 
source = 'test.png'
img = cv2.imread(source)
text=pytesseract.image_to_string(img)
print(text)

d = pytesseract.image_to_data(img, output_type=Output.DICT)
 
NbBox = len(d['level'])
print ("Number of boxes: {}".format(NbBox))

for i in range(NbBox):
	(x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
	# display rectangle
	cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
 
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

O guião também funciona com fotografias de documentos

Bonus: Reconhecimento de texto com Python à partir d’un fichier PDF

Instalando a biblioteca pdf2image

pip install pdf2image

O pdf2image requer que o poppler esteja instalado

Bastante simples no Linux

sudo apt-get install poppler-utils

Para Windows

Script para recuperar texto de um PDF

from pdf2image import convert_from_path, convert_from_bytes
from PIL import Image
import pytesseract
from pytesseract import Output

images = convert_from_path('invoice.pdf')

# get text
print("Number of pages: {}".format(len(images)))
for i,img in enumerate(images):
    print ("Page N°{}\n".format(i+1))
    print(pytesseract.image_to_string(img))

Script para apresentar rectângulos num PDF

from pdf2image import convert_from_path, convert_from_bytes
from PIL import Image
import pytesseract
from pytesseract import Output
import cv2
import numpy

images = convert_from_path('invoice.pdf')
for i,source in enumerate(images):
	print ("Page N°{}\n".format(i+1))
	
	#convert PIL to opencv
	pil_image = source.convert('RGB') 
	open_cv_image = numpy.array(pil_image) 
	# Convert RGB to BGR 
	img = open_cv_image[:, :, ::-1].copy() 
	#img = cv2.imread(source)

	d = pytesseract.image_to_data(img, output_type=Output.DICT)
	 
	NbBox = len(d['level'])
	print ("Number of boxes: {}".format(NbBox))

	for j in range(NbBox):
		(x, y, w, h) = (d['left'][j], d['top'][j], d['width'][j], d['height'][j])
		# display rectangle
		cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
	 
	cv2.imshow('img', img)
	cv2.waitKey(0)
	cv2.destroyAllWindows()

Aplicações

Fontes

Exit mobile version