Getting the bounding box of the recognized words using python-tesseract
Use pytesseract.image_to_data()
import pytesseract
from pytesseract import Output
import cv2
img = cv2.imread('image.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])
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('img', img)
cv2.waitKey(0)
Among the data returned by pytesseract.image_to_data()
:
left
is the distance from the upper-left corner of the bounding box, to the left border of the image.top
is the distance from the upper-left corner of the bounding box, to the top border of the image.width
andheight
are the width and height of the bounding box.conf
is the model's confidence for the prediction for the word within that bounding box. Ifconf
is -1, that means that the corresponding bounding box contains a block of text, rather than just a single word.
The bounding boxes returned by pytesseract.image_to_boxes()
enclose letters so I believe pytesseract.image_to_data()
is what you're looking for.
tesseract.GetBoxText()
method returns the exact position of each character in an array.
Besides, there is a command line option tesseract test.jpg result hocr
that will generate a result.html
file with each recognized word's coordinates in it. But I'm not sure whether it can be called through python script.