Я использую pytesseract
для извлечения текста из изображений.Иногда он не может отправлять текст с изображений, где между текстом и границей не осталось места.Чтобы решить эту проблему, я использовал отступы, т.е. добавил дополнительные пиксели (белые), чтобы увеличить границу.Изображение, которое я использую, показано ниже:
![image](https://i.stack.imgur.com/xfRLa.jpg)
Но проблема заключается в том, что pytesseract
работает только с определенными отступами, т.е. больше или меньшечем это не будет плодотворным.Теперь, чтобы найти оптимальное дополнение для каждого изображения, отнимает много времени.
Мой вопрос таков:
- Почему больше, чем требуется, заполнение делает вещи плохими.Как использовать
pytesseract
или другую альтернативу для эффективного извлечения текста из всех изображений.
Мой код:
`
import os
from PIL import Image
import pytesseract as pt
import numpy as np
import cv2
from matplotlib import pyplot as plt
%matplotlib inline
im= cv2.imread('path_to_image')
h, w = im.shape[0], im.shape[1]
print('string: ',pt.image_to_string(im,lang='eng'))
s=2
im = cv2.copyMakeBorder(im,s,s,s,s,borderType= cv2.BORDER_CONSTANT,value=[255,255,255])
plt.imshow(im,cmap='gray')
plt.show()
boxes = pt.image_to_boxes(im,lang='eng') # config='--psm 8'
print(boxes)
for b in boxes.splitlines():
b = b.split(' ')
x1 = h - int(b[2])
y1 = int(b[1])
x2 = h - int(b[4])
y2 = int(b[3])
start_color = im[x1-1,y1-1]
end_color = im[x2+1,y2+1]
color_to_fill = start_color/2 + end_color/2
im = cv2.rectangle(im, (y1,x1), (y2,x2), color_to_fill, cv2.FILLED)
plt.imshow(im,cmap='gray')
plt.show()
РЕДАКТИРОВАТЬ: У меня естьЕще одна проблема, которая иногда дает какой-то странный результат, как показано ниже.Изображение имеет четкий текст, но pytesseract
не может его обнаружить, и выходная строка пуста.Но он также дает ограничивающую рамку (сокращенно boxes
в коде), которая при заполнении приводит к полному белому изображению.
![enter image description here](https://i.stack.imgur.com/ccNC5.png)
`