利用AI把老照片修复成彩色4K并实现微信小程序查看管理
马上要过年了,为了让我妈可以在亲戚朋友面前愉快的聊(装)天(逼),我决定把家里的老照片修复一下,一些爸妈年轻时的黑白照片也弄成彩色的。不然他们老以为我坐电脑前面就是玩游戏 😂。
先上结果对比,左面是老照片,右面是修复后的。
我妈年轻的时候咋这么好看 😆
确认过眼神,就是我要的亚子,那么开始操作吧。
1. 扫描相片
首先第一步需要把照片扫描到电脑上,有高清的扫描仪是最好的,但是像我这种穷 b 就只能用手机完成了,在这用的是 Google 良心应用照片扫描仪(官网,Google Play,App Store)。
官方宣传说:
毫无眩光的高分辨率扫描仪
实际使用下来效果非常棒,就是比较累人,需要一张一张的扫,毕竟没有扫描仪方便。
2. 放大照片
照片都是有些年头的了,那个年代还都是胶卷相机照的,本身效果就不太好,所以第一步就是把相片放大,利用 AI 补充一些细节。
在这使用的是一个高性能图像放大算法waifu2x ,这个算法最初是给动漫图片放大使用的(不愧是日本人开发的),但是实测UpPhoto模型
对于照片的成像效果也非常不错,市面上所谓的无损放大大部分都是假的,一小部分又得收费,实际效果感觉没啥太大区别。而且这个算法还支持CUDA
,网上 99%搜到的在线“无损”放大都是基于这个算法。那这么好用直接开整就完事了。
首先先下载waifu2x-caffe,这是waifu2x
的Caffe
版,也就是GUI
(客户端)的版本,有简体中文的语言包,还支持GPU加速
。
使用很简单,在releases里下载最新版本的,直接解压就能用。如果你的显卡比较新,支持GPU
加速的话那么比直接CPU
计算快上好几倍。配置GPU
加速也很简单*(windows)*。
首先去英伟达下载CUDA和cuDNN。注意对应版本,比如我的显卡支持最新的
CUDA
,那么我下载的就是最新(2019-12)的cuda_10.2.89_441.22_win10.exe
(国内网络环境不好,所以一定要下载local
版的)。然后下载
cuDNN
,cuDNN
需要对应CUDA
的版本,上面下载的是CUDA 10.2
,所以在这下载cuDNN v7.6.5 (November 18th, 2019), for CUDA 10.2
。
注意:
cuDNN
需要登录才能下载
下载完成之后之后就可以开始安装了
安装
CUDA
之前记得安装Visual Studio。两个软件都是下一步到底就行。之后把
cuDNN
解压出来放到CUDA
的安装目录里,我的是在默认安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
。
环境变量会自动配置,网上的教程都过时了,一直下一步到结束就行。
然后点一下软件的cuDNN检查
看看是否配置成功了。
当然不配置也不影响使用,就是会非常非常慢。之后就是中文界面的傻瓜操作了,选择需要转换的文件夹和输出的文件夹。自动降噪放大
,3级
,2x
,UpPhoto 模型
_(或者拿你的照片多试几次,挑一个效果最好的)_。点击开始之后就是漫长的等待了。我转换了1000 多张相片花了大概4 个多小时。
3. 压缩照片大小
照片放大以后位深度会比较大,整体照片体积也会很大,比我的一张照片大概就有50M
左右,所以我们需要压缩一下,本来打算使用腾讯出的智图,效果还不错,但是依赖的imagemagick默认是CPU
运行,GPU
的版本还没编译成功,无奈放弃了。后来发现PS
的压缩效果也很不错,所以直接就用PS
了。PS
本身就带录制功能,直接录制一下压缩的操作然后执行就行了,在这就不赘述了。
4. 搭建图床
后面我们需要用到图片的url
,微信小程序也需要一个接口。所以在这搭建一个图床,或者使用其他免费的图床也可以**(免费图床有随时挂掉/网络不稳定的几率,做好准备)**。
我使用的是一个开源的图床服务Lychee 。这是一个基于PHP
的图床服务,搭建也很简单。在这就不多说了,搜一下教程一大堆。
简单来说就是:
clone
项目- 配置目录权限
- 在云供应商申请免费的
ssh
证书,配置https
- 配置
mysql
- 配置
php
- 配置
nginx
- 打开地址输入数据库账号密码会自动建表
- 这个项目自带中文,在设置里改一下就可以了
5. AI 上色
上述工作完成后就是关键的一步。给黑白或者褪色的照片上色了。在这使用的是DeOldify这个项目,这应该是全世界最知名的开源AI
上色库了。你可以下载到本地,作者在这说过本地搭建并不简单,而且我确实失败了*(头铁被锤爆了)*,不知道是windows上Docker
的原因还是其他问题。
但是谷歌给大众提供了一个平台Colaboratory,官方简介:
Colaboratory
是一个免费的Jupyter
笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。 借助
Colaboratory
,您可以编写和执行代码、保存和共享分析结果,以及利用强大的计算资源,所有这些都可通过浏览器免费使用。
简单来说这是一个谷歌开放的一款研究工具,主要用于机器学习的开发和研究。这款工具现在拥有非常好的GPU
而且目前可以免费使用!
商业GPU
免费使用!有没有?实测内存不够了居然还可以免费加!除了国内登不上简直没有其他缺点 🐶。
首先打开项目给建好的笔记地址 _(不保证最新,建议从GitHub
上打开)_。第一步先选择复制到云端硬盘。因为笔记本身并不满足咱们的需求,所以需要对原代码进行改动,复制到自己的云端硬盘以后下次打开就可以直接使用了。
笔记复制到自己的云盘上以后第一步先挂载自己的云盘到Colab
上。因为每次重新打开笔记的时候(重新打开浏览器之类的操作)都会重新分配新的服务器,所以要把自己云盘挂载上,训练成功的图片要存到自己的云盘上,否则重新打开/刷新以后就没有了。
挂载这一步的代码已经有了:
直接点击
from google.colab import drive balabalabala
前面的按钮出现一个这样的链接
https://accounts.google.com/o/oauth2/auth?client_id=*********
,然后直接点击这个链接登陆你的
Google
账号获得一个很长的字符串
把那行字符串复制下来粘贴到出现的输入框里回车
看看左面文件选项卡下有没有你的网盘目录,没有就重新操作
挂载云盘成功以后每一个运行都点一下,等待执行完就可以了。执行到最后一步(Colorize!!)的时候可以随便搜一个黑白照片试一下效果。成功以后可以进行正式的训练了。
项目本身提供的代码一次只能训练一张,得手动执行 粘贴图片地址-训练-保存,这肯定不符合需求,像我有 1000 多张图片,一个一个整估计得明年过年才能训练完了。。。所以在这修改一下代码。
第一步把原本笔记里的最后一步清空,写下咱们的代码:
- 设置阈值,具体数字根据效果来,可以多试几次看看多大数值效果好(
min: 7, max: 45
)
1
render_factor = 45
- 所有图片的
url
:
上面搭建图库就是为了这个,可以直接在
network
里找到所有图片的数组。格式化一下:1
你的图片数组.map((p) => `你的域名${p.url}`);
- 然后把所有地址粘过来:
1
paths=["地址1","地址2"...]
- 定义一个内存释放的函数,训练的时候不会自动释放内存,次数多了直接就崩溃了,所以每训练完一张图片就回收一下内存:
1
2
3
4
5
6def clean_mem():
torch.cuda.empty_cache()
n = 2**14
a_2GB = np.ones((n, n)) # RAM: +2GB
del a_2GB # RAM: -2GB
gc.collect()- 之后循环进行训练:
1
2
3
4for i in range(len(paths)):
clean_mem()
image_path = colorizer.plot_transformed_image_from_url(url=paths[i], render_factor=render_factor, compare=False)
shutil.copyfile(image_path,'/content/drive/My Drive/你的自定义文件夹地址/'+str(i)+'.png') 现在直接点击前面的运行按钮就可以开始训练了,时间会很漫长,具体时间没看,大概 6,7 个小时才训练完成。别觉得慢,要是部署到家用机器上估计几天几夜打底吧(再提一嘴,谷歌真是太良心了,就算是
2080TI Super
也干不过免费分配的吧)。 等到所有图片计算完成后你可以在云盘上看到所有成功后的图片。在这把他们打成一个压缩包,共享出去,然后搜一个谷歌云盘真实地址解析的网站(搜一下有的是,在这就不挂了,没准几天就死链了)。拿到真实地址以后可以用迅雷下载,
200M
带宽跑满,美滋滋。图片下载下来后再人工给不太满意的图片用
ps
修一下,大功告成。微信小程序
在这我写了一个简单的小程序,实现了相册和图片的管理。使用taro以及 taro-ui构建。
yarn install
npm run dev:weapp
开发npm run build:weapp
打包小程序
结语
为了让我妈能在春节请朋好友装逼大会中胜出真是让我煞费苦心。不知道叔叔阿姨大爷大娘手里的泡脚桶啊,按摩仪呀啥的还香不香了 😂
- 设置阈值,具体数字根据效果来,可以多试几次看看多大数值效果好(
利用AI把老照片修复成彩色4K并实现微信小程序查看管理