Mon*_*kat 5 python ocr opencv image-processing object-detection
我们建立了一个检测表区域的模型。
下一步是解析检测到的表格图像并将其转换为 CSV/Dataframe。我们正面临着这个问题,我们已经尝试了一些技术,
尝试过opencv的reduce方法来获得垂直线或列的分隔,但是当单词之间的距离较大时它会失败(下面共享的示例)。示例图像中的白框是 OCR 系统检测到的单词的实际位置。
下面的代码在图像上执行两次,1.图像被传递到 OCR 系统,它返回检测到的文本及其边界框。2. 我们在黑色背景的图像上绘制边界框。3. 然后,我们将图像传递给下面的代码两次,首先 - 原始绘制的图像以获得水平线坐标,第二 - 将绘制的图像旋转 90 度,然后再次传递给相同的代码以获取垂直线坐标。
通过使用坐标绘制线条,我们得到以下结果。这只是为了可视化。但在这样的情况下它会失败。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.reduce(gray, 1, cv2.REDUCE_AVG).reshape(-1)
th = 2
H, W = img.shape[:2]
lowers = [y for y in range(H - 1) if hist[y] > th and hist[y + 1] <= th]
for y in lowers:
img=cv2.line(img, (0,y), (W, y), (0,255,0), 1)
cv2.imwrite("demo_img.png", img)
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助
仅当您的文档完全对齐且文本方向水平时,reduce 操作才适用于此目的。如果您不能保证情况确实如此(如您的示例所示),您必须执行以下操作之一:
A) 估计旋转(例如使用 2D DFT 测量它)并对其进行补偿
B) 将图像预旋转一系列角度(例如,-3 度到 3 度,以半度为增量),并使用质量度量(例如“hist”的非零箱之间的最大间隔)来识别最佳结果。