gpt4 book ai didi

python - 如何在此图像中定位特定的表单域

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:25 24 4
gpt4 key购买 nike

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

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

我接触到从几家医院发送的 100K PDF 文件,并能够使用一种朴素的算法将它们分类为两种类型(DNV 或 DO)中的一种:首先,我找到包含文档类型的黑色矩形(使用 cv2.findContours 和一些启发式方法)并应用 OCR (pytesseract.image_to_string)。我找到了 20k 的“死亡声明”(DO) 和 80k 的“born alive declaration”。

使用类似的算法,我能够对黑色矩形右侧的数字进行 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 here enter image description here enter image description here

[更新#2]

我刚刚了解了erodedilate,现在它们是我最好的新 friend 。

horizontal = edges.copy()
vertical = edges.copy()

kv = np.ones((25, 1), np.uint8)
kh = np.ones((1, 30), np.uint8)

horizontal = cv2.dilate(cv2.erode(horizontal, kh, iterations=2), kh, iterations=2)
vertical = cv2.dilate(cv2.erode(vertical, kv, iterations=2), kv, iterations=2)

grid = horizontal | vertical

plt.imshow(edges, 'gray')

enter image description here

plt.imshow(grid, 'gray')

enter image description here

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

最佳答案

尝试查找场角、计算角度/比例,而不是仅仅将图像转换为标准化图像。

关于python - 如何在此图像中定位特定的表单域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com