【问题标题】:Tesseract / PYOCR detects 'Z' as '2'Tesseract / PYOCR 将“Z”检测为“2”
【发布时间】:2019-11-15 01:09:27
【问题描述】:

我正在为我的应用程序使用 pyocr (https://github.com/openpaperwork/pyocr),除了以下情况外,它都运行良好:

来自这张图片:

Tesseract 将提取:

42Z8

它检测到其中一个 Z 而不是另一个“Z”,这很重要,因为如果发生此问题,此数字会通过验证失败。

我尝试过的事情:

  1. 将字体 (flama) .traineddata 文件与 tesseract 一起使用,未修复。
  2. 像图像一样隔离块以查看检测是否更好。
  3. 进行一些图像处理,例如:

thresh = cv.threshold(blocktext, 127, 255, cv.THRESH_BINARY)

我该如何解决这个问题?也许解决方案是一些更复杂的图像处理,但我现在有点迷失了。

谢谢。

更新图片:

【问题讨论】:

  • 如果格式一直相同(一个数字,两个字母,一个数字),那么您可以限制 tesseract 正在寻找的字符。仅查找数字并仅查找字符。然后合并结果。

标签: python opencv ocr tesseract


【解决方案1】:

我用pytesseract, tesseract 4.0 and tessdata_best

import pytesseract
import cv2

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'

img = cv2.imread('4zz8.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
adaptiveThresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 15, 12)

config = '-l eng --oem 1 --psm 3'
text = pytesseract.image_to_string(adaptiveThresh, config=config)

print("Result: " + text)

cv2.imshow('original', img)
cv2.imshow('adaptiveThresh', adaptiveThresh)

cv2.waitKey(0)

输出是:

Result: 4 ZZ8

【讨论】:

  • 对不起,我添加的图像不是我想要对文本进行 ocr 处理的图像,我从我想要文本的图像更新了图像。谢谢。
  • 我会尝试,但它会是随机的,直到某些东西起作用,你有没有猜测什么会起作用?
  • 嗨@Link 可以告诉我如何使用tessdata_best 吗?我必须下载它然后粘贴到哪里吗?没有一个关于它的教程..我正在使用 Linux 和 Conda
  • 一个简单的搜索让我知道:从我们的下载页面可以找到适用于 Windows 的旧版本 3.02 的安装程序。这包括英语训练数据。如果您想使用其他语言,请下载适当的训练数据,使用 7-zip 解压缩,然后将 .traineddata 文件复制到“tessdata”目录中,可能是 C:\Program Files\Tesseract-OCR\tessdata。 github.com/tesseract-ocr/tesseract/wiki#windows
  • 我使用 config = '-l eng --oem 1 --psm 3' 解决了 z 和 2 之间的良好识别,现在我的问题是 l 到 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2015-02-19
  • 1970-01-01
相关资源
最近更新 更多