Тессеракт абзац бокс - PullRequest
       18

Тессеракт абзац бокс

0 голосов
/ 27 августа 2018

У меня есть одна строка, и я хочу поместить всю строку в рамку.

Сначала я создал boxList [], который содержит все координаты прямоугольников вокруг букв, а затем обработал их числом букв (это обеспечивает обратную итерацию). Важными являются координаты сверху слева (x1, y1) и справа внизу (x2, y2). Я последовательно получил x, но координаты y неверны. (То, что я хочу здесь, это верхняя координата y и нижняя координата y, а затем аккуратно заключить весь абзац). Ниже приведены примеры вывода из 1 строки и абзаца:

single line input

paragraph output

и это мой код:

import cv2
import pytesseract

filename = 'english-letter.png' 
img = cv2.imread(filename)
h, w, _ = img.shape

# apply tesseract to BOXES
boxes = pytesseract.image_to_boxes(img)
temp = boxes.split('\n')
boxList = []
for i in temp:
    j = list(map(int, i.split(' ')[1:-1]))
    boxList.append(j)

# apply tesseract to STRING
text = pytesseract.image_to_string(img)
text = text.replace(' ', '')
textList = text.split('\n')
print(textList)

# for i in boxList:
#     print(i)
# print('---------------------------------------')
countt = 0
x1, y1, x2, y2 = boxList[0][0], 0, 0, 0
lastLetterList = []
firstRow = []
lastRow = []
for i in range(len(textList)):  # column
    for j in range(len(textList[i])):  # row (or line)
        if i == 0:  # loop over first row
            if boxList[countt][1] > y1:
                y1 = h - boxList[countt][1]  # top-Left y kordinat
        if j == (len(textList[i]) - 1):
            lastLetterList.append(boxList[countt][2])
        if i == (len(textList) - 1):  # loop over last row
            if boxList[countt][3] > y2:
                y2 = h - boxList[countt][3]
        countt += 1

x2 = max(lastLetterList)
topLeft = [x1, y1]
botRight = [x2, y2]

# boxing every letter
for box in boxes.splitlines():
    box = box.split(' ')
    img = cv2.rectangle(img=img, pt1=(int(box[1]), h - int(box[2])), pt2=(int(box[3]), h - int(box[4])),
                        color=(0, 255, 0), thickness=1)

# boxing whole paragraph
cv2.rectangle(img=img, pt1=(topLeft[0], topLeft[1]), pt2=(botRight[0], botRight[1]), color=(0, 255, 0), thickness=1)
print(topLeft)
print(botRight)

# show the output image
cv2.imshow("Output", img)
cv2.waitKey(0)
...