- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python项目实战篇-常用验证码标注和识别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
大家好,我是Snowball.
今天给大家分享的实战项目是常用验证码标注&识别,从想法诞生到实现思路,再到编码实战的整体过程,这个过程我前后整理了上万字,计划分章节来发布。言归正传,一起来看看今天的内容吧!今天这篇内容主要讲解这篇文章的创作灵感、需求分析和实现思路.
首先介绍一下验证码基本概念,验证码全称为全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。验证码的主要目的是强制人机交互来抵御机器自动化攻击,为了确保服务器系统的稳定和用户信息的安全,大部分网站采用了验证码技术。图片验证码是目前最常用的一种,本文也主要讨论这种验证码的识别.
最初,图片验证码识别的想法最初源于12年的大学阶段,当时的学校教务系统每次抢课系统就崩溃,而且还要特定时间段跟其他同学一起抢指定课程,基本抢不到自己想修的课程,那时候就想绕过系统图片验证码通过代码实现自动抢课,鉴于当时自己编码能力和技术能力有限,机器学习、神经网络相关框架效果较差,最后以各种条件限制实现不了告终~~ 。
XDM,等等,故事还没完,时间回到2021年,做为一名勤于搬砖、善于思考学习的程序猿,在经过几年社会的毒打后,想着以现在自己的项目经验、学习能力和编码功底,以及行业内机器学习、神经网络等AI技术的发展,能不能把多年以来的想法给实现,达到图片验证码高正确率识别预测,训练一个高度可用的CNN模型。在做项目之前经过笔者几天的资料查询过程中,确信高可用的验证码识别模型想法是可以做的,于是开启了CNN神经网络等技术前置知识的漫长学习过程.
几个月过后,项目编码实战出炉,效果嘛,自我感觉还行,基本达到高可用,500张训练数据图,CNN模型单个字符97%以上准确率.
这里先贴项目的工程Git地址,有基础的同学可以去直接拉取项目下来把玩源码:
好的,XDM,如果到这里还有兴趣往下看的话,那么就请跟随结合笔者的学习、编码实战过程来了解常用的验证码识别方法和过程.
说到图片验证码识别功能,这个功能初步想想也简单,网上搜一下关键词,相关文章和开源项目非常多。以下是github搜索结果:
乍一看,好像真有免费的午餐,随便下载个CNN-python项目,改几行代码,然后开始疯狂标注数据过程,就能跑出来模型.
笔者自己最初也是这么想的,只求简单粗暴,于是弄了几个项目下来跑了之后,发现代码是可以用,但是效果非常拉跨,单个字符识别正确率很低,70%不到,4-6个字符那正确率就更低了,基本上达不到高正确率,可用性非常一般。对于一个有追求的程序猿,不可能这么就完事了,于是,这就有了这个项目的整活.
在使用这些开源项目的过程中,发现下载的项目实现过程大都分为2种思路,第一种无需图片切割,直接数据标注训练模型;第二种为图片验证码进行字符切割,然后为单个字符进行分类训练。项目执行的具体过程就不演示了,有兴趣的读者开源自行捣鼓,下面就是笔者自己对2种思路适用方式的实践思考总结:
1. 第一种无需图片切割 。
优点:简单粗暴,通用性强,直接用各种卷积神经网络模型硬怼图片验证码提取特征,适合知道验证码生成的正向代码过程,用代码生成图片验证码数据给模型训练.
缺点:数据量小时模型拟合效果差,需要大量人工标注数据,不太适合不知道验证码生成规则,少量标注数据.
2. 第二种进行字符切割 。
针对验证码生成规则,分析验证码各种背景干扰、噪声点像素、字体形变和累叠、字符位置随机及个数不定、反色等情况,对图片逆向处理,达到局部字符可切割,降低卷积模型层次,降低数据标注量,实现字符分类.
优点:可针对单一图片验证码做特殊预处理,可实现部分字符切割,针对字符小图进行分类训练,小批量数据标注就可以训练模型达到高拟合效果,达到可用 。
缺点:通用性不强,训练模型只适用特定图片验证码,复杂验证码可能无法切割 。
XDM,等等,还有一种思路:
笔者自己学习OpenCV时想到的,通过图片预处理,轮廓检测,然后对A-Z,0-9字符通过SIFT算法进行特征提取,最后跟需要匹配的字符进行FLANN匹配,理想很丰满,然后编写相关代码后发现由于验证码的正向生成过程导致字符特征变化太大,并不适合,于是放弃采用该思路,代码见上述代码链接中的python项目image_match.py.
根据以上思路总结,根本没有免费的午餐,好的数据和特征工程同等重要,要实现好的效果,都是要根据具体问题具体分析,所以笔者分析自己的图片验证码识别案例,更适合第二种,另外一点原因大批量标注数据人工成本过高,个人不太喜欢。以下将附带案例详细介绍第二种识别思路的实现过程.
根据需求初步分析,大概可分为四个步骤:
1. 数据采集/预处理:http批量下载,OpenCV API使用学习,图片预处理 。
2. 数据标注:GUI标注功能开发,人工标注数据阶段,模型训练后预测数据可进行数据集补充 。
3. CNN神经网络模型训练:windows环境,cpu/gpu,学习神经网络框架API,微积分、线代、概率论等前置知识,加深对神经网络模型理解,pytroch框架的使用 。
4. 项目部署:linux环境下,标注系统VUE前端部署、标注系统Java后端部署、Python模型部署 。
以下是Xmind脑图导出效果:
我是Snowball。这篇内容主要讲解了常用验证码标注&识别的背景知识, 介绍了验证码的基本概念,讲述了这个文章的的创作灵感、需求分析和实现思路.
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习.
原文链接:https://mp.weixin.qq.com/s/7m3OBQpGDhXTGuw9wtdP_Q 。
最后此篇关于Python项目实战篇-常用验证码标注和识别的文章就讲到这里了,如果你想了解更多关于Python项目实战篇-常用验证码标注和识别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
问题情景 混淆群内的小伙伴遇到这么个问题,Mailivery 这个网站登录后,明明提交的表单(邮箱和密码也正确)、请求头等等都没问题,为啥一直重定向到登录页面呢?唉,该出手时就出手啊,我也看看咋回事
实战-行业攻防应急响应 简介: 服务器场景操作系统 Ubuntu 服务器账号密码:root/security123 分析流量包在/home/security/security.pcap 相
背景 最近公司将我们之前使用的链路工具切换为了 OpenTelemetry. 我们的技术栈是: OTLP C
一 同一类的方法都用 synchronized 修饰 1 代码 package concurrent; import java.util.concurrent.TimeUnit; public c
一 简单例子 1 代码 package concurrent.threadlocal; /** * ThreadLocal测试 * * @author cakin */ public class T
1. 问题背景 问题发生在快递分拣的流程中,我尽可能将业务背景简化,让大家只关注并发问题本身。 分拣业务针对每个快递包裹都会生成一个任务,我们称它为 task。task 中有两个字段需要
实战环境 elastic search 8.5.0 + kibna 8.5.0 + springboot 3.0.2 + spring data elasticsearch 5.0.2 +
Win10下yolov8 tensorrt模型加速部署【实战】 TensorRT-Alpha 基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10、
yolov8 tensorrt模型加速部署【实战】 TensorRT-Alpha 基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10、linux,
目录如下: 为什么需要自定义授权类型? 前面介绍OAuth2.0的基础知识点时介绍过支持的4种授权类型,分别如下: 授权码模式 简化模式 客户端模式 密码模式
今天这篇文章介绍一下如何在修改密码、修改权限、注销等场景下使JWT失效。 文章的目录如下: 解决方案 JWT最大的一个优势在于它是无状态的,自身包含了认证鉴权所需要的所有信息,服务器端
前言 大家好,我是捡田螺的小男孩。(求个星标置顶) 我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分四个方案,讨论如何优化MySQL百万数
前言 大家好,我是捡田螺的小男孩。 平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己
我们先讲一些arm汇编的基础知识。(我们以armv7为例,最新iphone5s上的64位暂不讨论) 基础知识部分: 首先你介绍一下寄存器: r0-r3:用于函数参数及返回值的传递 r4-r6
一 同一类的静态方法都用 synchronized 修饰 1 代码 package concurrent; import java.util.concurrent.TimeUnit; public
DRF快速写五个接口,比你用手也快··· 实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestfram
一 添加依赖 org.apache.thrift libthrift 0.11.0 二 编写 IDL 通过 IDL(.thrift 文件)定义数据结构、异常和接口等数据,供各种编程语言使用 nam
我正在阅读 Redis in action e-book关于semaphores的章节.这是使用redis实现信号量的python代码 def acquire_semaphore(conn, semn
自定义控件在WPF开发中是很常见的,有时候某些控件需要契合业务或者美化统一样式,这时候就需要对控件做出一些改造。 目录 按钮设置圆角
师父布置的任务,让我写一个服务练练手,搞清楚socket的原理和过程后跑了一个小demo,很有成就感,代码内容也比较清晰易懂,很有教育启发意义。 代码 ?
我是一名优秀的程序员,十分优秀!