图像验证码识别(九)——训练和识别

2023-11-20

前面讲到已经把所有的字符经过去干扰、分割和归一化得到标准大小的单个字符,接下来要做的就是识别验证码了。现在要做的基本上也就和OCR没什么区别了,因为得到的字符已经是尽可能标准的了。下面的识别分为两个步骤,第一步先是特征值的提取,第二步是SVM训练。

一、特征值提取

首先要说的是我当时在做这个的时候,还没有了解“主成分分析”,所以在提取特征值的时候用的是比较简单的方法,就是简单的提取像素值来解决的。具体来说,由于前面归一化的字符每个都是16*16大小的,可以将字符图片等分为16个子区域,每个区域是4*4的,然后统计每个区域内部黑色像素(字符像素)的个数,这样可以得到16个数值,然后按照从左到右,从上到下来的顺序进行排列,可以得到一个16维的数据,这样依赖就将256维的原数据降到了16维。

现在要做的就是如果想验证哪个网站的验证码,就写个爬虫爬该网站的验证码,爬个几百张然后对每一张验证码上的字符进行标记,然后按照前面的步骤一步一步预处理然后提取特征值,将每个字符的特征值和其标记的字符写入到数据文件中,在这里我取了某网站的验证码一共250张,每张有4个字符,字符集只有大写字母26个和0-9十个数字,这样得到了1000条数据,由于字符存在粘连状况,因此在字符分割那一部分并不是100%成功,最后有十几张验证码图片分割失败,所以最终得到的数据集个数只有900多个。部分数据如下:

[cpp]  view plain  copy
  1. D,0,4,7,12,9,9,4,12,7,8,4,12,0,8,8,2  
  2. N,0,1,5,6,9,15,7,2,0,5,14,7,6,9,7,3  
  3. Y,3,1,0,0,5,12,9,8,3,12,4,1,5,0,0,0  
  4. 2,0,0,0,1,7,2,7,12,8,9,8,8,0,3,0,0  
  5. Z,0,0,1,8,13,1,10,12,12,11,1,12,5,1,0,2  
  6. I,0,0,0,0,0,1,4,6,7,11,7,3,0,0,0,0  
  7. Z,0,0,1,6,12,1,11,12,12,12,2,12,6,1,0,0  
  8. 5,0,0,1,0,6,12,4,9,8,7,9,8,2,0,0,0  
  9. G,0,9,8,3,8,7,5,11,12,1,10,11,3,6,9,1  
  10. 7,0,0,0,0,8,1,6,11,9,10,6,0,2,1,0,0  
  11. M,0,4,7,10,8,16,11,9,0,4,12,7,9,14,13,8  
  12. D,0,1,4,5,11,10,9,12,12,1,3,10,5,11,11,1  
  13. 3,0,0,1,1,6,2,2,10,10,9,12,8,0,2,0,0  
  14. F,0,0,4,6,7,13,12,4,8,8,8,0,5,3,2,0  
  15. N,0,0,5,6,9,15,6,2,0,5,11,7,7,10,5,3  
  16. X,1,0,0,7,7,11,12,4,3,13,10,8,9,2,0,1  
  17. 2,0,0,0,2,8,4,6,13,9,11,9,7,2,3,0,0  
  18. P,1,0,4,5,11,12,11,4,12,6,8,0,4,10,1,0  
  19. J,0,0,2,2,0,0,3,13,4,10,11,6,3,2,0,0  
  20. V,4,4,3,0,2,6,9,16,0,7,12,4,6,6,0,0  
  21. 7,1,0,0,0,8,5,10,9,12,8,0,0,1,0,0,0  
  22. W,9,12,12,9,4,8,11,1,9,10,11,9,4,9,9,2  

数据集每行代表一条数据,第一个字母或数字是该字符的标记结果,后面紧跟着16个数字是其特征值。

二、机器学习识别

现在终于到了验证码识别的最后一步了,有了前面的数据集,就可以进行训练了。我在这里使用的分类器是SVM,由于整个项目都是用OpenCV做的,而OpenCV正好提供SVM的库,因此就直接拿来用了。OpenCV的SVM是基于libSVM的,有关SVM(支持向量机)的知识我也了解的不是太多,这里不再赘述,有兴趣的可以去找找资料看看。在OpenCV的源代码工程里,可以找到怎么使用OpenCV SVM的demo,这里就直接拿来用了,代码如下:

[cpp]  view plain  copy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像验证码识别(九)——训练和识别 的相关文章

