文字隐写术-盲水印研究笔记【原创】
gitee 开源代码(java)
需求概述
研究盲水印对于版权保护的效果和能力
研究尝试概述
水印实现: 大部分的python或者java算法都基于频域的盲水印效果。
涉及的算法: 傅里叶变换。
开源相关: 大部分是python算法居多,也有java的一些傅里叶实现,少部分其他语言实现。
涉及的框架: opencv (用来处理图片)
图片盲水印方式
1. 二维码(本质是图片) 盲水印(未尝试)
2. 图片盲水印(初步尝试,未深入,初步效果不佳)
3. 文本盲水印(已尝试)
图片盲水印:初步尝试一个傅里叶算法,发现在截图等复杂场景干扰下,似乎没有文本盲水印抗干扰能力强;但是没有深入印证其他多种算法效果。
文本盲水印:经过几轮尝试,发现文本盲水印会效果好,但是在一些场景下图片会有一些失真(对比原图),色泽会变浅。
在其他抗干扰(截图,缩放,涂改)情况下效果还可以。图片失真的情况,在不同傅里叶算法中,效果不一样,有些不失真,但是效果抗干扰能力差。
文本盲水印尝试详解
一. 目前java 有三种demo沉淀
第一种:
第二种:
第三种:
整体算法代码行不多,核心在于算法本身,具体算法实现原理网上论文很多,但是真正能商用的效果不好。
dct 一般用于图片算法,dft 一般用于文本算法,当然文本也可以以图片的方式显示中文。
三种总体效果都差不多,但是在干扰情况下差异还是很大的。
引用网上的一段盲水印的注意点描述:
目前没有用真实的图片效果和实际场景做测试,从而排除额外的一些情况,所以没办法确定真实的场景是否有效,或者是否可以规避一些不可能存在的实际场景。初步与产品确认,测试效果还可以,但不是很理想,比如一些截图30%,20%的情况下,部分图片信息无法有效还原“盲水印”。一些非原图处理(比如采用微信和飞书截图)之后,图片变成jpg压缩,此时盲水印可能无法有效还原检测,原图或者加水印后的图尽量都使用png或者bmp。加水印后,图片会有略微明显的色泽变化(但是其中有些算法好像变化不大,没有大范围细节测试,但是这种情况带来抗干扰能力差较多)。
二. 目前python 效果测试
python 是目前盲水印算法最多的案例和demo,在github上发现一些python算法一般加的是图片盲水印(非文字盲水印),但是没有详细测试效果(主要是没精力)。网上fork数或者关注数多的盲水印,实际测试效果并不佳。比如:https://github.com/guofei9987/blind_watermark 这个盲水印可以支持文字隐藏,但是实际进行截图和干扰的时候发现文字水印无法如期提取,跟实际描述的文档有较大差异,可能是姿势不对。其他的水印效果未深入,未来有更多精力后再深入投入实际场景做验证。
三. 云服务测试
目前云服务中支持的,主要有七牛云和腾讯云,七牛云更偏图片处理,所以用七牛云做测试(腾讯云未测)但是实际效果也不是很理想。
七牛云盲水印恢复靠的是原始图片(可能是通过水印图和原始图对比),从而恢复水印(这种手法可能要与产品商量实际场景行不行),同样也有version 3第三种算法实现盲水印,可以在水印图中提取水印。经过测试version 3的实现,在图片截图和缩放等干扰情况下,恢复水印的能力会差很多,丢失的信息更多,不如网上的一些开源算法,所以云服务效果不尽如意。
总结笔记
盲水印总体效果不是很成熟,但是作为辅助版权验证应该还是可以的(除了图片会增加一些大小),关键还是在于实际业务场景。
同时自身也不是图片处理相关专家,很多细节和参数也不敢调整,也无法真正有效结合实际业务场景发挥和调优算法。
所以真正落地盲水印,后续需要在几个方面努力:
1)需要专职的一名图片处理专家或者外聘专家支援。
2)大量的实际场景的图片和用户干扰的案例图做多次验证。
3)通过机器学习进行算法参数调优。
测试效果示例
常用案例测试:
实际案例测试:
盲水印部分截图干扰测试:
盲水印部分截图/缩放干扰测试:
参考资料
隐性水印或是叫盲水印软件介绍 https://ningbocat.com/post/1613.html
有意思的数字盲水印的简单的实现 https://www.cnblogs.com/Imageshop/p/10097854.html
opencv https://opencv.org/
java 水印代码
python
jpg截图等场景下几乎无法还原。
非文字水印
第三方云服务
by 车江毅
2022-6-13
开源是一种态度,分享是一种精神,学习仍需坚持,进步仍需努力,.net生态圈因你我更加美好。