tesseract用于空表单元格

时间:2018-09-17 16:01:17

标签: image-processing ocr tesseract

Image to read

我正在使用 tesseract 将图像转换为CentOS实例上的文本,但是我无法处理空白单元格。

我从 tesseract 获得的输出:

  

法律实体项目类别星期一08/20星期二08/21星期三08/22星期四   08/23星期五08/24星期六08/25星期日08/26总计

     

测试开发改进-改进8.00 8.00 8.00 8.00 8.00    40.00 H'9

请注意,第二行中的最后8个之后和40个之前有空格(基本上是星期六/星期日单元格为空)

3 个答案:

答案 0 :(得分:0)

您可以训练Tesseract并使其识别空格(不建议使用,因为它会弄乱您获得的100%输出),或者通过编码解决问题。不幸的是,无法按照您希望的方式来训练Tesseract。

我在这里看到的最佳解决方案是在周六和周日显示0或类似的东西(您喜欢的任何字符),以便Tesseract可以看到它们并且您可以对此做出反应。

答案 1 :(得分:0)

答案 2 :(得分:0)

在执行OCR部件之前,我将尝试定位包含文本的区域,使其成为我的ROI。然后,对于OCR部分,请使用ROI而不是整个图像。然后,您可以搜索ROI是否包含轮廓,然后应该执行OCR,否则留一个空白。希望能有所帮助,加油!

示例:

import cv2
import numpy as np

img = cv2.imread('table_so.png')

res = cv2.resize(img,None,fx=0.8, fy=0.8, interpolation = cv2.INTER_CUBIC)
h,w,ch = res.shape
cv2.rectangle(res, (0,0), (w,h), (0,0,0), 10)

gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray,220,255,cv2.THRESH_BINARY)
_, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
sort_cnts = sorted(contours, key=lambda ctr: cv2.boundingRect(ctr)[0] + cv2.boundingRect(ctr)[1] * res.shape[1] )

ROIs = []

for cnt in sort_cnts:
    x,y,w,h = cv2.boundingRect(cnt)
    if 2000 > w > 70 and h < 100:
        ROI = res[y:y+h, x:x+w]
        ROIs.append(ROI)
        cv2.rectangle(res, (x,y), (x+w,y+h), (0,255,0), 2)

for i in ROIs:
    roi = i
    gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
    _, thresh = cv2.threshold(gray,220,255,cv2.THRESH_BINARY)
    _, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
    if len(contours) > 1:
        print('DO OCR HERE')
    else:
        print('BLANK SPACE')
    cv2.imshow('img', gray)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

cv2.imshow('img', res)

结果:

enter image description here

(绿色框表示ROI)

  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 在这里进行OCR操作
  • 空白空间
  • 空白空间
  • 空白空间