python - OpenCV - 从问卷中检测复选框的手写标记
问题描述
我正在做很多患者摄入量调查表。这是问卷的扫描示例。我需要处理它们并存储到数据库中,但是在检测这些手写标记时遇到了问题:
患者摄入量问卷
问卷中有不同类型的标记。一些复选框被涂成黑色。一些复选框有勾号或十字标记。这些标记确实意味着选中了复选框。我需要使用 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 结果检测手写标记。我将测试几个样本并查看精度,但我不确定这是否可行。如果是这样,我会在稍后回复这篇文章。
解决方案
从示例中可以看出,黑色在标记的复选框区域中占主导地位。您可以使用 OCR 通过检测文本来定位复选框区域(假设您扫描的位置永远不会是精确的),我建议您只计算复选框区域中像素值的平均值(它不必100% 精确,只要你用区域大小取平均值)。
推荐阅读
- reactjs - 如何构建 next.js 文件并上传到 linux 共享主机
- python - 使用 BeautifulSoup 加载带有下拉框的页面
- javascript - Javascript 文件搞砸了,我需要帮助修复它
- plsql - 如何获取数组值的 PL/JSON 数组
- mysql - SQL查询替换通配符文本?
- python - 握手失败;返回 -1,ssl 错误代码 1,net_error -202
- batch-file - Ping 测试并保存到所需的文本文件 仅输出
- javascript - 获取带有视图子元素的元素列表
- tensorflow - tensorflow-2.0.0-cp36-cp36m-win_amd64.whl 不是此平台支持的轮子
- python - 如何通过一个循环创建多个列表?