Python,文本检测OCR

问题描述:

我试图从扫描的表单中提取数据。窗体有类似下面的图片中显示的一个标准格式:Python,文本检测OCR

enter image description here

我一直在使用pytesseract(正方体OCR)来检测图像的文本尝试,但并未找到文本做了体面的工作并将图像转换为文本。 然而,它实质上只是给我所有检测到的文本,而没有保持数据的格式。

我希望能够做一些事情,如下面:

查找文本的特定部分,然后找到下面或旁边的相关的数据。与此相似的问题使用OpenCV的Detect text region in image using Opencv

enter image description here

有没有办法,我基本上可以做到以下几点:

  1. 要么找到窗体上的所有文本框,每个盒子上执行OCR,看看哪一个与“witnesess:”文本最接近,然后找到它下面的部分,并对这些部分执行单独的OCR。
  2. 或者如果表单是标准的,并且我知道“见证”文本部分的大概位置,我可以在opencv中指定它的一般位置,然后提取下面的文本并对其执行OCR。

编辑:我试过下面的代码,试图检测文本的特定区域。然而,它并不是专门识别所有地区的文字。

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) 

下面是结果:

enter image description here

+0

Tesseract可以给你包围盒,你使用的是包装? –

+0

由于您似乎以明确定义的格式显示窗体,因此您可以手动定义一些边界框,裁剪图像并单独在裁剪后的图像上运行tesseract。 – ZdaR

我觉得你的答案已经在自己的岗位。 我最近类似的东西,这是我做的:

//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