许多网站在进行某些操作前会要求输入验证码以此来抵御爬虫和攻击。此篇主要讲述如何通过代码来识别一些常见的验证码。以此探究图片识别的过程以及如何避免生成容易被识别的验证码。

理论

图片识别的过程

  1. 取样本

  2. 清洗区分样本

  3. 提取样本特征

  4. 提取目标的特征与样本进行对比

操作过程

Java有丰富的图片处理类,本次操作使用java语言。
一、取目标网站的验证码样本。在web页面中查看验证码请求的地址。通过http请求批量获取验证码并保存在本地。

二、区分样本。对每张验证码图片进行人工识别区分,重命名为该图片的验证码。

三、清洗切割样本,提取样本特征。图片识别需要尽可能细地区分出特征点。我们观察上图的验证码图片可以发现多个信息:
● 验证码的背景存在着许多干扰线。

● 每个数字分明,所占的位置几乎是均等的。

● 验证码的数字颜色比较深,干扰因素颜色较浅。

我们可以尝试通过颜色的深浅去除干扰因素。先通过灰度处理,将验证码中颜色较浅的点置换成白色,颜色较深的点置换成黑色。

通过改变灰度阈值grayValue不断尝试去除干扰点。最后得到干净的验证码。

接下来通过识别图片中的黑色点,使用下面的trainData()方法。

沿着黑色点进行矩形切割,得到单个数字的特征样本。

得到的验证码特征样本训练集合如下:

四、提取目标验证码的特征,与训练集合做对比,识别目标验证码图片

通过上面的三步,我们已经得到了一组样本特征,接下来只需要把将目标验证码同样执行上面的3步。把提取出来的目标验证码特征与样本特征作对比。如果双方绝大部分像素点的颜色相同,则可认为目标验证码与样本内容一致。取样本的文件名,即可等到目标验证的内容了。以下为对比识别的代码。

总结

通过上面的四部操作,我们已经能够识别出一些网站的验证码了。上面使用的方法是通过颜色的深浅,去除干扰素,再提取样本特征进行对比。面对其他的一些验证码需要我们通过观察掌握图片的规律,灵活地使用其他的算法来识别去除干扰素,提取出样本特征。

同样地,在生成验证码的过程中,我们需要避免生成易于去除的干扰素。各个验证码之间在不影响人工识别的情况下尽可能粘连起来,避免被切割分类。


文章来自公众号:睿江云计算

睿江云官网链接:https://www.eflycloud.com/home?from=RJ0024

图片识别之验证码识别相关推荐

  1. 图形数字的识别算法: 车牌识别及验证码识别的一般思路

    图形数字的识别算法: 车牌识别及验证码识别的一般思路 本文源自我之前花了2 天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95% 识别率(主要对于车牌来说,D,0 ...

  2. java 识别图片 边框_atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本...

    atitit.验证码识别step3----去除边框----图像处理类库 attilax总结java版本 1. 去除边框思路原理 图像裁剪::从图片的Positions.CENTER,wid,hit)裁 ...

  3. 车牌识别及验证码识别的一般思路

    本文源自我之前花了2天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95%识别率(主要对于车牌来说,D,0,O,I,1等等太相似了.然后,汉字的识别难度也不小),因此 ...

  4. python语音验证码识别_Python验证码识别

    大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验 ...

  5. 毕业设计 - 题目:基于python的验证码识别 - 机器视觉 验证码识别

    文章目录 0 前言 1 项目简介 2 验证码识别步骤 2.1 灰度处理&二值化 2.2 去除边框 2.3 图像降噪 2.4 字符切割 2.5 识别 3 基于tensorflow的验证码识别 3 ...

  6. python图形验证码识别_Python验证码识别:利用pytesser识别简单图形验证码

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  7. python tensorflow验证码识别_TensorFlow 验证码识别

    TensorFlow 验证码识别 • 准备模型开发环境 第三方依赖包 Pillow (PIL Fork) PIL(Python Imaging Library) 为 Python 解释器添加了图像处理 ...

  8. python几行代码识别验证码_Python有多强?文字识别(验证码识别)只需三行代码!...

    不要说这都是在借用其它语言的代码,其实这些东西真的无关紧要.何为Python高级语言,黑猫白猫能捉到老鼠的就是好猫!如果真的有那么高冷,那么任何程序你都要敲代码而不用任何模块? 再开个玩笑,要不用0和 ...

  9. java o 验证码识别_验证码识别(一)

    开始做简单的ORC,从昨天到今天总算有个小小的成绩了. 图像的文字识别我拿验证码开刀,因为验证码稍微简单点,说说验证思路: 一.获取验证图片 二.程序加载要验证的字体库 三.程序加载需匹配的文字库(字 ...

  10. 发票编号识别、验证码识别 ,图像分割

    向AI转型的程序员都关注了这个号

最新文章

  1. POJ 2653 线段交
  2. 【转】浅析C语言的非局部跳转:setjmp和longjmp
  3. cnn_mnist_案例详解
  4. 【Python】核酸结果统计难?复旦博士生的操作火了......
  5. jdby mysql_06_dljd_mysql数据库常用操作
  6. SSL certificate problem: unable to get local issuer certificate 的解决方法
  7. HDU - 5692 Snacks(dfs序+线段树)
  8. 【渝粤教育】国家开放大学2018年秋季 0107-21T现代货币金融学 参考试题
  9. java 时间戳转换成时间_java 10位时间戳 转成时间
  10. 刷脸支付会逐步取代扫码成为主流支付方式
  11. Springboot URL Rewrite
  12. excel求回归直线方程的公式_如何用excel快速求线性回归方程?
  13. 网络攻击中常见掩盖真实IP的攻击方式及虚假IP地址追踪溯源方法
  14. prisma2.0和nexus搭建graphql后端(2)—nexus
  15. loading图片实现等待的动画
  16. android实现拍照及获取照片上传至接口
  17. Matlab命令行乱码问题
  18. 第29题:link与@import的区别
  19. PS快速调出天蓝色清新外景
  20. Linux 对于黏着位的理解

热门文章

  1. bzoj-2286 消耗战【虚树+倍增lca+单调栈】
  2. 二阶魔方万能还原公式_二阶魔方复原公式
  3. HBuilderX连接夜神模拟器
  4. 如何实现Android端的录屏采集
  5. 非常好用的节假日查询接口
  6. 在语雀中输入汉语拼音
  7. Java(实验四)Java标准类库-将一个字符串中的小写字母变成大写字母,并将大写字母变成小写字母
  8. 计算机改桌面存储地址,c盘桌面路径改为d盘(怎样更改电脑桌面存储路径)
  9. 创意:物品定位智能标签
  10. 重复抽样与不重复抽样的抽样平均误差大小?