网易易盾—推理拼图验证的破解
本帖最后由 timeslover 于 2022-2-5 17:29 编辑**首先看一下目标的验证形态是什么样子的**
![在这里插入图片描述](https://img-blog.csdnimg.cn/a400d474c96f45539c173c0ad8bcf2fb.png?)
是一种通过验证推理的验证方式,用来防人机破解的确是很有效果,但是,But,这里面已经会有一些破绽,比如:
![在这里插入图片描述](https://img-blog.csdnimg.cn/3d8b3185697544c1801e3636f5474627.png?)
(以上是原图和二值化之后的结果)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a52c5d223fb542c0ad54d69f44ebe45a.png?)
(这是正常图片)
像划红线的这些地方,可以看到有明显的突变,并且二值化之后边缘趋于直线,但是正常图像是不会有这种这么明显的突变现象。
## 初识潘多拉
后来,我去翻阅了机器视觉的相关文章和论文,发现了一个牛逼的算法,这个算法就是——**Genetic Algorithm**遗传算法,最贴心的的是,作者利用这个算法实现了一个功能,“拼图自动还原”(不是像什么A*算法寻找最优路线解那种哈,就是单纯的拼图)[项目仓库地址](https://github.com/nemanja-m/gaps)
首先来介绍下如何使用跑起来这个项目吧,坑是真的很多,接下来感受一下pyCham的一路报错!
这里我用的是python3.10的版本,目前是最新的版本
文档中这一步执行是会报错的
```python
pip3 install -r requirements.txt
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/3b29e9a245ad4b0c8758be4f6eaefc07.png?)
解决方案:单独对requirements.txt文件下的每个包单独下载,然后根据当前下载的包的最新版本替换旧版本号。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fcff4a14aa4d40e28db41dcaaf063dca.png?)
![在这里插入图片描述](https://img-blog.csdnimg.cn/56293a0ff07a4e8d9ed098592a05c844.png?)
我目前每个包最新使用的是这些版本号
![在这里插入图片描述](https://img-blog.csdnimg.cn/2d64051ec218446fb239a86b2a04039f.png?)
全部替换完了之后,再执行一次下面的代码,他就不会报错了
```python
pip3 install -r requirements.txt
```
然后下一步,执行下面代码
```python
pip3 install -e .
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/f72a8a612cbd4b3bb12290ba1fcab745.png?)
## 进入潘多拉
然后我们按照官网的提示来执行,先创建一个拼图出来,命令是这样的(这里的文件名我改了)
```puthon
create_puzzle images/starry.jpg --size=60 --destination=puzzle.jpg
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/3cb6092f12e94091b4602806b5d23df0.png)
会发现,好像不行,因为我们没有在正确的位置上执行,他的脚本位置是在bin文件夹下面,你可能会遇到如下问题
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c27194f619c41c5b096f86ac701d737.png?)
成功之后的话,会在bin目录下生成一个拼图图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/abb5d154efdf48fd81e7854bba0c219d.png?)
以上是介绍如何生成图片,接下来是重头戏,如何还原图片
```python
gaps --image=puzzle.jpg --generations=20 --population=600
```
对于参数的解释官网是这样的:
Option
:**--image** Path to puzzle(需要被还原的图片)
**--size** Puzzle piece size in pixels (拼图的大小)
**--generations** Number of generations for genetic algorithm (遗传算法的代数)
**--population** Number of individuals in population
**--verbose** Show best solution after each generation (显示每一代后的最佳解决方案)
**--save** Save puzzle solution as image (拼图结果另存为图像)
先按照官方的走一遍
![在这里插入图片描述](https://img-blog.csdnimg.cn/4b7d052d7d78411ca21b51c276af4d30.png?)
很好,很舒服,继续报错,而且语法拼写上我们也没有拼写错,没关系!我已经帮你找到解决方案了。
```python
python gaps --image=puzzle.jpg --generations=20 --population=600 --size=60--save
```
或者你不指定遗传代数和人口数
```python
python gaps --image=puzzle.jpg --size=60 --save
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/3a260638a8c34bebaa705aa39e4ac858.png?)
![在这里插入图片描述](https://img-blog.csdnimg.cn/54537a04ae1e432ea00bf31ac86f1d47.png?)
这是完全还原的结果,至此,我们披荆斩棘从解决项目报错,一路挖坑填坑到demo成功运行,到这里我们已经成功了60%,接下来就是如何利用这个项目,去破解网易易盾的推理拼图验证。
## 探究潘多拉的秘密
首先看一下项目目录:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ffaae01d096149aa853785aa195192ca.png)
gaps文件夹下面是所有模块的源码,作者对各个基础功能做了封装,但是我们想要的功能并不存在,就需要自行阅读和理解源码,然后二开实现自己想要的功能。
我们主要关注这个文件**individual.py**:
![在这里插入图片描述](https://img-blog.csdnimg.cn/3544c2ac6b3c4fdbbfed8cf9fe896c5c.png?)
我来用大白话给你翻译一下吧,“在所有排列中,帮你找出最优解”
![在这里插入图片描述](https://img-blog.csdnimg.cn/702b343e58db40a6829b8a2fd12efe83.png?)
输出这个映射,结果是这样的,正好是我们想要的东西
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9fb7fbf85d74a27b9a80ace0ca3eb7b.png?)
下面会有一个创建图像的方法,这是最后得到最优解图像拼接函数
![在这里插入图片描述](https://img-blog.csdnimg.cn/c824fa630d4d4091aebde7dbc5c51833.png)
那么,我们将最后的索引映射取到就OK了!
**以下为最优解的映射值输出实例:**
初始化的时候,新增一个变量用来存储最后的结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/86ccfd1621404eb2b7e3a6b2128897f0.png?)
```python
self.pieceMapping = None
```
自定义一个函数
![在这里插入图片描述](https://img-blog.csdnimg.cn/30b941f5a9734b41bb0671561eced4a1.png)
```python
# 返回映射值
def getPieceMapping(self):
return self.pieceMapping
```
每次执行的时候,将最优解传递出去
![在这里插入图片描述](https://img-blog.csdnimg.cn/ecef8eba81484e13ab6fea0251544111.png?)
```python
def to_image(self):
"""Converts individual to showable image"""
pieces =
self.pieceMapping = self._piece_mapping
return image_helpers.assemble_image(pieces, self.rows, self.columns)
```
以上,就把我们想要的结果输出了
**调用:**
![在这里插入图片描述](https://img-blog.csdnimg.cn/fc0afb14a3c84ee9918367e7a9bdab07.png?)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6204723855b34b80b304a177010c76ae.png)
key为最后的结果标志,value为原始标志。
PS:对于极度复杂的原始图片创建的拼图,在还原之后,误差会挺大的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/947fa55de17f4b3b90eb3613491b60d0.png?) yysn1998 发表于 2023-2-20 22:12
我直接把你的那张黄桃图截图去识别,算法还原不出来。
截图会有偏差,可以到易盾网站上去下一个原图,可以看下这篇文章下面的评论
https://blog.csdn.net/weixin_45307278/article/details/122776869
:lol 很强的样子{:1_918:} 什么AI智能机器人的灵魂就是来自强大的算法,而强大的算法却来自人类。 很高端的样子 这个算法厉害,是模仿生物界的遗传吗{:301_998:} 插眼 学习了 学习一下大佬的思路 很高端的样子
学习学习一下
页:
[1]
2