原标题:中文项目:快速识别验证码,CNN也能为爬虫保驾护航

机器之心专栏

作者:Nick Li

随着卷积网络的推广,现在有各种各样的快捷应用,例如识别验证码和数学公式等。本文介绍了一个便捷的验证码识别项目,读者可以借助它快速训练模型与识别验证码。

本项目使用卷积神经网络识别字符型图片验证码,其基于 TensorFlow 框架。它封装了非常通用的校验、训练、验证、识别和调用 API,极大地减低了识别字符型验证码花费的时间和精力。

项目地址:https://github.com/nickliqian/cnn_captcha

1 项目介绍

1.1 关于验证码识别

验证码识别大多是爬虫会遇到的问题,也可以作为图像识别的入门案例。这里介绍一下使用传统的图像处理和机器学习算法,它们都涉及多种技术:

图像处理

前处理(灰度化、二值化)

图像分割

裁剪(去边框)

图像滤波、降噪

去背景

颜色分离

旋转

机器学习

KNN

SVM

使用这类方法对使用者的要求较高,且由于图片的变化类型较多,处理的方法不够通用,经常花费很多时间去调整处理步骤和相关算法。

而使用卷积神经网络,只需要通过简单的前处理,就可以实现大部分静态字符型验证码的端到端识别,效果很好、通用性很高。

这里列出目前常用的验证码生成库:

1.2 目录结构

1.3 依赖项

tensorflow

flask

requests

PIL

matplotlib

pip3install tensorflow flask requests PIL matplotlib

1.4 模型结构

2 如何使用

2.1 数据集

原始数据集可以存放在./sample/origin 目录中,为了便于处理,图片最好以 2e8j_17322d3d4226f0b5c5a71d797d2ba7f7.jpg 格式命名(标签_序列号. 后缀)。

2.2 配置文件

创建一个新项目前,需要自行修改相关配置文件:

图片文件夹

sample_conf.origin_image_dir = "./sample/origin/"# 原始文件

sample_conf.train_image_dir = "./sample/train/"# 训练集

sample_conf.test_image_dir = "./sample/test/"# 测试集

sample_conf.api_image_dir = "./sample/api/"# api接收的图片储存路径

sample_conf.online_image_dir = "./sample/online/"# 从验证码url获取的图片的储存路径

# 模型文件夹

sample_conf.model_save_dir = "./model/"# 训练好的模型储存路径

# 图片相关参数

sample_conf.image_width = 80 # 图片宽度

sample_conf.image_height = 40 # 图片高度

sample_conf.max_captcha = 4 # 验证码字符个数

sample_conf.image_suffix = "jpg"# 图片文件后缀

# 验证码字符相关参数

# 验证码识别结果类别

sample_conf.char_set = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',

'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

# 验证码远程链接

sample_conf.remote_url = "https://www.xxxxx.com/getImg"

具体配置的作用会在使用相关脚本的过程中提到。

2.3 验证和拆分数据集

执行下面的文件会校验原始图片集的尺寸和测试图片是否能打开,并按照 19:1 的比例拆分出训练集和测试集。所以需要分别创建和指定三个文件夹:origin,train,test 用于存放相关文件。

也可以修改为不同的目录,但是最好修改为绝对路径。文件夹创建好之后,执行以下命令即可:

python3verify_and_split_data.py

2.4 训练模型

创建好训练集和测试集之后,就可以开始训练模型了,这里不具体介绍 tensorflow 安装相关问题,读者可查看官网。确保图片相关参数和目录设置正确后,执行以下命令开始训练:

python3train_model.py

也可以调用类开始训练或执行一次简单的识别演示:

from train_model import TrainModel

from sample import sample_conf

# 导入配置

train_image_dir = sample_conf[ "train_image_dir"]

char_set = sample_conf[ "char_set"]

model_save_dir = sample_conf[ "model_save_dir"]

tm = TrainModel(train_image_dir, char_set, model_save_dir)

tm.train_cnn() # 执行训练

tm.recognize_captcha() # 识别演示

2.5 批量验证

使用测试集的图片进行验证,输出准确率。

python3test_batch.py

也可以调用类进行验证:

from test_batch import TestBatch

from sample import sample_conf

# 导入配置

test_image_dir = sample_conf[ "test_image_dir"]

model_save_dir = sample_conf[ "model_save_dir"]

char_set = sample_conf[ "char_set"]

total = 100 # 验证的图片总量

tb = TestBatch(test_image_dir, char_set, model_save_dir, total)

tb.test_batch() # 开始验证

2.6 启动 WebServer

项目已经封装好加载模型和识别图片的类,启动 web server 后调用接口就可以使用识别服务。启动 web server:

python3recognize_api.py

接口 url 为 http://127.0.0.1:6000/b

2.7 调用接口

使用 requests 调用接口:

url= "http://127.0.0.1:6000/b"

files= { 'image_file': (image_file_name, open( 'captcha.jpg', 'rb'), 'application')}

r= requests.post(url=url, files=files)

返回的结果是一个 json:

{

'time': '1542017705.9152594',

'value': 'jsp1',

}

文件 recognize_online.py 是使用接口在线识别的例子。

