对图像执行 OCR 时,Tesseract 返回乱码

Posted

技术标签:

【中文标题】对图像执行 OCR 时,Tesseract 返回乱码【英文标题】:Tesseract returning gibberish when performing OCR on image 【发布时间】:2020-05-13 09:54:46 【问题描述】:

我正在尝试使用 Tesseract 读取图像,但它返回乱码。我知道我需要做一些预处理,但我在网上找到的内容似乎不适用于我的图像。我尝试this回答将图片从黑色背景/白色字母变为白色背景/黑色字母,但没有成功。

这是图片。

还有我的简单代码:

from PIL import Image
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract-OCR\tesseract'

img = Image.open("2020-01-25_17-57-49_UTC.jpg")
print(pytesseract.image_to_string(img))

【问题讨论】:

【参考方案1】:

在 SO 上找到的代码

from PIL import Image
import PIL.ImageOps
import pytesseract

img = Image.open("8pjs0.jpg")
inverted_image = PIL.ImageOps.invert(img)
print(pytesseract.image_to_string(inverted_image))

给我

Dolar Hoy en Cucuta

25-Enero-20
01:00PM

78.048
VENTA

我认为您需要一些用于重音字符的语言包。

【讨论】:

也许github.com/tesseract-ocr/tessdata 中的某些内容可以帮助处理重音字符。【参考方案2】:

一个简单的 Otsu 阈值来获得二值图像,然后反转来获得黑色字母和白色背景似乎工作。我们使用--psm 3 告诉 Pytesseract 执行自动页面分割。查看Pytesseract OCR multiple config options 了解更多配置选项。这是预处理后的图像

Pytesseract OCR 的结果

Dolar Hoy en Cucuta

25-Enero-20
01:00PM

78.048
VENTA

代码

import cv2
import numpy as np
import pytesseract

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

# Load image, grayscale, threshold, invert
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
result = 255 - thresh

# Perfrom OCR with Pytesseract
data = pytesseract.image_to_string(result, config='--psm 3')
print(data)

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

【讨论】:

以上是关于对图像执行 OCR 时,Tesseract 返回乱码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Tesseract 对图像进行 OCR

利用AForge+Tesseract制作视频OCR程序

Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

使用模糊文本改进 Tesseract OCR 结果

如何提高tesseract的OCR结果