Tesseract OCR,读取低分辨率/像素化字体(尤其是数字)

时间:2017-03-02 21:28:37

标签: python fonts ocr tesseract resolution

我正在尝试使用Tesseract OCR v3.2来识别计算机屏幕上的字符,这给我带来了一些特定的低分辨率字体的麻烦,特别是在数字时。字体看起来像this。我目前正在使用Python中的双三次过滤器将输入图像放入4x高档,这使得它们看起来像this。 Tesseract将处​​理过的图像读作" 12345B?89D"。

我尝试了各种其他高档比例(高达1000%),以及其他图像滤镜,如lanczos,锐化,平滑,边缘增强和抗锯齿。没有人产生更准确的结果。有人知道如何提高对这种字体的认可吗?

1 个答案:

答案 0 :(得分:2)

只是厌倦了使用你的小尺寸(x4)图像进入Tesseract 4.0.0a。即使调整了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结果在这里。

enter image description here