我正在使用 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个之前有空格(基本上是星期六/星期日单元格为空)
答案 0 :(得分:0)
您可以训练Tesseract并使其识别空格(不建议使用,因为它会弄乱您获得的100%输出),或者通过编码解决问题。不幸的是,无法按照您希望的方式来训练Tesseract。
我在这里看到的最佳解决方案是在周六和周日显示0或类似的东西(您喜欢的任何字符),以便Tesseract可以看到它们并且您可以对此做出反应。
答案 1 :(得分:0)
尝试将preserve_interword_spaces
设置为1
。
答案 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)
结果:
(绿色框表示ROI)