python验证码重叠_用Python机器学习搞定验证码

写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:

图像类

滑动类

点击类

语音类

今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。相应的,验证码识别大体可以分为下面几个步骤:

灰度处理

增加对比度(可选)

二值化

降噪

倾斜校正分割字符

建立训练库

识别

由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码,这样做的好处就是可以有大量的知道明确结果的数据集。当需要真实环境下需要获取数据时,可以使用结合各个大码平台来建立数据集进行训练。

生成验证码这里我使用Claptcha这个库,当然Captcha这个库也是个不错的选择。

为了生成最简单的纯数字、无干扰的验证码,首先需要将claptcha.py的285行_drawLine做一些修改,我直接让这个函数返回None,然后开始生成验证码:

这里需要注意ubuntu的字体路径,也可以在网上下载其他字体使用。生成验证码如下:

可以看出,验证码有形变。对于这类最简单的验证码,可以直接使用谷歌开源的tesserocr来识别。

首先安装:

然后开始识别:

可以看出,对于这种简单的验证码,基本什么都不做识别率就已经很高了。有兴趣的小伙伴可以用更多的数据来测试,这里我就不展开了。

接下来,在验证码背景添加噪点来看看:

生成验证码如下:

识别:

效果还可以。接下来生成一个字母数字组合的:

生成验证码如下:

第3个为小写字母o,第4个为大写字母O,第5个为数字0,第6个为小写字母z,第7个为大写字母Z,最后一个是数字2。人眼已经跪了有木有!但现在一般验证码对大小写是不做严格区分的,看自动识别什么样吧:

人眼都跪的计算机当然也废了。但是,对于一些干扰小、形变不严重的,使用tesserocr还是十分简单方便的。然后将修改的claptcha.py的285行_drawLine还原,看添加干扰线的情况。

加了条干扰线就完全识别不出来了,那么有没有什么办法去除干扰线呢?

虽然图片看上去是黑白的,但还需要进行灰度处理,否则使用load()函数得到的是某个像素点的RGB元组而不是单一值了。处理如下:

处理后的图片如下:

可以看出处理后图片锐化了很多,接下来尝试去除干扰线,常见的4邻域、8邻域算法。所谓的X邻域算法,可以参考手机九宫格输入法,按键5为要判断的像素点,4邻域就是判断上下左右,8邻域就是判断周围8个像素点。如果这4或8个点中255的个数大于某个阈值则判断这个点为噪音,阈值可以根据实际情况修改。

处理后的图片如下:

好像……根本没卵用啊?!确实是这样的,因为示例中的图片干扰线的宽度和数字是一样的。对于干扰线和数据像素不同的,比如Captcha生成的验证码:

从左到右依次是原图、二值化、去除干扰线的情况,总体降噪的效果还是比较明显的。另外降噪可以多次执行,比如我对上面的降噪后结果再进行依次降噪,可以得到下面的效果:

再进行识别得到了结果:

另外,从图片来看,实际数据颜色明显和噪点干扰线不同,根据这一点可以直接把噪点全部去除,这里就不展开说了。

第一篇文章,先记录如何将图片进行灰度处理、二值化、降噪,并结合tesserocr来识别简单的验证码,剩下的部分在下一篇文章中和大家一起分享。

作者:roy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ecshop 函数列表大全

ecshop 函数列表大全 所有函数功能说明:lib_time.phpgmtime()P: 获得当前格林威治时间的时间戳 /$0server_timezone()P: 获得服务器的时区 /$0local_mktime($hour NULL , $minute NULL, $second NULL, $month NULL, $day NULL, $year NULL)P: 生成一个用户自定义时区日期的…

shell环境变量以及set,env,export的区别

一.shell环境变量的分类以及set env export的区别: set:显示(设置)shell变量 包括的私有变量以及用户变量,不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样 env:显示(设置)用户变量变量 export:显示(设置)当前导出成用户变量的shell变量。 举…

linux 字符串截取_linux下可执行文件分析

一 背景也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑。分析的二进制执行文件为linux下的可执行文件。二 常用二进制文件静态分…

Objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)...

先来定义一个Human父类 定义部分&#xff1a; 1234567891011121314151617181920 //// Human.h// OOP//// Created by jimmy.yang on 11-2-9.// Copyright 2011 __MyCompanyName__. All rights reserved.// #import <Foundation/Foundation.h> interface Human : NS…

介绍最全的LVS负载均衡技术

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率&#xff0c;将请求均衡地转移到不同的服务器上执行&#xff0c;且调度器自动屏蔽掉服务器的故障&#xff0c;从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透…

linux 版本_Linux动态库版本号作用机制

熟悉linux的都知道&#xff0c;linux的动态库如果有版本号的话&#xff0c;一般是libsample.so.x.y.z这样的名字。x.y.z对应的就是major.minor.release(即主.次.发布)版本号Major&#xff1a;大版本更新&#xff0c;前后都不兼容(比如移除api&#xff0c;又新增api)Minor&#…

