教你使用Python生成captcha

  大家好!今天和大家分享的很有趣的东西是captcha,没错,就是那个俗称验证码的东西。

  CAPTCHA项目是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称,本少也万万没想到,这玩意居然是这么直译和缩写的有木有?话说,卡内基梅隆大学还试图将其注册为商标呢,不过幸好2008年时请求被驳回了。

  大家在登录各种信息管理系统时,常常需要输入各式各样的验证码。而这种区分人和机器的玩意,一方面可用于研究院所中高大上的图灵测试实验,另一方面也可用于作为如防爬虫爬取网页等实际应用。准确语言来说,CAPTCHA的目的是区分计算机和人类的一种程序算法,是一种区分用户是计算机和人的计算程序,这种程序必须能生成并评价人类能很容易通过但计算机却通不过的测试。道高一尺,魔高一丈,以爬虫技术为例,现在已经衍生出“爬虫”、“反反爬虫”、“反反反爬虫”等概念了(晕)。

  伴随着这种人机博弈无硝烟战争的愈演愈烈,网页上CAPTCHA已经从最开始的那种简单的随机数输入,到各种歪七八扭的倾斜角度,再到简单的加减乘除,再到12306这么变态的验证码。很明显,captcha的这种进步挡住了大量的爬虫机器人,但不得不说,也挡住了大量的人。作为90后叔叔,我有时候头晕算不准加减乘除,有时眼神不好还辨别不出12306网站的“开心对对碰”验证码,那年纪大一点的怎么办。尽管这么说,但不得不说,CAPTCHA的存在还是带来很多积极的一面的。闲话不多说,进入正题。

  由于工作需要,最近本少在做OCR方向的探索。为了了解目前已有OCR开源算法的效果情况,我们需要大量图片进行文字检测和识别,所以最近在网上现学现用,学了几种用Python制作captcha的简单方法。现在把代码全部粘贴在这,一方面是抛砖引玉,另一方面也希望有经验的同学可以交流交流。

代码说明:

  该项目主要是利用三种不断进阶难度的captcha算法,进行captcha生成。在执行时,读者不需要自建文件件,运行程序后,它会自建三个文件分别用于保存各自相应方法的captcha以及captcha列表。

环境:Python2.7

依赖库:PIL(Python Imaging Library)

tips:Ubuntu系统下可直接通过sudo apt-get install python-imaging进行安装。

三种类型的captcha

1、固定位数

  这种captcha是直接利用随机颜色、随机数字和随机字母进行组合,看起来非常简单,非常清晰。

2、固定位数+双线+模糊

  在第一种captcha方法的基础上,增加了两条干扰斜线以及对整体captcha进行了模糊处理,难度增加,说实话,我有时眼神不好都已经认不出来了。

3、固定位数+双线+扭曲+模糊

  在第二种captcha的基础上,增加了对图片的扭曲(映射),难度进一步提升。

代码部分

  到此为止,我的captcha样本集已经生成,接下来是时候展现OCR算法真正的技术了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G0PXVB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券