云与海的天空 - 空间推理
type: channel
link: https://www.muyanwl.wang/index.php/tag/%E7%A9%BA%E9%97%B4%E6%8E%A8%E7%90%86/
items: 空间推理类型验证码识别指北

空间推理类型验证码识别指北
type: item
date: 2023-11-27T13:58:00+08:00
description: 提示！本文章仅供学习交流，严禁用于非法用途，文章如有不当可联系本人删除！一. 目标网站aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9zcGFjZS1pbmZlcmVuY2U=二. 准备工作已经安装好的cuda环境，笔者这里的环境是CUDA11.4+cudnn-8.2.2.26，win10环境训练工具：yolov5-7.0 https://github.com/ultralytics/yolov5/releases/tag/v7.0验证码原图下载：去目标网站上下载1000张左右去重后的原图这里我觉得有必要说一下，去重，去重，去重，重要的事情说三遍，不去重会干扰后续数据集的采集与标注如何去重，很简单，直接计算图片的md5即可这时候先别急着去下载，因为和图片url一起返回的还有这张图片对应的语义，也就是front字段的内容，例如：​ 你需要把语义放到图片命名里方便后面收集语义，例如这样的命名方式:​ 请点击大写Q朝向一样的小写l_计算后的md5值.jpg三. 分析图片里包含的类别，和语义想要干什么这部分就像上面二级标题说的，分两段讲3.1) 收集类别3.1.1 先手动打开几张图片看下大致有哪些​ 这里我举了两张图片为例子，图片有1.字母(区分大小写)，2.数字，3.几何图形，目前发现是这三种大类，至于具体有哪些细分的类，这时候就用到了上面准备工作里收集到的语义了，我们来从文件名里把语义提取，然后去重写到一个文本里看看：​ 大概是这样的，事实上，上面的语义结果是我收集了2000张图片去重下来的结果，不过这也太乱了，我们给它排序后再来观察下：这样是不是就清楚多了，由于篇幅有限，两个语义文件我会放在云盘里方便大家参考关注我的公众号：爬虫45度，后台发送 "空间推理语义收集" 也可获取下载地址语义收集下载链接3.1.2) 将类别具体化经过第二个文本的观察，我们可以基本确认，验证码的类别有：1.大小写的字母a-zA-z2.数字0-9 3.圆锥、立方体、圆柱、球 这四种几何图案3.2) 语义分析总结完了类别，再来说说这种语义怎么判断，这里我采取的方式是从后往前分析，这里挑选三个典型的不同语义来讲下：请点击数字8 请点击正向的大写B 请点击数字7颜色一样的小写f3.2.1) 最终的目标位置最终的目标位置都在语义的最后，例如 "请点击侧向的大写P" 最终目标就是 "大写P"3.2.2) 最终目标的关联关系第一个，没有关联关系，直接找目标；第二个，最终目标是B，它没有关联关系，但是它有一个特征，"正向"，这时候，找正向且大写的B即可；第三个，目标物是f,它有一个关联关系，或者说对比/参照关系，7，而他们对比的依据是什么？颜色对吧！既然如此，找到f(可能是一个或多个),找到7(一个或多个)，两两比较，f和某一个7颜色一致的即为正确的f。也许有人会问，对比下来的结果有两组甚至更多符合呢？那你都说如果了，我的回答是，要么你的识别有问题，要么验证码生成的时候出错了(当然这种概率更小)经过上面三种类型的语义解析，我们顺理成章的可以从中得出更直接的一个结论，验证码图片上的每一个物体，我们都可以人为的给它按照如下方式来定义：目标物a: 值：a (可能值：a-zA-z、 0-9、 圆锥、立方体、圆柱、球) 颜色：红色 (可能值：红、 黄、 蓝、 绿、 灰) 朝向：侧向 (可能值：正向、侧向) 根据上面的三种去排列组合你就能推断最终的组合类数量了，我这边是645种，因为几何图形中只有正方体才有正向和侧向，其他三种默认只有正向即：66个值x5颜色x2朝向-3图形没有侧向x5颜色=645个细分类请注意，上面我对第二和第三个语义分析的时候是不是只说，B，f，而不是大写B，小写f，因为这里字母的值已经区分大小写了，或者说不用再去判断大小写了。===========================分界线============================这里我们先记住一个概念：一张图片中每个物体，都被我们标记上三个属性：值+颜色+朝向具体怎么解析，后面有提到，下面先用数据集将模型训练出来，这是语义解析的前提。四. 标注工作4.1) 训练工具​ 这里选择用yolov5的v7.0版本来训练，而数据集格式采用yolo 格式4.2) 标注工具pip install labelImg然后cmd里在运行环境里直接labelImg 命令即可唤出工具界面，这里要注意下，标注的时候先选择将数据格式设置为yolo4.3) 如何标注按照上面3.2.2中对每一个物体的定义，我们可以这样来写标签，例如这个物体我们就可以定位为红色-侧向-8，符合3.2.2中的定义：目标物8: 值：8 颜色：红 朝向：侧向因此，你需要新建一个文件夹xxx,在这个文件夹下有两个文件夹 "image…