我正在尝试从扫描表单中提取数据。表单的标准格式类似于下图所示:
我尝试使用pytesseract(tesseract OCR)来检测图像的文本,并且它在查找文本和将图像转换为文本方面做得不错。 然而,它基本上只是给我所有检测到的文本而不保留数据的格式。
我希望能够做如下的事情:
找到特定的文本,然后在其下方或旁边找到相关数据。与使用opencv Detect text region in image using Opencv
的此问题类似有没有办法可以基本上做到以下几点:
编辑:我已尝试使用以下代码尝试检测文本的特定区域。但是,它并没有专门确定所有地区的文本。
import cv2
img = cv2.imread('t2.jpg')
mser = cv2.MSER_create()
img = cv2.resize(img, (img.shape[1]*2, img.shape[0]*2))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
vis = img.copy()
regions = mser.detectRegions(gray)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions[0]]
cv2.polylines(vis, hulls, 1, (0,255,0))
cv2.imshow('img', vis)
结果如下:
答案 0 :(得分:0)
我认为你已经在自己的帖子中得到了答案。 我最近做了类似的事情,这就是我做到的:
//id_image was loaded with cv2.imread
temp_image = id_image[start_y:end_y,start_x:end_x]
img = Image.fromarray(temp_image)
text = pytesseract.image_to_string(img, config="-psm 7")
基本上,如果您的格式是预定义的,您只需要知道您想要文本(您已经知道)的字段的位置,裁剪它,然后应用ocr(tesseract)提取。
在这种情况下,您需要import pytesseract, PIL, cv2, numpy
。