测试扫描文档上是否勾选复选框的正确方法是什么?

时间:2013-03-05 15:10:28

标签: c# image-processing optical-mark-recognition

我们假设,我们正在使用复选框/空圆圈(用于签名/敲击/勾选)扫描类似测试的文档。如果已经裁剪的复选框/圆圈被选中/签名/删除/勾选,检查的正确方法是什么?
如果我们强迫测试用户完全标记该区域,只要知道复选框/圆圈的位置和非白色像素的计数量就足够了(是吗?),但我们应该采用何种方式进行测试,即勾选或勾选复选框/圆圈(X)?

这将成为C#项目的一部分,因此我们将非常感谢.net / c / c ++的代码甚至现成的库。

3 个答案:

答案 0 :(得分:3)

抱歉这个答案很简单,但你可以在复选框内的区域运行一个ocr系统。

如果它什么也没有返回,那么你知道它没有被检查。

如果它返回了某些内容,则将其与大的白色可能列表进行比较,然后标记不确定性。

您可以使用@dan建议的错误处理

这比仅仅采取平均值更加强大,是因为您可以确定它是否具有高确定性。因为我们正在寻找一种可以识别的最小方式的标记,我们知道如果没有任何东西那么它绝对不会被检查。所有你需要做的就是找到一个很好的白色字符列表和可以用作检查的标记(并且在框外思考,ocr系统可能会为一个曲线返回'a',但这是一个积极的回应) 。并且澄清一下,仅仅采取平均值的问题是复选框中的任何黑暗增加都会产生积极的结果,但情况并非总是如此。如果有人放了一个标记,然后擦掉你仍然会在盒子内增加黑暗。

最后我要补充一点,现在有很多OCR系统非常先进。我怀疑你找到一个你可以提供额外的训练数据集的麻烦,这些训练数据集可以比随机字符更好地匹配你的情况。

答案 1 :(得分:1)

算法会是这样的:

  1. 找到每个复选框(我知道你已经有了)
  2. 计算所有像素颜色的平均值
  3. 如果它高于某个阈值,则标记为(如果在下面,未标记)
  4. 但是,您应该添加一些检查:

    • 是否高于阈值? - >让一个人检查它,学生可以先勾选一些东西,然后将其改为另一个领域。
    • 没有超过门槛? - >让一个人确认没有检查过。

    我猜这个答案的重要部分是:
    如果算法不确定,请将其标记为手动处理。

答案 2 :(得分:1)

大多数提供复选框识别功能的高性能产品使用某种钟形分布曲线来计算实际检查盒子的可能性:太多“数据”#39;用户改变主意并潦草地写下这个盒子的机会很大;太少了,它可能是尾巴'用户在下面的方框中勾选而不是在穿过下一个框区域之前抬起笔。

我建议您应用额外的逻辑来处理允许的多个盒子(例如,您拥有一辆汽车/您是否也拥有自行车)以及只有一个盒子可以正确的情况(例如,你是男性还是女性)。这应该有助于您的应用。过滤掉更明显的错误。