我正在尝试使用Tesseract OCR v3.2来识别计算机屏幕上的字符,这给我带来了一些特定的低分辨率字体的麻烦,特别是在数字时。字体看起来像this。我目前正在使用Python中的双三次过滤器将输入图像放入4x高档,这使得它们看起来像this。 Tesseract将处理过的图像读作" 12345B?89D"。
我尝试了各种其他高档比例(高达1000%),以及其他图像滤镜,如lanczos,锐化,平滑,边缘增强和抗锯齿。没有人产生更准确的结果。有人知道如何提高对这种字体的认可吗?
答案 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结果在这里。