6

写代码,必须要优雅...

 2 years ago
source link: https://blog.csdn.net/c406495762/article/details/126622205
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

写代码,必须要优雅...

置顶 Jack-Cui 于 2022-08-31 13:52:58 发布 1346

大家好,我是 Jack。

最近看了一个新动画,间谍过家家,12 集都追完了,意犹未尽。

里面有一个细节:

优雅的劳埃德先生,通过暗号来解读报纸上的情报,普通的报纸上隐藏着想要传递的消息。

d48f4e85cdde6088121324be716d36c2.png 暗号
944551f9fc60d8f83d6b28a4d2b5a170.png 解析

其实,程序员的我们,传递秘密的方式,可以更优雅。

劳埃德先生看后都会直呼:「对不起,我不是一个优雅的人!

这张看似普通的约尔美照下面,其实藏着另一个人,你发现了吗?

1b9488c32af0ea859cd32d135085299e.png

肉眼很难看出来,但只需要运行一下程序,将图片下采样,就能得到阿尼亚的照片。

e004b485d432801afff28fd5a93277f7.gif

 同理,照片里也可以藏文字,运行一下程序,就能得到一篇 160 万字的小说。

9318554e2ad76c5f2ec2767dcc68885c.gif

请问,这种情报传递的方式,够优雅吗?

今天,我就教教大家,这“恐怖如斯”(斗破梗)的实用技能。

学会了,别忘了在女朋友/男朋友面前秀一手,藏个表白照片,再藏段肉麻表白文,玩法很多,就看你脑洞有多大。

视频已经首发在了 B 站:

e9bd667be39ff6a753a1e48feff08a4f.png

视频地址:

https://www.bilibili.com/video/BV1XV4y1p7nS

下面是图文版教程和代码:

其实,原理很简单,放大图片,我们就能发现这张约尔的图片上,有着规律分布的杂点,而这些点就是组成阿尼亚照片的像素点。

be6121d7919e0e65c0da6b43ed1c13b8.png

缩小约尔美照时,电脑会把这些杂点挑选出来,代替它们周围的点,组成缩小后的画面。

电脑刚好能挑选出这些掺入的点,是因为这些位置都是提前计算好的,这里用到的算法就是邻近法。

举个简单的例子,一张 9 * 9 的黑图,如果把它用邻近法缩放到 3 * 3 的正方形。

电脑首先会将这张图分成 9 份,取每份正中间的点,代替它周围的 8 个点,来组成缩小后的图片。

960f3699e5759862a899bc86e92983cf.png

也就是说,如果我们将每份正中间的点改成红色,从整体看,他还是黑图,只是看起来有些杂色。

310adbe8fbd128d6b7e1e064a3e597ab.png

但图片缩小后,黑色正方形就变成了红色正方形。

7f94305fd4b5c07bd1973b5f41707ac9.gif

看下生成代码和解析代码:



newCodeMoreWhite.png

学过深度学习的小伙伴,对这种操作绝对不陌生,这就是一种特定的卷积操作。

卷积甚至可以设置得更复杂一些,比如像这样。

f7f4c2ee1f2488dafc6d24672f57198e.gif

照片里能藏照片,同样也就能藏文字。

我们知道,图片是由 RGB 三通道组成的,其实就是一串数字。

ed5b67b6f622a73c2194c80489b2711c.png

而文字的编码也是一串数字,比如请给我三连,这个连字。

它的 Unicode 数值是 36830,这是十进制,转换为十六进制就是(8F, DE)。

那也就可以写成(0x00,0x8F,0xDE),R 通道不赋值为零,G 通道和 B 通道赋值。

显然,将文字的 Unicode 数值,表示成 RGB 数值的形式,就可以将文字转换成图片,一个像素点代表一个文字。

一张 1000 * 1680 分辨率的图片,就可以存储 168 万个文字。

文字的生成图片代码和解析代码:



newCodeMoreWhite.png

拓展一下,其实只要按照一定的规则,将某些信息写入到图片内,就能达到神不知鬼不觉地保存这些信息的目的。

这个规则,可以设置地复杂一些,并且生成规则和解析规则只有你知道,这样就能得到一张只有你能读懂的照片。

eae1d99e91fe47f6fa6dd0d959713f7b.png

除了这种间谍过家家,逗逗男女朋友,其实这项技术,有着更有意义的用途:用于保护知识产权的数字水印技术。

