如何从图像中提取点文字?

Pau*_*abo 6 python ocr opencv image-processing python-tesseract

我正在做我的学士学位期末项目,我想用 python 创建一个用于瓶子检查的 OCR。我需要一些有关图像文本识别的帮助。我是否需要以更好的方式应用 cv2 操作、训练 tesseract 或者我应该尝试其他方法?

我尝试对图像进行图像处理操作,并使用 pytesseract 来识别字符。

使用我从这张照片中得到的以下代码:

在此输入图像描述

对于这个:

在此输入图像描述

然后是这个:

在此输入图像描述

锐化功能:

def sharpen(img):
  sharpen = iaa.Sharpen(alpha=1.0, lightness = 1.0)
  sharpen_img = sharpen.augment_image(img)
  return sharpen_img
Run Code Online (Sandbox Code Playgroud)

图像处理代码:

textZone = cv2.pyrUp(sharpen(originalImage[y:y + h - 1, x:x + w - 1])) #text zone cropped from the original image

sharp = cv2.cvtColor(textZone, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(sharp, 127, 255, cv2.THRESH_BINARY)

#the functions such as opening are inverted (I don't know why) that's why I did opening with MORPH_CLOSE parameter, dilatation with erode and so on

kernel_open = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
open = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel_open)

kernel_dilate = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,7))
dilate = cv2.erode(open,kernel_dilate)

kernel_close = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 5))
close = cv2.morphologyEx(dilate, cv2.MORPH_OPEN, kernel_close)

print(pytesseract.image_to_string(close))
Run Code Online (Sandbox Code Playgroud)

这是 pytesseract.image_to_string 的结果:

22203;?!)

92:53 a
Run Code Online (Sandbox Code Playgroud)

预期结果是:

22/03/20

02:53 A
Run Code Online (Sandbox Code Playgroud)

Dav*_*ith 2

“我是否需要以更好的方式应用 cv2 操作,训练超立方体,还是应该尝试其他方法?”

首先,感谢您承担这个项目并取得了如此大的进展。从 OpenCV/cv2 的角度来看,您所拥有的看起来相当不错。

现在,如果你想让 Tesseract 陪你走完剩下的路,至少你必须训练它。在这里你有一个艰难的选择:投资训练 Tesseract,或者建立一个 CNN 来识别有限的字母表。如果你有办法分割图像,我会倾向于选择后者。