python - 使用 pytesseract OCR 识别图像中的文本

标签 python image image-processing computer-vision ocr

我需要使用 Pytesseract 从这张图片中提取文字:

enter image description here

和代码:

from PIL import Image, ImageEnhance, ImageFilter
import pytesseract
path = 'pic.gif'
img = Image.open(path)
img = img.convert('RGBA')
pix = img.load()
for y in range(img.size[1]):
    for x in range(img.size[0]):
        if pix[x, y][0] < 102 or pix[x, y][1] < 102 or pix[x, y][2] < 102:
            pix[x, y] = (0, 0, 0, 255)
        else:
            pix[x, y] = (255, 255, 255, 255)
img.save('temp.jpg')
text = pytesseract.image_to_string(Image.open('temp.jpg'))
# os.remove('temp.jpg')
print(text)

而“temp.jpg”是

enter image description here

还不错,但是打印的结果是,2 WW 不是正确的文本2HHH,那我怎样才能去除那些黑点呢?

最佳答案

这是一个使用 OpenCV 和 Pytesseract OCR 的简单方法。要对图像执行 OCR,对图像进行预处理很重要。这个想法是获得一个处理过的图像,其中要提取的文本是黑色的,背景是白色的。为此,我们可以转换为 grayscale , 应用轻微 Gaussian blur ,然后 Otsu's threshold获得二值图像。从这里,我们可以申请morphological operations消除噪音。最后我们反转图像。我们使用 --psm 6 配置选项执行文本提取,以假设单个统一的文本 block 。看看here更多选择。


这是图像处理管道的可视化:

输入图像

enter image description here

转灰度->高斯模糊->大津的阈值

enter image description here

请注意有微小的噪音规范,为了消除它们,我们可以执行形态学操作

enter image description here

最后我们反转图像

enter image description here

Pytesseract OCR 的结果

2HHH

代码

import cv2
import pytesseract

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

# Grayscale, Gaussian blur, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Morph open to remove noise and invert image
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
invert = 255 - opening

# Perform text extraction
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6')
print(data)

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

关于python - 使用 pytesseract OCR 识别图像中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745519/

相关文章:

algorithm - 我怎样才能证明这个边遍历算法有效呢?

java - 自然特征追踪 - 增强现实

python 2.7脚本无限期地并行运行两个while循环

python - 将数据框的所有数字列转换为绝对值

image - 使用 opencv 确定一个点是在形状内部还是外部

matlab - 检查每个像素的特定颜色(在特定阈值内)

python - Pygame 错误未显示缩放图像

python - NumPy 还是字典?

java - 读取/写入图像的问题

node.js - 使用 multer 以表单形式上传不同字段的文件