Tesseract / PYOCR 检测“Z”为“2”

Dua*_*ade 6 python ocr opencv tesseract

我在我的应用程序中使用 pyocr ( https://github.com/openpaperwork/pyocr ),除了以下情况外,它一切正常:

从这张图片来看:

在此输入图像描述

Tesseract 将提取:

42Z8

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

我尝试过的事情:

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

thresh = cv.threshold(块文本, 127, 255, cv.THRESH_BINARY)

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

谢谢。

更新图片:

在此输入图像描述

Lin*_*ink 6

I used 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)
Run Code Online (Sandbox Code Playgroud)

结果

Output is:

Result: 4 ZZ8
Run Code Online (Sandbox Code Playgroud)

  • 我使用 config = '-l eng --oem 1 --psm 3' 解决了 z 和 2 之间的良好识别,现在我的问题是 l 到 1 (2认同)