[简单OCR实现原理.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[简单OCR实现原理

简单OCR实现原理 ()许多网站在接受HTTP输入的时候常用到一项认证码技术来防止DOS攻击。简单地说就是在显示提交数据页面之前或者同时,服务器会向客户端发送一个小图片,该图片通常由一些随机的数字或字母(很少情况下会有其他字符)组合而成,并要求在HTTP的提交表单(FORM)中正确输入该数字,无效的输入会使数据提交失败。这样的机制可以有效阻止或降低一些登陆/张贴/投票的自动机对网站产生的负面作用。 作者:doublelee 日期:2005-5-5 概述: 许多网站在接受HTTP输入的时候常用到一项认证码技术来防止DOS攻击。简单地说就是在显示提交数据页面之前或者同时,服务器会向客户端发送一个小图片,该图片通常由一些随机的数字或字母(很少情况下会有其他字符)组合而成,并要求在HTTP的提交表单(FORM)中正确输入该数字,无效的输入会使数据提交失败。这样的机制可以有效阻止或降低一些登陆/张贴/投票的自动机对网站产生的负面作用。 早期的认证图片是一个图片库的形式存放在服务器端,每次随机选取一幅图片发送到客户端。对这样的认证机制有一个相当简单的攻击方法就是,攻击者可以用自动机经过一定时间穷举,下载所有的图片并经过人工辨认,存入攻击者的数据库,攻击时,根据得到的图片或者甚至是其校验和,在数据库中查询其对应的认证码即可。对于一个4位数字的情况,攻击者只要存储一万张图片即可,这其实是一个很小的工作量。 针对上述攻击方法,现在有很多jsp,php,cgi的脚本可以动态生成这样的认证图片,即先随机产生认证码,再根据认证码动态生成图片。这样同样的认证数字生成的图片完全不同,使得储存图片库的攻击方式失效。但也许由于技术原因限制,动态生成的图片在字体变形方面通常做的很差,大多数甚至完全没有变形机制,这样的情况下,编写程序识别这样的图片也就成为了可能。 本文就以国内某网站为例,谈一下编写这样的图片自动识别工具的思路。 正文: 首先图片格式不外乎bmp,jpg,gif,可以通过开源程序全部转换为统一格式,故不予考虑。这里只考虑bmp格式作为目标,因为这是最简单和易于处理的格式。 现在我们来分析图片的构成,发出了50个请求之后,我们得到了这样50个图片,其中包含一对同样数字图片 7208 经过分析,图片内容为4位数字,不含字母或其他符号。图片格式为bmp,所有图片具有统一的大小,宽,高。经过查询bmp文件格式文档,发现其调色板也完全相同,以2字节代表一个象素。另外还发现图片所有的数字所处的相对位置固定,大小固定,字体固定,变化的只是颜色和背景中一些随机的黑色斑点。而且颜色上,也许是考虑色盲用户的存在,并没有过于鲜艳的颜色,也就是说基本上数字轮廓内的颜色以深色高灰度为主,变化并不大。背景中的斑点也是一样。数目约40个象素左右(图片共17*60=1020象素) 进一步分析,确定各数字所处的位置,所占的象素。由于bmp文件格式很简单,这个工作细心一点很快就可以完成。得到数据如下: //图片高17,宽60,以下x,y是第一象限坐标 //每个数字高13,宽10,字间间隙为3 //起始坐标依次在(x,y) = (7,1), (20,1), (33,1), (46,1) //每个象素占用2个字节 根据以上这些数据,可以在程序中轻松定位每一个数字并提取出代表该位置数字的所有象素的数据信息,这些信息可以存在一个2*13*10=260字节的一个数组里。 下面的问题是如何准确判断这260个字节数据代表的数字,这涉及到一个模糊匹配的问题。好在在本例中,匹配目标只有十个,干扰元素影响也不是很大。经过几次摸索,我认为产生10个标准的匹配目标即可,这个匹配目标我称之为数字模板(module),共10个,分别代表0~9数字的典型灰度分布,每个数字模板也占用260个字节。这样以后将每次得到的260字节数据与之比较,差异最小的即认为最匹配即可。 现在产生两个问题,一,模板文件哪里来?二,比较函数用什么公式? 对于第一个问题,我可不想260个字节一个字节一个字节地手工查找和填写,2600次,很累的也!那么想办法写程序统计。最开始我是统计所有的相同数字,取平均值,例如每看到一个0,假设前面已经统计过k个0,模板中的对应字节的值是前k个数字0统计的平均值,那么看到第k+1个0的图片p0(k+1)之后,修正模板为 m0(k+1)=(m0(k)*k+p0)/(k+1) 但是随即发现问题,对于不同的颜色,p0(k)的差异很大,平均值不能体现问题。更为严重的是,作为整数,这样的包含除法的平均值计算公式并不好用,误差十分的大,经过一些轮次的计算后,模板数据变的一塌糊涂,新数据也很难以起作用了。 再次对数据进行仔细地观

文档评论(0)

19840506 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档