Python,文本检测OCR

时间:2017-08-15 03:01:08

标签: python matlab opencv computer-vision ocr

我正在尝试从扫描表单中提取数据。表单的标准格式类似于下图所示:

enter image description here

我尝试使用pytesseract(tesseract OCR)来检测图像的文本,并且它在查找文本和将图像转换为文本方面做得不错。 然而,它基本上只是给我所有检测到的文本而不保留数据的格式。

我希望能够做如下的事情:

找到特定的文本,然后在其下方或旁边找到相关数据。与使用opencv Detect text region in image using Opencv

的此问题类似

enter image description here

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

  1. 找到表单上的所有文本框,在每个框上执行OCR并查看哪一个与“witnesess:”文本最匹配,然后查找紧邻其下方的部分并对其执行单独的OCR。
  2. 或者如果表格是标准的并且我知道“见证”文本部分的大致位置,我可以在opencv中指定其一般位置,然后只提取下面的文本并对其执行OCR。
  3. 编辑:我已尝试使用以下代码尝试检测文本的特定区域。但是,它并没有专门确定所有地区的文本。

    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

1 个答案:

答案 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