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