如何从图像中识别单个数字?

How to identify single digits from image?

我正在尝试根据图像的内容对图像进行分类。例如,我有大量图像如下,其中将包含一些内容——在本例中为数值。我已经按照此处的建议尝试了 OpenCV 和 Pytesseract OCR 解决方案:

但是,此解决方案不适用于我的图像,并且未检测到内容。以下是我的样本图片:

图 1:

图 2:

图 3:

图 4:

您还有其他想法来实现这一目标吗?基本上图像 1 应该输出 1,依此类推。

这种简单的方法至少适用于显示的四张图片:

import cv2
import pytesseract

images = ['4sXGS.jpg', 'Nizki.jpg', 'T0EM8.jpg', 'g2fY7.jpg']

for img in images:

    img = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
    img = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)[1]

    text = pytesseract.image_to_string(img, config='--psm 10')
    text = text.replace('\n', '').replace('\f', '')
    print(text)

输出:

1
2
3
4

单个步骤为:

  1. 读取灰度图像。
  2. 使用 Otsu's method.
  3. 对图像进行逆二进制阈值处理
  4. 运行 pytesseract 使用 选项(单个字符)。也许还可以添加所描述的仅用于识别数字的白名单。

警告:我使用来自 Mannheim University Library 的特殊版本的 Tesseract。

----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.19041-SP0
Python:        3.9.1
PyCharm:       2021.1.1
OpenCV:        4.5.2
pytesseract:   5.0.0-alpha.20201127
----------------------------------------