【问题标题】:How to make binary image more clearly to improve accuracy tesseract image_to_text?如何使二值图像更清晰以提高 tesseract image_to_text 的准确性?
【发布时间】:2021-06-06 01:59:07
【问题描述】:

我有这样的图像:

然后我转换为二进制图像,然后将其放大,将返回如下结果:

但是字符之间仍然有一些相关的东西,当我调用tesseract.image_to_text() 函数时会导致错误的结果。结果是BO09804,有没有办法分离图像中的每个字符或应用一些过滤器?

这是我的代码:

    src = cv.imread(cv.samples.findFile('path/to/image.jpg'))
    src = image_resize(src, height=128, inter=cv.INTER_CUBIC)
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    rect, binary = cv.threshold(gray , 180, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    kernel = np.ones((5, 5), np.uint8)
    dilated = cv.dilate(binary, kernel, iterations=1)
    cv.imshow('dilated', dilated)
    cv.waitKey(0)
    

【问题讨论】:

  • 这不是很有帮助,但基本问题是您的图像质量;你能得到一个不使用 jpeg 压缩的更高分辨率的扫描吗?
  • 当扫描仪机器只提供 jpg 或 jpeg 时,我别无选择:|

标签: python opencv python-tesseract


【解决方案1】:

我已经完成了一些 opencv 代码来尽可能多地过滤您的图像。当然,如果你能找到更好的分辨率图像会更好。

import cv2 
import numpy as np 
import pytesseract 
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract"

image = cv2.imread("import tesseract.png",0)
image = cv2.GaussianBlur(image,(3,3),-1,-1)
_,thre = cv2.threshold(image,140,255,cv2.THRESH_BINARY,cv2.THRESH_OTSU)
contors , _ = cv2.findContours(thre,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
contors = sorted(contors,key= lambda b:cv2.contourArea(b),reverse=False)
mask = np.zeros_like(thre)
contors = [c for c in contors if cv2.contourArea(c)>100]
cv2.drawContours(mask,contors[:-1],-1,[255],-1)

# creating a mask
kerenal = cv2.getStructuringElement(cv2.MORPH_RECT,(1,20))
morpg = cv2.dilate(mask,kerenal,iterations=1)

_,thre = cv2.threshold(image,190,255,cv2.THRESH_BINARY_INV,cv2.THRESH_OTSU)
# applying mask to thre image
img = cv2.bitwise_and(morpg,thre)
# add eroding to increase the space between characters 
kerenal = cv2.getStructuringElement(cv2.MORPH_RECT,(2,1))
morpg = cv2.erode(img,kerenal,iterations=1)

扩张后的蒙版图片

bitwise_and 之后的图像

过滤后的图片附在下面

正方体结果是

text = pytesseract.image_to_string(morpg).split("\n")[0]

结果是:'B009864'

【讨论】:

  • 你能显示最终的图像吗,它看起来像我的吗?你能从这里下载图片并应用我的代码吗?
  • 你是指我发布的图片吗?
  • 从原始图像,它的大小为3292 x 4665,然后我将图像调整为(1010, 713)(从image.shape 返回)以使HoughLinesP() 正常工作。然后我尝试放大图像以制作 OCR,但我认为由于多次调整大小,它会导致图像分辨率下降......
  • 我想我有一个窍门,就是我在裁剪后将图像放大得更大,大约700% 用于height800% 用于width
  • 您在此处发布的图像大小为 440*128,您应该使用精确大小以获得与 min 相同的结果。在代码中我发布了一些参数,您可以对其进行调整以使其正常工作。
猜你喜欢
  • 2012-03-17
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2021-06-30
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多