在巴西,医院里每一个新生儿都要填写一份标准表格(用手填写)。这种形式被称为“DNV”(葡萄牙语为“活着出生的声明”)。还有一种形式叫“DO”(葡萄牙语后为“Decease Declaration”)。在我所在的州,医院向我工作的机构发送了近百万份这样的表格,我们在那里计算一个名为“生命统计”的数据库。我正在调查是否有可能使工作自动化。由于商业ICR解决方案花费大量资金,没有负责人相信它可以在内部完成,所以它是一个草根项目。在
我从几家医院发来的100K个PDF文件中找到了一个,并能够使用一个简单的算法将它们分为两种类型(DNV或DO):首先我找到包含文档类型的黑色矩形(使用cv2.findContours
和一些启发式方法),然后应用OCR(pytesseract.image_to_string
)。我找到了20k“死亡宣言”(DO)和80k“生还宣言”。在
使用类似的算法,我能够OCR在黑色矩形右边的数字,并将55k表单图像与由专业打字员基于这些文档填充的数据库中的相应记录链接起来。在
现在我想找到日期字段(红色),以便尝试一点机器学习来识别数字-字段在下面突出显示:
这很有效,但前提是模板和表单图像的比例和角度相同。cv2.matchTemplate
方法对尺度非常敏感。我尝试过使用SURF的特征匹配算法,但我很难让它工作(感觉太过分了)。在
因为很容易找到左边的黑色矩形,所以我考虑了一些选项来定位数字:
标准化基于黑色矩形的比例和角度并尝试cv2.matchTemplate
。
尝试定位轮廓,使用cv2.approxPolyDP
简化轮廓并猜测数字位置。
我的问题是:关于如何解决这个问题有什么建议吗?如果输入在分辨率/角度方面没有标准化,我可以使用什么其他算法来定位此表单字段?在
给定(x,y,w,h)作为左边黑色矩形的位置和大小,我可以合理地缩小搜索范围。
尝试随机样本,这个公式给出:
img.crop((x+w, y+h/3, x+h*3.05, y+2*h/3))
我刚刚了解了erode
和{
plt.imshow(grid, 'gray')
顺便说一句,我对计算机视觉一无所知。让我们回到谷歌。。。在
尝试查找字段角点,计算角度/比例,然后将图像转换为标准化图像。在
相关问题 更多 >
编程相关推荐