Pytesseract 无法从图像中提取低对比度文本

时间:2021-04-22 18:29:11

标签: python ocr tesseract python-tesseract

我正在尝试从图像中提取日期,但它不起作用。我有更多日期用不同颜色书写的图像。我尝试了一些预处理技术,如自适应阈值、侵蚀、膨胀等。

def cropright(img):
    (h, w) = img.shape[:2]
    crp = img[h-60:h, int((4*w)/7):w]
    crp = cv2.resize(crp, (0, 0), fx=5, fy=5,interpolation=cv2.INTER_CUBIC)
    return(crp)

def extract_text(img):
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    plt.imshow(img)
    kernel = np.ones((1, 1), np.uint8)   
    img = cv2.dilate(img, kernel, iterations=1)  
    img = cv2.erode(img, kernel, iterations=1)
    plt.imshow(img)
    img = cv2.GaussianBlur(img, (5, 5), 0)
    plt.imshow(img)
    text = pytesseract.image_to_string(img,lang='eng')
    return text

file = 'test.jpg'
img = cv2.imread("Request/" + file)
img = cropright(img)
plt.imshow(img)
text2 = extract_text(img)
print(text2)

这是图像。我有更多带有不同颜色日期的图像,所以我需要开发一个自动适用于所有图像的解决方案 Image

1 个答案:

答案 0 :(得分:0)

我认为通过将图像转换为灰度,您应该能够从图像中提取日期,而不管它是用哪种颜色写入的。我创建了一个 InstaFilters 应用程序,可以将过滤器应用于您的图像。该图像来自该 Web 应用程序。您可以在 https://share.streamlit.io/arkalsekar/instafilters/main/app.py

访问它

应用灰度过滤器的代码可以在 Github 的 filters 文件中找到: https://github.com/arkalsekar/instafilters

Image after applying grayscale filter

您甚至可以尝试这些,并相信这应该有效。如果它不起作用,那么您可以阅读 this 很棒的帖子,其中包含一些更有趣的 OCR 预处理技术。

Preprocessed image

Preprocessed image