马赛克还原神器—Depix,真的有那么神吗?
共 1995字,需浏览 4分钟
·
2021-04-17 06:31
Depix 是用于从马赛克中还原密码/英文数字组合的Python工具。
它的官方效果是这样的:
效果非常令人惊艳,恢复后基本和原文图相差无几。但是真的有那么神吗?
01
怎么做到的?
第一步,作者在编辑器中使用了与原图(带有马赛克的图片)相同的字体设置(文本大小,字体,颜色等设置),然后将 debruinseq.txt 内的文字和数字放入编辑器中并截图,这张截图中的所有文字都将被像素化后作为“搜索集”来识别原图中马赛克的真实内容:
第二步,将原图中的马赛克方块切出来成为一个个单个矩形,然后这些矩形将与“搜索集”中的每个块进行比对,找到最正确的结果。
第三步,在对应位置上对搜索集和原图中周围方块的匹配进行几何比较找到最短距离,重复此过程几次,找到最优结果。
接下来,让咱们试试这个Depix,看看是不是真的那么神。
02
安装依赖
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。
为了使用该项目的源代码,请前往GitHub下载:
https://github.com/beurtschipper/Depix
如果你访问不了GitHub或网速过慢,可以在Python实用宝典公众号后台回复:depix 下载 (当然,这玩意你下载下来也没用)。
解压下载好的文件得到 Depix-main 文件夹,在命令行中 cd 进入 Depix-main 文件夹,输入命令安装依赖:
pip install -r requirements.txt
03
试一试
首先试一下作者的示例,在Depix-main文件夹下运行以下命令,采用作者的打码图作为识别的目标对象:
images/testimages/testimage3_pixels.png
使用作者生成好的图片作为“搜索集”:
images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png
运行以下命令开始识别:
python depix.py -p images/testimages/testimage3_pixels.png -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o output.png
识别结束后会在当前文件夹生成 output.png:
效果还不错,但这是作者提供的图片,如果是我们自己的图片呢?
比如我在编辑器中键入这样的文字再打码,它能识别到吗:
打码:
先使用作者的“搜索集”来解码:
python depix.py -p G:\push\20210114\test.png -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o output.png
结果出来的图基本和打码图没什么变化,基本无效果。
我以为是“搜索集”的问题,比如字体不一样导致无法识别成功。
因此我学作者制作了一个“搜索集”:
然后使用这个搜索集再进行识别:
python depix.py -p G:\push\20210114\test.png -s G:\push\20210114\train1.png -o output.png
依然没有识别成功,出来的结果还是和原图差不多,马赛克基本没少。
后面又试了几次,均没有识别成功。
04
为什么我的马赛克无法被识别?
于是我想知道为什么会这样,就用我自己的马赛克工具和作者打的马赛克做了对比:
我发现,使用我的马赛克图像去进行识别的时候,一样没有任何效果。但是识别作者的马赛克图像,效果却很好。
这时候我有理由相信这个算法发生了“过拟合”,作者对“搜索集”的每个区块进行打码,这个打码的风格是有一定特征的,如果被识别对象的马赛克不符合这个风格,那识别大概率会失败。
所以被识别对象的马赛克一定要符合“搜索集”的打码风格,这样才能被准确地识别出来。换成其他算法生成的马赛克,作者的模型都可能会失效,就比如我刚刚试的那些例子。
尽管如此,随着技术的进步,在未来类似这样的解码器肯定会越来越强大,所以建议大家还是将马赛克打得厚一点,最好是一整块地填充图像破坏原图,这样才不用担心密码被还原之类的事情,比如下面这样才是最安全的。
最后一个问题,这两个被覆盖掉的字是什么?(狗头保命