python - 如何使用 Tesseract 对图像进行 OCR

标签 python image opencv ocr tesseract

我开始学习 OpenCV 和 Tesseract,但在处理看似非常简单的示例时遇到了麻烦。

这是我尝试进行 OCR 的图像,上面写着“171 m”:

original image

我做了一些预处理。由于蓝色是文本的主色,我提取蓝色 channel 并应用简单的阈值处理。

img = cv2.imread('171_m.png')[y, x, 0]
_, thresh = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY_INV)

生成的图像如下所示:

blue channel, simple threshold

然后将其放入 Tesseract,单行使用 psm 7:

text = pytesseract.image_to_string(thresh, config='--psm 7')
print(text)
>>> lim

我也尝试限制可能的字符,它变得更好一些,但不完全是。

text = pytesseract.image_to_string(thresh, config='--psm 7 -c tessedit_char_whitelist=1234567890m')
print(text)
>>> 17m
OpenCV v4.1.1.
Tesseract v5.0.0-alpha.20190708

感谢任何帮助。

最佳答案

在将图像放入 Pytesseract 之前,预处理会有所帮助。所需的文本应为黑色,而背景应为白色。这是一个方法

  • 将图像转换为灰度并放大图像
  • 高斯模糊
  • 大津的阈值
  • 反转图像

转换为灰度后,我们使用 imutils.resize() 和高斯模糊来放大图像。从这里我们得到二值图像的 Otsu 阈值

enter image description here

如果您有嘈杂的图像,一个额外的步骤是使用形态学操作来平滑或消除噪声。但是因为你的图像足够干净,我们可以简单地反转图像来得到我们的结果

enter image description here

使用 --psm 6 从 Pytesseract 输出

171m

import cv2
import pytesseract
import imutils

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

image = cv2.imread('1.png',0)
image = imutils.resize(image, width=400)
blur = cv2.GaussianBlur(image, (7,7), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
result = 255 - thresh 

data = pytesseract.image_to_string(result, lang='eng',config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.waitKey()

关于python - 如何使用 Tesseract 对图像进行 OCR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58103337/

相关文章:

python - 两个 python 列表之间的部分匹配,一个列表完全存在于另一个列表中,在 Python 中几乎没有附加字符

javascript - 无法在 Django 模板 html 脚本中将 python 字典用作 JSON

wpf - 如何处理 WPF 中的巨大 tif?

python - 在 Raspberry Pi 上保存图像流的最快方法

python - 了解 Python 中嵌套函数中的变量作用域

python - tensorflow :过滤器与内核和步幅

java - 查找图像二进制对象的周长

Javascript 停止图片加载

python - 在启用 OpenMP 的情况下编译 OpenCV,但应用程序仍在一个内核上运行

c++ - 如何在 Visual Studio 中使用 OpenCV 2.4 静态库?