专栏首页北京马哥教育20行 Python 代码实现验证码识别

20行 Python 代码实现验证码识别

一、探讨

识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域……

简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正。对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等。

在破解验证码中需要用到的知识一般是 像素,线,面等基本2维图形元素的处理和色差分析。常见工具为:

  • 支持向量机(SVM)
  • OpenCV
  • 图像处理软件(Photoshop,Gimp…)
  • Python Image Library

二、PIL安装

PIL: Python Imaging Library, 是Python平台的图像处理标准库,功能非常强大。

在Debian/Ubantu Linux下直接通过apt安装:

$sudo apt-get install python-imaging

Max和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好:

$ sudo easy_install PIL

Windos平台可以直接去PIL官网下载exe安装包。http://pythonware.com/products/pil/

注:官网提供的安装包是32位的,64位系统请前往这里 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow 下载替代包pillow。

三、一般思路

验证码识别的一般思路为:

1、图片降噪

2、图片切割

3、图像文本输出

3.1 图片降噪

所谓降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵最好。

对于彩色背景的验证码:每个像素都可以放在一个5维的空间里,这5个维度分别是,X,Y,R,G,B,也就是像素的坐标和颜色,在计算机图形学中,有很多种色彩空间,最常用的比如RGB,印刷用的CYMK,还有比较少见的HSL或者HSV,每种色彩空间的维度都不一样,但是可以通过公式互相转换。在RGB空间中不好区分颜色,可以把色彩空间转换为HSV或HSL。色彩空间参见 http://baike.baidu.com/view/3427413.htm

验证码图片7039.jpg:

1、导入Image包,打开图片:

from PIL import Image im = Image.open('7039.jpg')

2、把彩色图像转化为灰度图像。RBG转化到HSI彩色空间,采用I分量:

imgry = im.convert('L') imgry.show()

灰度看起来是这样的:

3、二值化处理

二值化是图像分割的一种常用方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化(一般设置为0-1)。根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值,这里选用比较简单的固定阈值。

把像素点大于阈值的设置,1,小于阈值的设置为0。生成一张查找表,再调用point()进行映射。

threshold = 140 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) out = imgry.point(table, '1') out.show()

处理结果看起来是这样的:

3.2 图片切割

识别验证码的重点和难点就在于能否成功分割字符,对于颜色相同又完全粘连的字符,比如google的验证码,目前是没法做到5%以上的识别率的。不过google的验证码基本上人类也只有30%的识别率。本文使用的验证码例子比较容易识别。可以不用切割,有关图片切割的方法参见这篇博客:http://www.cnblogs.com/apexchu/p/4231041.html

四、利用pytesser模块实现识别

pytesser是谷歌OCR开源项目的一个模块,在python中导入这个模块即可将图片中的文字转换成文本。

链接:https://code.google.com/p/pytesser/

pytesser 调用了 tesseract。在python中调用pytesser模块,pytesser又用tesseract识别图片中的文字。

4.1 pytesser安装

  • 如果没有安装PIL,请到这里下载安装:http://www.pythonware.com/products/pil/
  • 安装pytesser,下载地址:http://code.google.com/p/pytesser/ ,下载后直接将其解压到项目代码下,或者解压到python安装目录的Libsite-packages下,并将其添加到path环境变量中,不然在导入模块时会出错。
  • 下载Tesseract OCR engine:http://code.google.com/p/tesseract-ocr/ ,下载后解压,找到tessdata文件夹,用其替换掉pytesser解压后的tessdata文件夹即可。
  • 另外如果现在都是从PIL库中运入Image,没有使用Image模块,所以需要把pytesser.py中的import Image改为from PIL import Image, 其次还需要在pytesser文件夹中新建一个__init__.py的空文件。

ps:如果觉得后面两步比较麻烦,可以直接到云盘中下载 http://yun.baidu.com/s/1jHJvNiI ,操作如步骤2。

4.2 调用pytesser识别

pytesser提供了两种识别图片方法,通过image对象和图片地址,代码判断如下:

from PIL import Image from pytesser import pytesser image = Image.open('7039.jpg') print pytesser.image_file_to_string('7039.jpg') print pytesser.image_to_string(image)

同时pytesser还支持其他语言的识别,比如中文。具体参见:http://blog.csdn.net/hk_jh/article/details/8961449

来源: j_hao104 my.oschina.net/jhao104/blog/647326

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能调优概述,这是一篇最通俗易懂性能调优的总结!

    精彩早知道 作者概述 什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) ...

    小小科
  • 像看电影一样看Python程序运行:Livepython

    ? 像看电影一样看Python程序运行 注意: Livepython目前是alpha版本的软件,它不会处理很多边缘情况,并且功能在将来也可能会改变 Live...

    小小科
  • 性能调优概述,这是一篇最通俗易懂性能调优的总结!

    硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位)。

    小小科
  • Python验证码识别:利用pytesser识别简单图形验证码

    来源: j_hao104 my.oschina.net/jhao104/blog/647326 一、探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图...

    程序员宝库
  • 美国知名创业孵化器YCombinator发布孵化企业估值TOP100强!(附企业列表)

    2018年10月16日,美国知名孵化器YCombinator发布了自2005年以来其支持的创业公司中最成功的公司名单。其中值得关注的是: 1、YC孵化出来的估值...

    点滴科技资讯
  • Elasticsearch 数据搜索篇 转

    这种方式会把查询的内容放入body中,会造成一定的开销,但是易于理解。在平时的练习中,推荐这种方式。

    双面人
  • 工业互联网推动制造业高质量发展研讨会在京召开

    2019年2月23日,由中国工业互联网研究院组织召开的工业互联网推动制造业高质量发展研讨会在北京成功召开。

    量子位
  • 雨一直下,双偏振该怎么抓住它

    最近雨一直下,江淮地区“梅超疯”肆虐,6月2日以来,中央气象台更是连续发布暴雨预警,多地因暴雨灾害损失严重,安徽黄山歙县高考因暴雨受严重影响,各地防汛形势严峻。

    用户1247399
  • Elasticsearch 数据搜索篇·【入门级干货】

    ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API。本篇就通过一些简单的搜索命令,帮助你理解ES的相关应用。虽然不能让你理解ES的原...

    用户1154259
  • 浅析DDOS攻击防护思路

    近年来已经发生了多起针对全球型机构大规模的DDoS攻击事情,使得DDoS攻击又重新回到了大众的视野中来,引起了轩然大波。虽说大型机构都按照要求建立了本地以及运营...

    墨者安全科技

扫码关注云+社区

领取腾讯云代金券