将Tesseract用于OCR匹配模板感兴趣区域(ROI)

问题描述 投票:0回答:1

这是我第一次使用Python。我通常使用.NET,但是为了识别文档中的形状,他们已经转向Python和OpenCV进行图像处理。

我正在使用OpenCV TemplateMatching(cv2.matchTemplate)在我的文档中发现感兴趣的区域(ROI)。

这很好。模板与ROI匹配,并放置矩形以标识匹配项。

我图像中的ROI包含我也需要OCR和提取的文本。我正在尝试使用Tesseract进行此操作,但是根据我的结果,我认为我做错了。

我的过程是这样:

  • 运行cv2.matchTemplate
  • 通过匹配的ROI循环
  • 添加矩形信息。图片
  • 传递矩形信息。到Tesseract
  • 将从tesseract返回的文本添加到图像中
  • 写最终图像

在下面的图像中,您可以看到匹配的区域(很好),但是您可以看到ROI中的文本与tesseract的文本不匹配(ROI的右下方)。

请有人可以看看并告知我要去哪里错了吗?

import cv2
import numpy as np
import pytesseract
import imutils

img_rgb = cv2.imread('images/pd2.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template = cv2.imread('images/matchMe.png', 0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.45
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
    roi = img_rgb[pt, (pt[0] + w, pt[1] + h)]
    config = "-l eng --oem 1 --psm 7"
    text = pytesseract.image_to_string(roi, config=config)
    print(text)
    cv2.putText(img_rgb, text, (pt[0] + w, pt[1] + h),
                cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 255), 3)

cv2.imwrite('images/results.png', img_rgb)

Matched Image

template

pd2

ocr python-tesseract matchtemplate
1个回答
0
投票

您的代码中有两个问题:1.您正在OCR之前修改图像(绘制矩形)。2. roi的结构不正确。

img_rgb = cv2.imread('tess.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template = cv2.imread('matchMe.png', 0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.45
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
    roi = img_rgb[pt[1]:pt[1] + h, pt[0]: pt[0] + w]
    config = "-l eng --oem 1 --psm 7"
    text = pytesseract.image_to_string(roi, config=config)
    print(text)
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
    cv2.putText(img_rgb, text, (pt[0] + w, pt[1] + h),
                cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 255), 3)

cv2.imwrite('results.png', img_rgb)

您可能仍然必须提供经过适当过滤的tesseract图像才能进行有意义的识别。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.