最近在做一个批量上传的文件到服务器的项目,在上传时需要登录,同时登录时需要输入验证码,每次输入验证码太麻烦了,于是就想写一段程序读取验证码上数字信息.
于是通过问了强大的google及百度后,大致了解到识别验证码的大致步骤为获取图像信息,去噪,切割,采集样本,识别等.
获取图像信息
从某网站的登录界面上获取2000张验证码图片
从验证码图像上可以看出,图像上有许多的干扰噪点,这对识别验证码信息增加了难度.现在想办法去除这些噪点.
去噪
观察这些验证码,数字的颜色为黑色,而噪点的颜色为其他的颜色.数字区域为有效区域,其他区域为无效区域,图像的颜色分布非常有规律,有效区域全为黑色,无效区域没有黑色,所以我们可以把无效区域全设置成白色,于是的到如下的效果:
同时我们把多余的区域裁剪掉了,仅仅留下有效区域
切割
把图像按照数字区域不等分的切割成四张图像.
采集样本
保存0-9十个数字的图像信息
识别
验证码上的数字是非常规整的,首先存一份每一个数字的图像信息
切割后的图像分别与数字的图像信息做比较,返回比较的结果
源码github地址
在程序中调用方法:
创建一个实例,参数为图像地址,调用getyzm(),返回数字信息.
vcode = YZM(path/to/imagename).getyzm()