OpenCV - 检测问卷复选框的手写标记

5
我正在处理许多病人接诊问卷。这是一个扫描样例问卷。我需要处理它们并存储到数据库中,但是我遇到了一个问题,无法检测这些手写标记:
病人接诊问卷
有不同类型的标记在问卷中。一些复选框被涂成黑色。一些复选框上有勾或叉标记。这些标记都表示已选择了该项目。我需要使用opencv2来识别哪些复选框被选中了。
我尝试了光学字符识别,但结果并不理想。由于标记形状过多,OCR将其识别为不同的字符。我需要找出哪些复选框在问卷中被选中。cv2可以解决这个问题,但我不知道如何处理。
# Expected input: An image of Questionnaire

# Expected output:
Have you seen other health care providers for your problems of dizziness 
and/or imbalance? [selected] Yes [unselected] No

Have you been through a program of Vestibular and Balance Rehabilitation 
Therapy? [selected] Yes [unselected] No

=============================
[unselected] vertigo
[unselected] falling
...
[selected] Drunk-like

=============================
[selected] Vertigo
[selected] Falling
[selected] Fatigue
[selected] Wooziness
[selected] Spinning
[unselected] Disconnected

我之前尝试使用Python的tesseract OCR包:

from PIL import Image
import pytesseract
path ="page1.jpg"
img = Image.open(path)
text = pytesseract.image_to_string(img, lang='eng', config='-c preserve_interword_spaces=1 --psm 6')
print text


O Vertigo           O Falling              O Fatigue                 W Vertigo          YA Falling             y[ Fatigue
[ Wooziness     O Spinning         O Disconnected       A \Wooziness     Q Spinning         [ Disconnected
O Imbalance      B Drunk-like        O Swirling             O Imbalance      O Drunk-like       @ Swirling      ;
O Faint            [ Rocking        O Can’tfocus         M Faint           4 Rocking          O Can’t focus
O Lightheaded O Swaying -~ . -0 Unsteady       O Lightheaded O Swaying       N Unsteady
O “onaboat” O Swimming sensation                      Weonaboat” @ Swimming sensation
O Other:                                                        0 Other:

我的想法是:如果OCR将矩形复选框识别为字符“O”或数字“0”,则应取消选择该复选框。否则应该选中它。根据这个规则,我可以基于OCR结果检测手写标记。我会在几个样本上进行测试并查看精度,尽管我不确定是否可行。如果可以,稍后我将在此帖子回报。


看看AWS Textract吧。他们有一个很好的API,可以读取页面、表格和表单中的文本。 - gmwill934
1个回答

1
从这个例子来看,我发现在标记的复选框区域中,黑色相当占主导地位。您可以使用OCR来定位复选框区域(假设您扫描的位置不准确),通过检测文本来实现,并建议您仅计算复选框区域内像素值的平均值(只要您将其与区域大小平均即可,无需100%准确)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接