信息系统项目管理系列之九:项目质量管理

信息系统项目管理系列之九&#xff1a;项目质量管理 信息系统项目管理系列之九&#xff1a; 项目质量管理 发布日期&#xff1a;2011年4月9日 星期六 作者:EricHu 说明&#xff1a;本文属作者的读书笔记。 勤能补拙、笨鸟先飞。 本篇主要内容如下&#xff1a; 项目质量管…

arcgis在面内创建随机点

在数据管理工具下选择要素类&#xff0c;在要素类下选择创建随机点

python tkinter listbox_Python3 tkinter基础 Listbox for+insert 将list中元素导入listbox中

Python : 3.7.0OS : Ubuntu 18.04.1 LTSIDE : PyCharm 2018.2.4Conda : 4.5.11typesetting : Markdowncode"""Author : 行初心Date : 18-10-1Blog : www.cnblogs.com/xingchuxinGitee : gitee.com/zhichengjiu"""from tkinter import *def main(…

Apple`s Steve Jobs Has Reshaped(重塑) the Tech World: 10 Ways He Did It

A new book is in the works that promises to shed(除掉, 使脱落, 使流出, 使清晰) more light on Apple. Dubbed(命名的, 配音的, 译制的) “iSteve: The Book of Jobs,” the book, which is written by Walter Isaacson, is an authorized biography of Apple co-founder S…

python中osgeo库使用教程链接

1. 地理数据处理软件包GDAL简介 2. GDAL python教程&#xff08;1&#xff09;——用OGR读写矢量数据 3. GDAL python教程&#xff08;2&#xff09;——几何形状geometry与投影projection4. GDAL python教程&#xff08;3&#xff09;——过滤器&#xff0c;简单的空间分析&…

TrueFFS原理

TrueFFS原理 引用TrueFFS原理及其在CF卡上的实现的部分内容 “1、Wear-Leveling 闪速存储器不能无限次重复使用。它的每个扇区的擦除次数虽然很大&#xff0c;但却有限&#xff1b;因此&#xff0c;随着使用次数的加长&#xff0c;它最终会变成只读状态&#xff0c;所以应该尽…

winform 判断控件有没有被遮挡_编程入门基础之 winform(2)

在编程入门1中&#xff0c;我们通过WINFORM等控件画出了登录界面&#xff0c;我们今天写登录界面的登录按钮事件。装修预算小程序登录按钮事件在上图中&#xff0c;我们看到了&#xff0c;有几个判断 &#xff0c;在C#中&#xff0c;if ,else是作为条件判断语句来使用。条件判断…

利用python读取点矢量对应栅格值

每行代码都有详细注解 所需库 # GDAL是栅格和矢量地理空间数据格式的转换器库 # 旧版本加载库的方法 #import gdal,gdalconst # from 语句让你从模块中导入一个指定的部分到当前命名空间中 # GDAL数据驱动,与OGR数据驱动类似 gdal是读取栅格数据 ogr是读取矢量数据 # 查看支持…

在CF卡上实现TrueFFS

CF卡是一种基于Flash技术的容量大、携带方便的存储介质&#xff0c;已在嵌入式系统等领域得到广泛的应用&#xff1b;但是&#xff0c;有限的擦写次数极大地限制了CF卡的使用寿命。TrueFFS通过一系列算法&#xff0c;能够延长CF卡的使用寿命&#xff0c;提高CF卡的使用效率。文…

python中安装opencv一直说不是内部或外部文件_Window系统下Python如何安装OpenCV库

关于OpenCV简介OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接口&#xff0c;实现了图…

解决input设置背景后,在ie7下浏览内容过长背景跟着滚动

先发发牢骚&#xff0c;万恶的IE啊。这么点问题害我走弯路&#xff0c;浪费时间&#xff0c;浪费生命。本以为加上background-attachment:fixed;问题就没了&#xff0c;结果问题依然存在&#xff0c;查资料说好像是ie bug。无语&#xff0c;天杀的IE&#xff0c;谁叫人家IE是老…

python打开文件中文名_windows下Python打开包含中文路径名文件

windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存。打开文件的函数中使用诸如open(filename.encode(‘gbk‘))可以很好的解决。#coding:utf8if __name__ ‘__main__‘:srcfile r"D:/测试路径/测试文件.txt"f open(srcfile.deco…

利用python读取栅格数据

代码具有详细说明注释 所需库 #gdalconst中的常量都加了前缀&#xff0c;力图与其他的module冲突最小 from osgeo import gdal,gdalconst from osgeo import gdal_array as ga # 用于引入一个模块的同时为该模块取一个别名 from osgeo.gdalconst import GA_ReadOnly# 开始对栅…