如何提高OCR识别能力?

时间:2019-11-28 12:23:24

标签: c# ocr tesseract emgucv

如您在图片中所见,我无法正确识别此类单词

Image to recognize

结果我得到了这个:

RMACWI O
12X60
VPFZZOOIK
IADA50527
PORTES

我正在使用这些变量

ocr.SetVariable("tessedit_pageseg_mode", 10);
ocr.SetVariable("tessedit_char_whitelist", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-,.€"); 

是否有提高识别度的方法?

后来我对图像进行了二值化,但是结果却很糟糕!

enter image description here

结果:

RMACW1 0
TZXW
VPFZZDWK
IADASDEU
PORTES

3 个答案:

答案 0 :(得分:2)

您可以对图像进行预处理,但是通过将OCR引擎更改为Google cloud vision,可以节省大量时间。当我运行您的图片时,它可以完美地检测到文字:

RMAC6010
12X60
VPF3200/K
IADA50527
PORTES
Documentos refer
Enc. Cli EC19/041

Google云的设置有点麻烦,但它们的AI API是世界上最好的。您可以测试图像here。他们具有所有主要语言的客户端库。

Google Cloud Vision Quick-start
OCR w/ gcloud documentation

答案 1 :(得分:0)

对图像进行裁剪,设定阈值和调整大小可能会有所帮助。 Tesseract最适合在白色背景上的黑色文本。请访问this网站以获取更多信息。

答案 2 :(得分:0)

您可以对二进制图像应用轻微的高斯模糊。这将有助于平滑图像。结果如下:

enter image description here

OCR的结果

RMAC6010

12X60

VPF3200/K
\ADA50527

PORTES
Documentos refe:
Ene. Cli EC 19/041

我在Python OpenCV + Pytesseract中实现了它,但是您可以将相同的策略应用于C#

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Load image and Otsu's Threshold to get a binary image
image = cv2.imread('1.jpg', 0)
thresh = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# Gaussian blur and then perform OCR
thresh = cv2.GaussianBlur(thresh, (3,3), 0)
data = pytesseract.image_to_string(thresh, lang='eng', config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.waitKey()