日期:2014-05-16  浏览次数:20532 次

【转】借助OCR和神经网络,用JavaScript识别验证码

转载自?deadpig
最终编辑?deadpig

原文作者:John Resig
原文链接:OCR and Neural Nets in JavaScript
译者:七月佑安

【原文标题】OCR and Neural Nets in JavaScript
【原文作者】John Resig
【译文地址】http://cuimingda.com/2009/01/ocr-and-neural-nets-in-javascript.html
昨天发现的了一段非常令人惊奇的JavaScript代码,是由ShaunF编写的automatically solves captchas,一个专门应用在Megaupload网站的Greasemonkey脚本。如果你要亲自尝试一下,可以先看看这个演示。而这个脚本的作用,正如名字所示,可以识别这个网站的验证码。
现在,这个网站的验证码已经不是个什么难题了。(实际上,这是一个本来设计的就不怎么好的验证码,下面会给出一些例子)
对于这段脚本,我们有很多值得注意的事情:
  1. Canvas可以将图片嵌入到画布上,而getImageData函数可以从画布上获取验证码的像素数据。
  2. 这个脚本完全用JavaScript编写了一套神经网络的实现。
  3. 通过Canvas从图片获取的像素数据,被传入神经网络,通过OCR技术来获取图片中所表示的真实字符。
如果我们翻开源代码,就会发现这个脚本究竟是如何实现的,我们也可以领会这个验证码究竟是如何实现的。就像我之前提到的,这个验证码设计的本身就不好,只有3个字母,而且还用不同的颜色区分,只包含26个字母,最主要的,他们始终是同一字体。
第一个步骤很明确:把验证码的像素图像复制到Canvas中,并且转换为灰度模式。
function?convert_grey(image_data){
for(var?x =?0; x <image_data.width; x++){
for(var?y =?0; y