Pytesseract在填充的情况下无法正确检测文本

时间:2018-10-28 14:40:10

标签: python image-processing python-tesseract

我正在使用pytesseract从图像中提取文本。有时,它无法从文本和边界之间没有空格的图像中发送文本。为解决此问题,我使用了填充,即添加额外的像素(白色)以扩大边界。我正在使用的图像如下所示:

image

但是问题是pytesseract仅适用于特定的填充,即大于或小于该填充将不会产生效果。现在,为每个图像找到最佳填充很费时间。

我的问题是:

  1. 为什么填充超出要求会使情况变糟 。如何使用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

`

0 个答案:

没有答案