随机推荐

  • 手动搭建torch2.0环境

    一 下载相关whl 1 从Previous PyTorch Versions PyTorch检查相互版本是否兼容 否则会出现无法使用cuda的问题 2 从https download pytorch org whl torch stable
  • 阶乘质因子分解(唯一分解定理)

    阶乘质因子分解 题目描述 对N 进行质因子分解 输入输出格式 输入格式 输入数据仅有一行包含一个正整数N N lt 10000 输出格式 输出数据包含若干行 每行两个正整数p a 中间用一个空格隔开 表示N 包含a个质因子p 要求按p的值从
  • Python JS逆向篇(一)

    Python JS逆向篇 一 效果实现 思路 最后一步 逆向 p a HmacSHA256 t s a state commonStore cupid sign key JS实现 py实现 先苦后甜 逆向主题 51job请求头headers
  • 【NodeJS】Express框架快速入门

    简介 作为前端开发 Nodejs已经成了很多公司对我们这一岗位的硬性要求 而 Express 框架则是其中知名度最高 也是最受欢迎的Nodejs开发框架 它帮助我们封装了Nodejs底层的API 屏蔽了大量的繁琐的细节 让我们只需要关注业务
  • Mybatis框架解析

    一 Mybatis框架简介 MyBatis框架是一个开源的数据持久层框架 它的内部封装了通过JDBC访问数据库的操作 支持普通的SQL查询 存储过程和高级映射 几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索 MyBatis作为
  • PAM机制

    一 PAM简介 Linux PAM linux可插入认证模块 是一套共享库 使本地系统管理员可以随意选择程序的认证方式 换句话说 不用 重新编写和 重新编译一个包含PAM功能的应用程序 就可以改变它使用的认证机制 这种方式下 就算升级本地认
  • 无监督低照度图像增强网络ZeroDCE和SCI介绍

    目录 简介 Zero DCE 算法介绍 模型代码 无监督loss介绍 小结 Self Calibrated Illumination SCI 模型介绍 无监督loss介绍 小结 总结 简介 当前有较多深度学习的方法来做图像效果增强 但多数都
  • 量化投资学习-31:如何评判专家的战法是否真的有效还是瞎蒙?

    每逢牛市 都会冒出各种股神 各种专家 在牛市大趋势的东风下 各种专家鱼龙混杂 如何如何评判专家的战法是否真的有效还是瞎蒙 所谓牛市 就是高点越来越高 即使在任何一个时间点买入 短暂的亏损后 股价也再创新高 一样能赚钱 因此 在牛市的大势下
  • 三个闭环负反馈PID调节系统:电流环、速度环和位置环的关系

    三个闭环负反馈PID调节系统 电流环 速度环和位置环的关系 伺服电机为了达到生产的精准控制 电机一般采用三环控制 这主要是为了使伺服电机系统形成闭环控制 所谓三环就是3个闭环负反馈PID调节系统 电压映射电流变化 电流映射转矩大小 转矩大小
  • Sql语句中的DML语句

    一 什么是DML语句 DML语句就是数据库操作语句 二 DML语句的分类 Insert 插入 Update 修改更新 Delete 删除 Select 选择 三 insert语句 Delete from 表名名称 where 条件 DELE
  • windows下配置Mysql-5.7.9服务

    第一步 从官方网站下载 mysql 5 7 9 winx64 zip 第二步 解压缩 在根目录下复制my default ini 改名为my ini 第三步 初始化mysql目录 bin mysqld initialize user mys
  • 在渗透测试中,扫描器原理是什么

    在渗透测试中 扫描器原理是什么 渗透测试中的扫描器是一种自动化工具 用于识别目标系统中的漏洞 弱点或配置错误 扫描器通过发送特定的网络请求或使用其他技术手段来检查目标系统的安全性 并生成报告以供分析和修复 以下是扫描器的一般原理 1 信息收
  • 一眼看懂promise与async await的区别

    promise方法 let p1 new Promise resolve reject gt setTimeout gt resolve 我是p1 4000 let p2 new Promise resolve reject gt setT
  • 12.HTML5下一代的HTML标准介绍与初识尝试

    关注回复 学习交流群 加入 安全开发运维 答疑交流群 请朋友们 多多点击文中的广告 支持作者更新更多文章 目录 本文为作者原创文章 为尊重作者劳动成果禁止非授权转载 若需转载请在 全栈工程师修炼指南 公众号留言 或者发送邮件到 master
  • 运维之Linux发行版和容器镜像网站及开源软件收集

    关注 WeiyiGeek 公众号 将我设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 0x00 概述 0x01 镜像源网站 国内镜像 国内高校 0x02 发行版官网 CentOS kail Debian Ubuntu
  • 客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法

    今天在用VMware安装CentOS7报了这个错误 在网上找半天都没解决 最后换一个地址下的镜像就能正常安装了 Index of centos 7 9 2009 isos x86 64
  • 12_Linux ARM架构_安装JDK8-银河麒麟V10(Kylin Linux Advanced Server V10 )操作系统

    12 Linux ARM架构 安装JDK8 银河麒麟V10 Kylin Linux Advanced Server V10 操作系统 1 官网下载aarch64架构jdk包 2 linux服务器中创建java文件夹 方便后期快速寻找 3 将
  • DevC++如何改成中文?

    DevC 如何改成中文 1 点击Tools工具 2 选择环境选项 3 选择简体中文 4 点击确定
  • 深入理解Google Cast(一)基本概念

    什么是google cast google cast允许用户将手机上的内容投影到TV上 然后用户可以将手机作为遥控器来控制TV上的媒体播放 Google cast SDK用于扩展你的app 使其支持google cast功能 一个Cast
  • 图像验证码识别(九)——训练和识别

    前面讲到已经把所有的字符经过去干扰 分割和归一化得到标准大小的单个字符 接下来要做的就是识别验证码了 现在要做的基本上也就和OCR没什么区别了 因为得到的字符已经是尽可能标准的了 下面的识别分为两个步骤 第一步先是特征值的提取 第二步是SV