如何处理和提取图像中的文本

Posted

技术标签:

【中文标题】如何处理和提取图像中的文本【英文标题】:How to process and extract text from image 【发布时间】:2020-01-01 21:13:22 【问题描述】:

我正在尝试使用 python cv2 从图像中提取文本。结果很可悲,我想不出改进代码的方法。 我认为在提取文本之前需要对图像进行处理,但不确定如何处理。

我尝试将其转换为黑白,但没有成功。

import cv2
import os
import pytesseract
from PIL import Image
import time

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

cam = cv2.VideoCapture(1,cv2.CAP_DSHOW)

cam.set(cv2.CAP_PROP_FRAME_WIDTH, 8000)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 6000)

while True:
    return_value,image = cam.read()
    image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    image = image[127:219, 508:722]
    #(thresh, image) = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    cv2.imwrite('test.jpg',image)
    print('Text detected: '.format(pytesseract.image_to_string(Image.open('test.jpg'))))
    time.sleep(2)

cam.release()
#os.system('del test.jpg')

【问题讨论】:

您也可以尝试使用 EasyOCR。就我而言,与只是随机文本的 Tesseract 相比,结果要好得多。目前,无法训练使用 EasyOCR 的自定义模型。 【参考方案1】:

在执行文本提取之前进行预处理以清理图像会有所帮助。这是一个简单的方法

将图像转换为灰度和锐化图像 自适应阈值 执行形态学操作以清洁图像 反转图像

首先我们转换为灰度然后使用sharpening kernel 锐化图像

接下来我们自适应阈值得到二值图像

现在我们执行morphological transformations 来平滑图像

最后我们反转图像

import cv2
import numpy as np

image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharpen = cv2.filter2D(gray, -1, sharpen_kernel)
thresh = cv2.threshold(sharpen, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=1)
result = 255 - close

cv2.imshow('sharpen', sharpen)
cv2.imshow('thresh', thresh)
cv2.imshow('close', close)
cv2.imshow('result', result)
cv2.waitKey()

【讨论】:

这实际上帮助我学习了一些关于处理图像的好技巧,但 pytesseract 仍然无法从图像中提取任何东西。 您可能必须“剪切”图像并将每一行输入 pytesseract 以获得良好的结果。将图像水平切成两半以分隔每个单词可能会有所帮助。祝你好运! 感谢您的建议。我会尝试并更新帖子。

以上是关于如何处理和提取图像中的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何处理和发送远程通知 Objective-C

time_wait状态如何处理和建议

文件保存期间如何处理和提示文件名(Word 2016,VBA)

如何处理和解析JPA持久性异常以向用户提供有意义的消息

检测具有轮廓的文本区域后从图像中提取文本

合并 MSER 中的区域以识别 OCR 中的文本行