将影视作品的版权信息,存到视频本身的画面中,这,就是数字水印技术。

与传统的水印不同,这种水印很难被察觉,也很难被抹去,版权信息需要通过特定的解析计算才能得到。

4114b217fe1579e2c873f38555a3c3b3.jpeg

出于好奇,我联系了一位在阿里安全做数字水印的朋友,想看看他们的技术,是否跟我想得差不多。

不看不知道,一看吓一跳。思路大致相同,但是他们设计得更为复杂。

首先,他们的技术鲁棒性要好很多。

比如对一副图片进行裁剪、缩放、有损压缩等,鲁棒性强的水印技术依然能够提取出我们想要的版权等信息。

阿里安全的数字水印鲁棒性就很好,我要来了一个他们的效果,大家可以感受一下。

电视播放着《流浪地球》这部电影,这段视频中隐藏了版权信息,版权信息咱们设为 123456789。此时,有台摄像机正在盗摄画面。

ee83948eb7e32fca4a089d25264b5d2e.jpeg

对盗摄后的画面进行分析,可以看到,程序呢,轻松地解析出了信息:123456789。

f58070432463bdcb9ff7223b17592a2c.png

有了这个技术就能追踪溯源,甚至找出盗摄者。

对画面缩放到非常小,程序还是能够解析出信息:123456789。

甚至只盗摄一部分画面,比如只有画面一小块,程序依然能解析出信息:123456789。

0a20d1c9c1b6b18b99d121884f4a72ec.jpeg

文字表述不够直观,大家可以直接看视频感受一下,解析是有多准确!

视频地址:

https://www.bilibili.com/video/BV1XV4y1p7nS

无论是缩放还是裁剪,程序都能轻松地解析出想要的信息。

在各种噪声和攻击下,水印的漏检率小于 1%,误检率小于10的负9次方。

可见,他们的策略不是简单的在像素中插入数值那么简单,还做了很多提高鲁棒性的工作。

具体细节没有对我透露,毕竟这是人家的产品,发了很多专利,甚至还得到了好莱坞认证。

现在有了国内自主研发的水印产品,这样就可以避免受制于人。

懂的都懂,技术还是自己研发的好。

知识产权保护任重而道远,不仅仅要靠平台,也需要我们每个人的帮助。

视频被盗,维权很困难,特别是对一些小 up。

比如我 21 年的一期视频,被剪辑,盗用发布在了某手。

0c0da82c08507537545bfe6ea16865c9.jpeg

好家伙,他将我 AI 还原乾隆后妃样貌的视频进行了裁剪,拆分成了三期视频发布。

更杀人诛心的是,每期视频都比我原视频播放高就算了,向官方举报盗用视频还无济于事,以无法鉴别的理由给我回绝了。

现在有了数字水印这项技术,这类问题就有了解决方案,在不影响视频画面的情况下,还能藏入版权信息,只要各个平台都接入这类技术,视频是不是盗用,还不一目了然?

当然,光靠一项技术,想要完全保护知识产权是不可能的,还需要每个平台,每个环节的配合,也需要有完善的、公平的鉴别规则。

只有这样,那些辛辛苦苦做视频的小 up,才能不被视频盗用的问题磨灭了创作热情。

只有这样,那些投资大量人力、物力创作的影视作品,才能不被盗摄盗版等问题弄得焦头烂额。

这就是这项技术的价值所在。

未来,还会有很多技术创新用于解决社会问题。

这些科研人员,每往前走一点,我们生活的安全感就可能多一分。

感谢这些一直在背后努力的人。生成和解析代码以及素材,我已经打包放到了我的公众号:jackcui-ai,后台回复「优雅」,即可获得。

好了,今天就聊这么多,我是 jack,我们下期见~


最后再送大家一本,帮助我拿到 BAT 等一线大厂 offer 的数据结构刷题笔记,是一位 Google 大神写的,对于算法薄弱或者需要提高的同学都十分受用:

谷歌和BAT大佬的刷题笔记,看完秒杀80%的算法题!

以及我整理的 BAT 算法工程师学习路线,书籍+视频,完整的学习路线和说明,对于想成为算法工程师的,绝对能有所帮助:

我是如何成为算法工程师的,超详细的学习路线

别光收藏,来个赞哦,笔芯~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK