繁体   English   中英

Python tesseract 提高 OCR 的准确性

[英]Python tesseract increase accuracy for OCR

我有很简单的图片,但tesseract 没有成功地给我正确的答案。

代码:

pytesseract.image_to_string(image, lang='eng')

在此处输入图片说明

示例图片给出了结果

SARVN PRIM E N EU ROPTICS\nBLU EPRINT

我也尝试将我自己的单词添加到字典中,如果它能让事情变得更好,但仍然没有。

pytesseract.image_to_string(image, lang='eng', config="--user-words words.txt")

我的单词表看起来像这样

SARYN
PRIME
NEUROPTICS
BLUEPRINT

我应该如何解决这个问题,也许我必须在预测之前转换图像? 文本颜色可以在几种颜色之间变化,但背景始终是 black

在尝试使用 OCR 之前,尝试反转图像,然后执行二值化/阈值处理以获得白色背景上的黑色文本。

有关在 Python 中对图像进行二值化的提示,请参阅此帖子

当然,输入图像中的质量越好,文字越清晰,您的 OCR 效果就会越好。

我使用外部工具将其更改为白底黑字并得到以下图像。

倒置和二值化

我有一个四步解决方案

结果
平滑 在此处输入图片说明
阈值 在此处输入图片说明
上采样
+
侵蚀
在此处输入图片说明
在此处输入图片说明
Pytesseract SARYN PRIME 神经药物
蓝图

代码


import cv2
import pytesseract

img = cv2.imread('j0nNV.png')
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blr = cv2.GaussianBlur(gry, (3, 3), 0)
thr = cv2.threshold(blr, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
(h_thr, w_thr) = thr.shape[:2]
s_idx = 0
e_idx = int(h_thr/2)

for _ in range(0, 2):
    crp = thr[s_idx:e_idx, 0:w_thr]
    (h_crp, w_crp) = crp.shape[:2]
    crp = cv2.resize(crp, (w_crp*2, h_crp*2))
    crp = cv2.erode(crp, None, iterations=1)
    s_idx = e_idx
    e_idx = s_idx + int(h_thr/2)
    txt = pytesseract.image_to_string(crp)
    print(txt)
    cv2.imshow("crp", crp)
    cv2.waitKey(0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM