我正在使用pytesseract
从图像中提取文本。有时,它无法从文本和边界之间没有空格的图像中发送文本。为解决此问题,我使用了填充,即添加额外的像素(白色)以扩大边界。我正在使用的图像如下所示:
但是问题是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
),在填充时会产生完整的白色图像。
`