1

我猜这是因为我拥有的图像在图片顶部包含文本。pytesseract.image_to_string() 通常可以正确扫描文本,但它也会返回大量乱码:我猜这是因为文本下方的图片使 Pytesseract 认为它们也是文本或其他东西。

当 Pytesseract 返回一个字符串时,我怎样才能使它不包含任何文本,除非它确定文本是正确的。就像,如果 Pytesseract 有办法也返回某种数字,告诉我如何准确地扫描文本?

我知道我听起来有点笨但有人请帮忙

4

1 回答 1

0

您可以使用 config 参数设置字符白名单以消除乱码,也可以尝试使用不同的 psm 选项以获得更好的结果。

不幸的是,这并不容易,我认为唯一的方法是应用一些图像预处理,这是我最好的:

  1. 首先,我对平滑应用了一些模糊:
 import cv2
 blurred = cv2.blur(img,(5,5))
  1. 然后删除除文本之外的所有内容,将图像转换为灰度并应用阈值处理以仅获得作为文本颜色的白色(我使用逆阈值处理使文本变为黑色,这是 tesseract ocr 的最佳条件):
gray_blurred=cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY)
ret,th1 = cv2.threshold(gray_blurred,239,255,cv2.THRESH_BINARY_INV)

在此处输入图像描述

并应用 ocr 然后删除空格字符:

txt = pytesseract.image_to_string(th1,lang='eng', config='--psm 12')
txt = txt.replace("\n", " ").replace("\x0c", "")
print(txt)
>>>"WINNING'OLYMPIC  GOLD MEDAL  IT'S MADE OUT OF  RECYCLED ELECTRONICS "

相关话题:

Pytesser 设置字符白名单

Pytesseract OCR 多个配置选项

您还可以尝试预处理您的图像,让 pytesseract 工作更准确,如果您想识别有意义的单词,您可以在 ocr 之后应用拼写检查:

https://pypi.org/project/pyspellchecker/

于 2021-08-20T20:48:52.030 回答