? ? ?
? ? ? ? 对于在线答题系统有很多种不同的定义。 一种是人工对计算机的题目解答,另外一种就是答案库的自动解答。我们现在介绍的就是利用自身的答案库进行自动答题的在线答题系统的技术原理介绍。
? ? ? 在答题平台中有大量的识别图片的答案,这是根据计算机的识别容量,通过对于数字,字母,数字字母组合,通过人工识别的方式,组建了答案库,这样只要在数据接口接入了题目,题库就会自动的出现对应的答案进行答案的输入。
? ? ? ? 接入说明如下:
上传题目图片返回结果.
请求URL
http://www.dati8.com/create.aspx
支持格式
application/json
HTTP请求方式
POST
请求参数 ? 必选 类型 说明 username true string 用户名。 password true string 用户密码(MD5加密后取后16位作为密码(小写字母)) typeid true int 题目类型 timeout false int 任务超时时间,默认与最小值为60秒。 softid true int 软件ID,开发者可自行申请。 softkey true string 软件KEY,开发者可自行申请。 image true byte 只支持原始图二进制数据。 注意事项
1.开发时需要修改HTTP请求默认超时时间,具体数值需要大于任务超时的timeout参数。
2.特殊题如:中文、选择、类型较难完成的请把任务超时(timeout参数)设置大于100秒,以便满足任务重新分配机制。
3.网络环境中HTTP劫持会影响使用结果。
4.任务执行中切勿断拨或切断网络,否则无法接收结果。
返回结果<div “=”” style=”margin: 0px; padding: 0px; list-style-type: none; line-height: 21.6000003814697px; font-family: helvetica, arial, verdana, sans-serif; font-size: 15px;”>
正确返回
JSON:{“Result”:”答题结果”,”id”:”题目Id(报错使用)”}
错误返回
文本消息
开发建议
推荐各开发者JSON方式为数据返回,为了代码运行更加健壮数据返回后先判断Result和Id两个分支是否存在,如果返回数据没有这两个分支就完全可以当错误返回处理。
? ? ?处理第一步统计图片颜色分布,颜色占有率低的判定为背景噪音。?
? ? ?由于背景噪音和前景色区分并不明显,尝试了很多种取景方法都不能很好去除背景噪音,最终放弃了这种方法。 事后在网上稍微查了下,最近比较流行计算灰度后设定一个阈值进行二值化。其实所谓的灰度图片原理是根据人眼对色彩敏感度取了权值,这个权值对计算机来说没有什么意义。稍微想一下就可以发现,这两个过程完全可以合并。于是乎我一步完成了去背景噪音和二值化。阈值设置为RGB三分量之和到500。结果非常令人满意。
? ? ? 处理第二步,制作字符样本。
? ? ? 样本对于计算机来说是非常重要的,因为计算机很难有逻辑思维,就算有逻辑思维也要经过长期训练才能让你满意。所以要用事先制作好的样本进行比较。如果你仔细观察过这些验证码会发现一个bug,几乎大部分的验证码都是使用同样的字体,于是乎就人工制作了一套字体的样本。由于上一步已经有去除背景噪音的结果,可以直接利用。制作样本这一步有点简单枯燥,还需要细心。可能因为你的一个不细心会导致某个符号的识别率偏低。在这500个样本中,只发现了31个字符。幸亏是某部门的某人员还考虑到了易错的字符,例如,1和I,0和O等。要不然这个某部门要背负更多的骂名。
? ? ? ?处理第三步,匹配?
? ? ? 单个匹配用了最简单最原始的二值比较,不过匹配的是匹配率而不是匹配数。我定义了相关的计分原则。大原则是“该有的有了加分,该有的没了减分,不该有的有了适度减分,可达区域外的不算分”。 由于一些符号的部分区域匹配结果跟另一些符号的完整匹配结果相似,需要把单个匹配在一个扩大的区域内择优。在一定的范围内,找到一个最佳匹配,这个最佳匹配就是当前位置对应的符号。 完成了一次最佳匹配,可以把匹配位置向右推进一大步,若找不到合适的最佳匹配就向右推进一小步。?
? ? ? ?处理第四步,优化和调整?
? ? ? ?任何一个算法都是需要优化和调整的。现在要找到最佳参数配置和最佳代码组织。这一步往往是需要花费最多时间和精力的。
? ? ? ? 处理第五步,验证结果?
? ? ? ? 这一步呢,纯人力验证结果,统计出正确率。 57503919