python - 二值图像上的 Tesseract OCR

标签 python opencv ocr tesseract python-tesseract

我有一个像这样的二值图像,

enter image description here

我想在Python中使用tesseract ocr提取图像中的数字。我在图像上使用了pytesseract

txt = pytesseract.image_to_string(img)

但我没有得到任何好的结果。

我可以在预处理或增强方面做些什么来帮助 tesseract 做得更好。?

我尝试使用 East Text Detector 本地化图像中的文本,但它无法识别该文本。

如何在 python 中继续此操作?

最佳答案

我认为页面分段模式是一个重要因素。

由于我们正在尝试读取列值,因此可以使用 --psm 4 (source)

import cv2
import pytesseract

img = cv2.imread("k7bqx.jpg")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
txt = pytesseract.image_to_string(gry, config="--psm 4")

我们想要获取以 # 开头的文本

txt = sorted([t[:2] for t in txt if "#" in t])

结果:

['#3', '#7', '#9', '#€']

但是我们错过了4、5,我们可以申请adaptive-thresholding :

enter image description here

结果:

['#3', '#4', '#5', '#7', '#9', '#€']

不幸的是,#2#6无法识别。

代码:


import cv2
import pytesseract

img = cv2.imread("k7bqx.jpg")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 252, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY_INV, blockSize=131, C=100)
bnt = cv2.bitwise_not(thr)
txt = pytesseract.image_to_string(bnt, config="--psm 4")
txt = txt.strip().split("\n")
txt = sorted([t[:2] for t in txt if "#" in t])
print(txt)

关于python - 二值图像上的 Tesseract OCR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237858/

相关文章:

python - 在 Python 中加载 OpenCV EAST 文本检测器时出错

Python正则表达式获得最接近的匹配而没有重复的内容

python - 在字典中计算大写或非大写

iphone - 如何使用 iphone 在照片中找到矩形?

java - 如何在 OpenCV (Java) 中使用 HoughLines 检测线条?

c++ - 如何使用 OpenCV 从表中检测行和列

forms - 通过字段识别和光学字符识别 (OCR) 在预定义表格上进行手写数据输入自动化

java - 没有安装 Tesseract 的 Apache Tika OCR

Python Django 全局变量

python - 登录后Django allauth session JSON可序列化错误