光学字符识别Python代码完全忽略部分图像的所有字符

2024-04-23 11:42:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个简单的任务,我必须从简单的图像中读取字符。在python中使用tesseract来编写以下代码,该代码适用于所有具有英文文本的简单和复杂图像,但在特定图像上失败。有人能告诉我为什么下面的python代码不能从下面的图像中读取字符吗?正如您所看到的,每个框中有6个字符的6个黑色部分,字符颜色为白色。你知道吗

from PIL import Image
import pytesseract
import argparse
import cv2
import os

ap = argparse.ArgumentParser()
ap.add_argument("-i","--image",required=True,help="path to input image to be OCR'd")
ap.add_argument("-p","-- preprocess",type=str,default="thresh",help="type of preprocessing to be done")
args=vars(ap.parse_args())
image = cv2.imread(args["image"])
gray2 = cv2.BackgroundSubtractor()
gray2 = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray2 = cv2.threshold(gray2, 100, 255, cv2.THRESH_BINARY_INV)[1]
rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 3))
sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
if args["preprocess"] == "thresh":
    gray2 = cv2.threshold(gray2, 2, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
elif args["preprocess"] == "blur":
    gray2 = cv2.medianBlur(gray2,3)
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename,gray2)
text = pytesseract.image_to_string(Image.open(filename))
print(text)

If this image is used, it gives perfect result

0123456789号 zhongjijkl MNOPQRSTUV公司 WXYZ公司

当我尝试使用下图时

Processed Image which does not give result代码完全忽略图像中的所有字符。唯一的区别是第一个图像没有像第二个图像那样的框,每个黑框包含6个字符

有人能帮我一下,告诉我我遗漏了什么,为什么第二张图片的代码失败了,谢谢。

以下是原始图像: Image1Image2


Tags: to代码图像imageimportargsfilename字符