泻药,干货来了
传统的图片去水印方法虽然效率高,但是对细节破坏的比较严重。去水印说简单也简单,说难也难。有的水印用修复图章几秒钟搞定,有的水印要一两个钟头还不一定能搞定。
一些细节不是很丰富的图片,可以通过photoshop等图像处理软件进行临近像素填充,掩盖水印部分,可以达到接近完美的效果。
面对一些细节极其复杂的图像,ps已经不能很完美了。
面对细节丰富且复杂的水印,传统的ps去水印方法已经不能满足需求啊。
现在,用AI技术,去除水印,可以达到几乎完美了。
随着人工智障技术的不断发展,深度学习其在图像处理领域的应用越来越广泛在了,ICML2018上,英伟达和MIT等机构的研究人员展示了一项图像降燥技术Noise2Noise,能够自动去除图片中的水印、模糊等噪音,几乎能完美复原,而且渲染时间是毫秒级。
论文 Noise2Noise: Learning Image Restoration without Clean Data
第三方复现项目:yu4u/noise2noise 这个可以用来去字幕和图像噪点,但是作者并没有添加去水印的功能。
我对这个python脚本进行了修改,已经可以去水印了。
下面教你们怎么用,下面的虽然很长,却很死,只要按照步骤来,一点都不难。
答主在这里声明:本教程仅供参考,不赞成也不鼓励大家用来盗图。
答主在这里声明:本教程仅供参考,不赞成也不鼓励大家用来盗图。
答主在这里声明:本教程仅供参考,不赞成也不鼓励大家用来盗图。
1.下载脚本 下载以后把后缀名后面的.bin去掉。后缀改成zip即可解压
n2n-watermark-remove-数据集-阿里云天池首先进去点击下载文件,然后你会得到一个zip格式的压缩包。
把这个压缩包里面的n2n-watermark-remove-master文件解压到桌面
2.搭建运行环境。
为了照顾新手,我这里推荐使用Miniconda3-4.5.4,这个不是最新版,你们也不要去官网下载最新版,tensorflow-gpu版本需要与cuda/cudnn版本匹配,否则脚本跑起来报错。
Miniconda3-4.5.4下载地址:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.5.4-Windows-x86_64.exe
备用下载 代码托管
下载Miniconda3-4.5.4-Windows-x86_64.exe并安装。连续点击next,直到安装完成,安装目录随意
安装好了。可以在开始菜单找到一个Anaconda Prompt的应用。打开
然后复制下面三行,粘贴到Anaconda Prompt中,
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
然后按两次回车
然后再复制这一行
conda install tensorflow-gpu
回车,然后界面上一直有文字滚动。不用管它。
等出现Proceed ([y]/n)?的时候输入y,然后回车,然后又是一阵文字滚动。。。。等它滚完
等到有三行done的时候,可以关闭Anaconda Prompt。
3.准备数据集
下载coco2017数据集,下载地址 http://images.cocodataset.org/zips/val2017.zip
如果下载慢可以从
这个压缩包可以解压出5000张图片,其中4200张用来训练。剩下的800张用于测试
打开我们刚刚解压到桌面的n2n-watermark-remove-master目录,进入里面的dataset,再进入train,使用windows自带的文件管理器随便框选其中800张图片,右键剪切,移动到test目录。
剩下的4200张(ctrl+A)全选选中移动到train目录里。
然后返回桌面
4.获取/制作水印
这一步是非常重要的,想要计算机去水印,就要教计算机分辨水印,只有计算机学会了分辨一张有水印的图像中那些部分是水印,哪些部分不是水印,才能去水印。
这一步最关键的就是找到水印原图。一般LOGO做的水印,一般可以在其网站找到LOGO图像,(如果是白底需要抠图),
当然你也可以用聪明一点都办法,假设某个网站上的图片都有统一样式的水印,你只需要去这个网站上传一张纯色背景的图片(推荐50%中性灰),让系统为这张图片加上水印,然后通过图像减法计算出差值,也就得到了水印图像。
如果网上找不到相关水印就需要自己制作,制作水印可以看这两个教程,
https://www.bilibili.com/video/av58901808https://www.bilibili.com/video/av58550738当然n2n-watermark-remove目录里已经包含了测试用的的模型和水印。
获得水印之后使用photoshop等软件新建一个800X800px图像,将水印密密麻麻的拼到这张图上,保存并命名为1.png。背景需要透明
把1.png替换掉n2n-watermark-remove目录下1.png。
此方法只能去除固定大小不固定位置的水印(训练的水印必须与水印图像上的水印一样大)如果您要去除的水印形状颜色或大小有随机变化,那么需要修改代码。
参考 https://github.com/yu4u/noise2noise/blob/master/noise_model.py#L29
修改脚本让水印产生随机变化。
5.训练去水印
打开Anaconda Prompt
输入 cd加一个空格 然后鼠标选中n2n-watermark-remove目录,拉到Anaconda Prompt界面上,这样就能自动添加路径。按回车,具体看视频。
然后输入下面命令,按回车,接着屏幕又是一阵文字滚动。等它滚完。
pip install -r requirements.txt
然后执行训练命令
python train.py --image_dir dataset/train --test_dir dataset/test --image_size 128 --batch_size 8 --lr 0.001 --source_noise_model text,0,50 --target_noise_model text,0,50 --val_noise_model text,25,25 --loss mae --output_path text_noise
训练时间由显卡决定。一般几十个小时到几百个小时不等,办公电脑就不用试了。
有条件的可以用Kaggle和Google Colab
训练过程中,每迭代一圈就会生成一个weights.xxxxx-xxxx.hdf5模型文件。并不是每次都会生成hdf5文件,有些时候不生成属于正常现象。
开头的数字代表圈数。数字越大,去水印效果越好,这个脚本默认跑100圈。,一般跑50圈左右就可以关闭窗口停止了,然后生成的模型去水印。
6.利用水印模型去水印
得到模型以后就可以用用来去水印了
使用这个命令
python test_model.py --weight_file 水印模型文件名.hdf5 --image_dir inputdir --output_dir outputdir
水印模型文件名.hdf5替换成实际的文件名,inputdir里放入有水印的图片,执行命令。去除水印后的图片会静静的躺在 outputdir目录
视频里演示的效果可能有些不干净,因为这是短时间内训练的结果,理论上训练 30 小时以上就可以达到基本可用程度。,想要水印去的干净,训练时间不能少。