python验证码识别实战
时间:2022-04-21
本文章向大家介绍python验证码识别实战,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
陆陆续续的学习了验证码的灰度、二值化、分割等方法,还了解了机器学习中最基本的3个分类方式——KNN、决策树、朴素贝叶斯。基于这些,今天结合这些工具来写一个简单的验证码识别程序,本来想使用现有的库来生成验证码,但无意间发现了之前写某个程序时下载的200个验证码,正好可以拿来练手。另外,虽然之前已经实现了上面3种算法,但这里还是会使用 这个强大的三方库,学习原理是为了知其所以然,有现成工具还是要拿来用的。
原始验证码如图所示:
可以看出,字符红色,干扰线绿色,字符之间没有粘连扭曲,只包含数字和大写英文,经过查看后每个字符宽30像素,可以说是一种很简单的验证码。
首先去掉绿色的干扰线:
使用函数把符合判断条件的元素改成白色,接下来就是分割、二值化等操作,之前有记录过不再赘述:
处理后,手动分类到不同的文件夹中(使用实际验证码就是坑在这点,需要手动打码,所以数据集较小),总共200个验证码切分出800个字符:
然后就是加载数据进行训练了:
输出如下:
没想到决策树在这个情况中成功率可以达到0.79,最看好的贝叶斯居然是最低的。当然,这里仅仅演示都使用了默认参数进行训练,实际使用中还需要更多的进行调参。
虽然这个程序还很low,但总算把之前学习的各个知识点结合来起来。另外关于阈值的选取,有一个叫做大津算法(OTSU),以后有机会可以试试看:
最后把手工标记好的数据传到githubhttps://github.com/shenyushun/data_captchar上,有兴趣的可以拿去玩。
- struts2: 通过流输出实现exce导出
- Google的数据交换协议:GData (Google Data APIs Protocol)
- C# 内部类
- 四字母.com域名均以五位数结拍
- mybatis 3.2.7 与 spring mvc 3.x、logback整合
- spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置
- struts2使用Convention Plugin在weblogic上以war包部署时,找不到Action的解决办法
- 使用xfce4桌面系统
- 号外!号外!Python纳入高考内容了!人工智能时代就要来临了!
- 高颜值!域名5h.net和jb.cc纷纷易主
- 认识ASP.NET 5项目结构和项目文件xproj
- weblogic下部署应用时slf4j与logbak冲突的解决办法
- 介绍一位OWin服务器新成员TinyFox
- javascript: 带分组数据的Table表头排序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Centos7如何备份和还原Redis数据的方法
- linux contos6.8下部署kafka集群的方法
- 基于Electron的touchbar开发
- Redis数据结构-简单动态字符串
- 使用new Function创建async方法
- Canvas系列(14):实战-小球碰撞
- IOC CreateBean
- Hugo搭建博客(二)— Hugo+Github Pages搭建博客
- 创建bean的实例
- Spring-IOC-默认标签的解析
- Spring-IoC -加载 Bean-总览
- Spring-IOC-创建Bean-属性填充
- vi与vim如何修改tab为4个空格方法示例
- Linux使用Crontab定时访问某个路由地址的方法
- jmeter 在linux服务器的安装和运行教程图解