本文为机器之心专栏,转载请联系本公众号获得授权。返回搜狐,查看更多

责任编辑:

cnn验证码识别代码_中文项目:快速识别验证码,CNN也能为爬虫保驾护航相关推荐

  1. nlp 命名实体识别 算法_中文命名实体识别算法 Lattice LSTM

    中文命名实体识别 (NER) 算法按照输入的类型,可以大致分为 Character-based (字符) 和 Word-based (单词) 两种.这两种方法都存在一些缺陷,Character-bas ...

  2. cnn 预测过程代码_【交通+AI】使用CNN+LSTM实时出租车出行预测(上)

    这篇论文主要讲述了使用成都的出租车轨迹数据进行建模后生成出行强度图,使用CNN和LSTM进行学习之后通过反卷积生成出行强度预测图.非常适合上手这个领域,主要有两点原因:第一 出租车出行强度只包含了上车 ...

  3. python中文命名实体识别工具包_中文命名实体识别工具(NER)比较

    既然中文分词.词性标注已经有了,那下一步很自然想到的是命名实体识别(NER,Named-entity recognition)工具了,不过根据我目前了解到的情况,开源的中文命名实体工具并不多,这里主要 ...

  4. 图卷积网络进行骨骼识别代码_【骨骼行为识别】2s-AGCN论文理解

    Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition 论文链接: https:/ ...

  5. 代码实现中文命名实体识别(包括多种模型:HMM,CRF,BiLSTM,BiLSTM+CRF)

    作者 | 忆臻 地址 | https://zhuanlan.zhihu.com/p/100969186 专栏 | 机器学习算法与自然语言处理 代码实现中文命名实体识别(包括多种模型:HMM,CRF,B ...

  6. 手写体识别代码_【玩转腾讯云】使用API快速构建文字识别小工具之唐诗识别

    本篇推文共计1500个字,阅读时间约3分钟. 腾讯云-腾讯倾力打造的云计算品牌,以卓越科技能力助力各行各业数字化转型,为全球客户提供领先的云计算.大数据.人工智能服务,以及定制化行业解决方案.具体包括 ...

  7. 识别中文_中文场景文字识别大赛官方baseline

    7月5日,由中国人工智能学会主办.百度深度学习平台飞桨(PaddlePaddle)承办的2019第二届中国"AI+"创新创业大赛-中文场景文字识别技术创新大赛启动.本届大赛围绕中文 ...

  8. 车牌识别 代码_用31行代码构建车牌识别服务

    车牌识别 代码 A few days ago, when prowling around the internet, I came across a very interesting article, ...

  9. 卷积神经网络mnist手写数字识别代码_搭建经典LeNet5 CNN卷积神经网络对Mnist手写数字数据识别实例与注释讲解,准确率达到97%...

    LeNet-5卷积神经网络是最经典的卷积网络之一,这篇文章就在LeNet-5的基础上加入了一些tensorflow的有趣函数,对LeNet-5做了改动,也是对一些tf函数的实例化笔记吧. 环境 Pyc ...

最新文章

  1. HibernateTemplate 查询
  2. iOS 10 个实用小技巧(总有你不知道的和你会用到的)
  3. [SCOI2010]股票交易
  4. 思科面试题c语言,C语言面试题~总汇(基础题、嵌入式、微软、华为、思科……).doc...
  5. 6.6 数据集的存储与表达
  6. Rust-Cargo(3)
  7. CreateFileMapping共享内存时添加Global的作用
  8. 万立快速开发平台——软件制作大师
  9. centos配置单网卡双IP
  10. cc、gcc、g++、CC的区别概括
  11. Linux安装Flash脚本,Linux(CentOS)下的Shockwave Flash shell一键更新脚本
  12. Home_W的握手问题(思维+打表)
  13. JS学习(this关键字)
  14. 激光雷达是什么?一文带你读懂激光雷达
  15. 数学分析:集合理论----习题
  16. SqlServer2008R2软件下载安装教程
  17. 基于QT的超市信息管理系统
  18. MuMu模拟器的安装
  19. 苹果系统虚拟机无usb服务器,Mac上Vmware虚拟机无法识别USB Key怎么办?Mac虚拟机无法识别USB Key解决方法...
  20. 应用程序无法正常启动(0x000007b)或者找不到dll文件(以vcruntime140d.dll为例)的原因原理分析和解决方法(亲测已解决)

热门文章

  1. php 创建目录_使用SMB绕过PHP远程文件包含限制
  2. 【Ubuntu】Ubuntu16.04安装 搜狗输入法 史上最详细
  3. hd-sdi转hdmi转换器产品规格参数及接口定义详解
  4. [渝粤教育] 广东-国家-开放大学 21秋期末考试财务管理10164k2 (2)
  5. 物联网无线数传通信模块:工业级高精度电源模块
  6. 让电流检测更精确的AMR技术
  7. vba执行linux命令,如何使用vba的shell()运行参数的.exe?
  8. 计算机组成原理中7421,计算机组成原理07421
  9. mysql 未知列_mysql – ‘字段列表’连接中的未知列’..’
  10. python123循环结构_来学Python啦,大话循环结构~