【问题标题】:Tesseract OCR, reading a low-resolution/pixelated font (esp. digits)Tesseract OCR,读取低分辨率/像素化字体(尤其是数字)
【发布时间】:2017-07-22 19:43:55
【问题描述】:

我正在尝试使用 Tesseract OCR v3.2 来识别计算机屏幕上的字符,但使用某种低分辨率字体给我带来了很多麻烦,尤其是在涉及数字时。字体看起来像this。我目前正在将输入图像通过 Python 中的双三次滤波器通过 4 倍放大,这导致它们看起来像 this。 Tesseract 将处理后的图像读取为“12345B?89D”。

我尝试了各种其他高档比率(最高 1000%),以及其他图像过滤器,如 lanczos、锐化、平滑、边缘增强和抗锯齿。没有一个产生更准确的结果。有人对如何提高对该字体的识别度有任何想法吗?

【问题讨论】:

  • 好吧,imgur 网站给出了一只死去的长颈鹿,然后在重试放大的图像时出现了 503,所以我真的不能因为没有得到这个而责怪 Tesseract。同时——在没有对图像预处理有用的反馈的情况下,你可以看看为 Tesseract 生成一个训练文件并使用它(那里有几个免费的编辑器)。另外:你确定你通过 Tesseract 灰度图像格式(不是 RGB 或 BGR)?

标签: python fonts ocr tesseract resolution


【解决方案1】:

只是厌倦了使用您输入到 Tesseract 4.0.0a 的小型和放大 (x4) 图像。即使调整了 Tesseract 参数,小的也没有输出。升级版能够在所有三种测试情况下进行 OCR - 无需进一步处理、灰度化和进一步增强。

使用的 Tesseract 已集成到 OpenCV 3.2.0。以下是代码。

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline 

def show(img):
    plt.imshow(img, cmap="gray")
    plt.show()

def ocr(img):
    # Tesseract mode settings:
    #   Page Segmentation mode (PSmode) = 3 (defualt = 3)
    #   OCR Enginer Mode (OEM) = 3 (defualt = 3)
    tesser = cv2.text.OCRTesseract_create('C:/Program Files/Tesseract 4.0.0/tessdata/','eng','0123456789',3,3)
    retval = tesser.run(img, 0) # return string type
    print 'OCR Output: ' + retval

# Directly feed image to Tesseact
img = cv2.imread('./imagesStackoverflow/SmallDigits-x4.png')
ocr(img)

# Load image as gray scale 
img = cv2.imread('./imagesStackoverflow/SmallDigits-x4.png',0);
show(img)
ocr(img)

# Enhance image and get same positive result
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) 
kernel = np.ones((3,3),np.uint8)
img = cv2.erode(thresh,kernel,iterations = 1)
show(img)
ocr(img)

输入图像和 OCR 结果在这里。

【讨论】:

  • 当然,我为什么不考虑更新 - 我一直在运行 Tesseract 3.02。升级到 4.00 很好地修复了数字识别。谢谢!
  • 不客气!如果我的回答解决了您的问题,请在左侧打勾。
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2018-07-04
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多