如何定位此imag中的特定表单字段

2024-10-01 19:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在巴西,医院里每一个新生儿都要填写一份标准表格(用手填写)。这种形式被称为“DNV”(葡萄牙语为“活着出生的声明”)。还有一种形式叫“DO”(葡萄牙语后为“Decease Declaration”)。在我所在的州,医院向我工作的机构发送了近百万份这样的表格,我们在那里计算一个名为“生命统计”的数据库。我正在调查是否有可能使工作自动化。由于商业ICR解决方案花费大量资金,没有负责人相信它可以在内部完成,所以它是一个草根项目。在

表格的顶部是这样的: enter image description here

我从几家医院发来的100K个PDF文件中找到了一个,并能够使用一个简单的算法将它们分为两种类型(DNV或DO):首先我找到包含文档类型的黑色矩形(使用cv2.findContours和一些启发式方法),然后应用OCR(pytesseract.image_to_string)。我找到了20k“死亡宣言”(DO)和80k“生还宣言”。在

使用类似的算法,我能够OCR在黑色矩形右边的数字,并将55k表单图像与由专业打字员基于这些文档填充的数据库中的相应记录链接起来。在

现在我想找到日期字段(红色),以便尝试一点机器学习来识别数字-字段在下面突出显示: enter image description here

首先,我尝试了一个“模板匹配”算法,将此作为模板:enter image description here

这很有效,但前提是模板和表单图像的比例和角度相同。cv2.matchTemplate方法对尺度非常敏感。我尝试过使用SURF的特征匹配算法,但我很难让它工作(感觉太过分了)。在

因为很容易找到左边的黑色矩形,所以我考虑了一些选项来定位数字:

  • 标准化基于黑色矩形的比例和角度并尝试cv2.matchTemplate

  • 尝试定位轮廓,使用cv2.approxPolyDP简化轮廓并猜测数字位置。

我的问题是:关于如何解决这个问题有什么建议吗?如果输入在分辨率/角度方面没有标准化,我可以使用什么其他算法来定位此表单字段?在

[更新1]

给定(x,y,w,h)作为左边黑色矩形的位置和大小,我可以合理地缩小搜索范围。enter image description here

尝试随机样本,这个公式给出:

img.crop((x+w, y+h/3, x+h*3.05, y+2*h/3))

enter image description hereenter image description hereenter image description here

[更新2]

我刚刚了解了erode和{},现在他们是我新的好朋友。在

^{pr2}$

enter image description here

plt.imshow(grid, 'gray')

enter image description here

顺便说一句,我对计算机视觉一无所知。让我们回到谷歌。。。在


Tags: 定位算法模板数据库类型数字cv2do

热门问题