我很高兴你喜欢它!Github:leonof/imgRecJs[1],刚刚上传,代码还有待完善~因为很多同学对训练和识别表示疑惑,我做了一个小接口放到最后,方便大家过一遍流程第一的。后面会更新:把js代码等打包成chrome扩展,让浏览器自动识别,像傻瓜一样使用~!(更新:使用chrome扩展让浏览器执行我们的脚本[2])其实整篇文章并不难,网上有很多java、c等代码。只是我写代码的时候找不到纯js可以用的代码或者库,也不能打包成chrome扩展,所以还是用起来不方便。所以在验证了思路的可行性之后,我就大致写下来,方便大家参考。目前验证码的识别方式有很多种。由于能力有限,只能用最简单的机器学习。目标验证码也比较简单,比如:(包括字母)如果识别控制速度在0.1秒以内,则正确率为99.99999%(因为识别一直都是正确的哈哈哈)。在动手之前,我们先梳理一下大概的思路,让更多独立的同学可以尝试自己完成代码:1.首先分析网页的DOM结构,加载验证码图片。2.在canvas上绘制图片,获取图片的像素数据。3.依次对图像进行二值化、腐蚀、膨胀、剪切、旋转、缩放。4、记录处理后的单个数字的二值化数据,手动录入实数。5.重复训练。6、识别时,用处理后的图像与库中的数据进行比对,得到最相似的数据,得到真实的数字。(下方优化)7、当数据量较大时,可以取前几条相似的数据,根据权重从中选出最有可能的数,提高准确率。8、也可以在发现相似度足够高时停止搜索,作为最终的识别结果,提高效率。大佬们直接写吧,我低级简单的代码会被你们笑话的。..比较急功近利的同学不用看了,直接用demo修改一下!好吧,既然你在这里,我会尽量说清楚。在做之前,我简单模拟了一个需要输入验证码的网站。效果如下:嗯,真的很简单...点击图片更改验证码,输入框用于输入,按钮模拟提交,如下:假设他就是我们要的目标自动识别。1、分析网页DOM结构,加载验证码图片。我们可以看到验证码的url是:img/0.jpg。这里的url会发生变化,模拟更改验证码的过程。ctx1.drawImage(img,0,0,img.width,img.height);但实际上,由于大部分验证码都是后台生成的,地址是固定的。然后我们就可以轻松获取图片数据了:新建一个Image,给url赋值即可(或者直接获取img元素)。参考代码:varimg=document.getElementById("img");2.在canvas上绘制图片,获取图片的像素数据。要在画布上绘制图片,首先要创建一个画布并对其进行初始化。参考代码:varcanvas1=document.createElement("canvas");document.getElementsByTagName("body")[0].appendChild(canvas1);canvas1.style.backgroundColor="cornsilk";varctx1=canvas1.getContext("2d");然后,画图。参考代码:ctx1.drawImage(img,0,0,img.width,img.height);然后我们就可以使用canvas来获取图片的像素数据了。参考代码:varimgData=ctx1.getImageData(0,0,WIDTH,HEIGHT);3.依次对图像进行二值化、腐蚀膨胀、切割、旋转、缩放。这部分是图像识别的重点,直接影响识别的准确率和速度。复杂的验证码也要经过去刺激处理。例如,可以检测并消除贯穿的水平线,或者去除颜色高度均匀的背景等。我们的图片几乎没有干扰,只有简单的旋转和缩放,所以直接进行二值化操作(二值化也可以去除少量干扰)。1、二值化操作的思路是:计算图片的平均灰度作为阈值,大于阈值则为纯黑,否则为纯白。参考代码:functiontoHex(fromImgData){//二值化图像varfromPixelData=fromImgData.data;vargreyAve=0;for(varj=0;j