2

假设我们正在扫描带有复选框/空圆圈(用于签名/敲击/打勾)的类似测试的文档。什么是正确的方法来检查,如果已经裁剪的复选框/圆圈被选中/签名/罢工/打勾?
如果我们强制测试用户完全标记该区域,只知道复选框/圆圈的位置和非白色像素上的计数就足够了(会吗?),但是我们应该用什么方法来测试,即复选框/圆圈被勾选或选中(X)?

这将成为 C# 项目的一部分,因此将不胜感激代码甚至是 .net/c/c++ 的现成库。

4

3 回答 3

3

抱歉这个答案很短,但您可以在复选框内的区域上运行 ocr 系统。

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

如果它返回一些东西,那么将它与一个大的可能性白名单进行比较,然后标记不确定性。

您也可以使用@dan 提出的错误处理

使这比仅取平均值更可靠的原因在于,您可以确定是否没有高度确定地检查它。因为我们正在寻找一个以某种最小方式可识别的标记,我们知道如果那里没有任何东西,那么它肯定不会被检查。那么您所要做的就是找到一个可以用作检查的字符和标记的良好白名单(并且跳出框框思考,ocr系统可能会返回一个'a'表示曲线,但这是一个积极的回应) . 需要澄清的是,仅取平均值的问题在于,复选框中任何暗度的增加都会产生积极的结果,但情况并非总是如此。如果有人做了标记然后擦掉了,那么盒子里的黑暗仍然会增加。

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

于 2013-03-05T16:41:01.083 回答
1

该算法将是这样的:

  1. 找到每个复选框(我知道你已经有了)
  2. 计算所有像素颜色的平均值
  3. 如果高于某个阈值,则标记,如果低于某个阈值,则未标记

但是,您应该添加一些检查:

  • 倍数是否高于阈值?-> 让人工检查,学生可以先勾选某项内容,然后将其更改为另一个字段。
  • 没有人超过阈值?-> 让人工验证确实没有检查过。

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

于 2013-03-05T15:14:10.297 回答
1

大多数提供复选框识别的高性能产品都使用某种钟形分布曲线来计算一个框实际被选中的可能性:太多的“数据”,用户很可能改变主意并草草写了这个盒子; 太少了,它可能是用户在下面的方框中打勾并且在穿过下一个方框区域之前没有提起笔而留下的“尾巴”。

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

于 2013-03-06T11:22:18.500 回答