使用pytesseract能否从图片的特定部分提取文字?

8
我在一张图片中有一个边界框(矩形坐标),想要提取该坐标内的文本。我该如何使用 pytesseract 来提取该坐标内的文本?
我尝试使用 OpenCV 将图像部分复制到其他 numpy 数组中,例如:
cropped_image = image[y1:y2][x1:x2]

我尝试了pytesseract.image_to_string(),但准确性非常低。但当我尝试使用原始图像到pytesseract.image_to_string()时,它完美地提取了每一个东西。
是否有任何函数可以使用pytesseract提取图像的特定部分? 这个图像有不同的信息部分,请考虑我有矩形坐标包围着'在线食品配送系统',如何在pytessaract中提取这些数据? 请帮忙 提前致谢
我正在使用的版本: Tesseract 4.0.0 pytesseract 0.3.0 OpenCv 3.4.3

是的,这是可能的,但如果没有您的输入图像,我们无法编写答案。 - nathancy
好的,我已经添加了一张图片,请帮我看看。@nathancy - Prem Kumar P
1个回答

9

Pytesseract没有内置的函数来提取图像的特定部分,但我们可以使用OpenCV提取ROI边界框,然后将此ROI传递给Pytesseract。我们将图像转换为灰度,然后进行阈值处理以获取二进制图像。假设您已经有了所需的ROI坐标,我们使用Numpy切片来提取所需的ROI。

enter image description here

从这里开始,我们将其传递给Pytesseract以获得结果。

ONLINE FOOD DELIVERY SYSTEM

代码

import cv2
import pytesseract

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

image = cv2.imread('1.jpg', 0)
thresh = 255 - cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

x,y,w,h = 37, 625, 309, 28  
ROI = thresh[y:y+h,x:x+w]
data = pytesseract.image_to_string(ROI, lang='eng',config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.imshow('ROI', ROI)
cv2.waitKey()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接