Вы можете сгруппировать слова, принадлежащие каждой строке, и найти ограничивающий прямоугольник строк из ограничивающего прямоугольника крайнего левого и самого правого слов. Ниже приведена реализация python для группировки слов в каждой строке.
text = pytesseract.image_to_data(img, lang="eng", output_type=Output.DICT)
data = {}
for i in range(len(text['line_num'])):
if not (text['text'][i] == '' or text['text'][i].isspace()):
if text['block_num'][i] in data:
if text['line_num'][i] in data[text['block_num'][i]]:
data[text['block_num'][i]][text['line_num'][i]].append((text['text'][i], text['left'][i], text['top'][i], text['width'][i], text['height'][i]))
else:
# lastLineKey = text['line_num'][i]
# line[text['line_num'][i]] = []
data[text['block_num'][i]][text['line_num'][i]] = [(text['text'][i], text['left'][i], text['top'][i], text['width'][i], text['height'][i])]
# line[lastLineKey].append()
else:
data[text['block_num'][i]] = {}
data[text['block_num'][i]][text['line_num'][i]] = [(text['text'][i], text['left'][i], text['top'][i], text['width'][i], text['height'][i])]
linedata = {}
idx = 0
for _, b in data.items():
for _, l in b.items():
linedata[idx] = l
idx += 1
line_idx = 1
for _, line in linedata.items():
xmin, ymin = line[0][1], line[0][2]
xmax, ymax = (line[-1][1] + line[-1][3]), (line[-1][2] + line[-1][4])
print("Line {} : {}, {}, {}, {}".format(line_idx, xmin, ymin, xmax, ymax))
line_idx += 1