Как я могу получить координаты линии, которые прочитал tesseract? - PullRequest
0 голосов
/ 21 апреля 2020

Есть ли способ прочитать изображение построчно с помощью tesseract и получить координаты линий? Обычно я могу прочитать каждое слово, тессеракт возвращает словарь, и я могу получить все позиции, но нет опции для координат линии? Я использую PSM 6 для чтения построчно, но даже я использую его, я получаю слова координаты

d = pytesseract.image_to_data(img, lang="eng", output_type=Output.DICT)

1 Ответ

0 голосов
/ 21 апреля 2020

Вы можете сгруппировать слова, принадлежащие каждой строке, и найти ограничивающий прямоугольник строк из ограничивающего прямоугольника крайнего левого и самого правого слов. Ниже приведена реализация 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
...