使用 Tesseract 从小图像中读取日期
Using Tesseract to read dates from a small images
我有一小部分包含日期的图像。尺寸可能是个问题,但我会说质量还可以。我已按照 the guidelines 向引擎提供我能提供的最清晰的图像。调整大小后,应用过滤器、大量试验和错误等。我想出了一个几乎可以正确阅读的图像。我在下面举了一个例子:
现在,这读作 “9 MAR 2021\n\x0c
。不错,但第一个 2
读作 "
。在这一点上,我认为我滥用了 Tesseract 的部分功能。毕竟,我知道它应该期待什么,即 "%d %b %Y"
.
有没有办法告诉 Tesseract 它应该尝试找到给定这个强约束的最佳匹配?向引擎提供此元数据应该会极大地促进任务。我一直在阅读文档,但找不到执行此操作的方法。
我在 Tesseract 4.1 上使用 pytesseract
。使用 Pytyon 3.9.
您需要了解以下内容:
现在,如果我们将图像居中(通过添加边框):
我们在不丢失任何像素的情况下对图像进行上采样。
其次,我们需要将图像中的字符加粗,以使OCR结果准确。
现在 OCR:
29 MAR 2021
代码:
import cv2
import pytesseract
# Load the image
img = cv2.imread("xsGBK.jpg")
# Center the image
img = cv2.copyMakeBorder(img, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=[0, 0, 0])
# Convert to the gray-scale
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Dilate
gry = cv2.dilate(gry, None, iterations=1)
# OCR
print(pytesseract.image_to_string(gry))
# Display
cv2.imshow("", gry)
cv2.waitKey(0)
我有一小部分包含日期的图像。尺寸可能是个问题,但我会说质量还可以。我已按照 the guidelines 向引擎提供我能提供的最清晰的图像。调整大小后,应用过滤器、大量试验和错误等。我想出了一个几乎可以正确阅读的图像。我在下面举了一个例子:
现在,这读作 “9 MAR 2021\n\x0c
。不错,但第一个 2
读作 "
。在这一点上,我认为我滥用了 Tesseract 的部分功能。毕竟,我知道它应该期待什么,即 "%d %b %Y"
.
有没有办法告诉 Tesseract 它应该尝试找到给定这个强约束的最佳匹配?向引擎提供此元数据应该会极大地促进任务。我一直在阅读文档,但找不到执行此操作的方法。
我在 Tesseract 4.1 上使用 pytesseract
。使用 Pytyon 3.9.
您需要了解以下内容:
现在,如果我们将图像居中(通过添加边框):
我们在不丢失任何像素的情况下对图像进行上采样。
其次,我们需要将图像中的字符加粗,以使OCR结果准确。
现在 OCR:
29 MAR 2021
代码:
import cv2
import pytesseract
# Load the image
img = cv2.imread("xsGBK.jpg")
# Center the image
img = cv2.copyMakeBorder(img, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=[0, 0, 0])
# Convert to the gray-scale
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Dilate
gry = cv2.dilate(gry, None, iterations=1)
# OCR
print(pytesseract.image_to_string(gry))
# Display
cv2.imshow("", gry)
cv2.waitKey(0)