利用AI把老照片修复成彩色4K并实现微信小程序查看管理

​ 马上要过年了,为了让我妈可以在亲戚朋友面前愉快的聊(装)天(逼),我决定把家里的老照片修复一下,一些爸妈年轻时的黑白照片也弄成彩色的。不然他们老以为我坐电脑前面就是玩游戏 😂。

先上结果对比,左面是老照片,右面是修复后的。

我妈年轻的时候咋这么好看 😆

对比图

确认过眼神,就是我要的亚子,那么开始操作吧。

1. 扫描相片

​ 首先第一步需要把照片扫描到电脑上,有高清的扫描仪是最好的,但是像我这种穷 b 就只能用手机完成了,在这用的是 Google 良心应用照片扫描仪官网Google PlayApp Store)。

官方宣传说:

毫无眩光的高分辨率扫描仪

实际使用下来效果非常棒,就是比较累人,需要一张一张的扫,毕竟没有扫描仪方便。

2. 放大照片

​ 照片都是有些年头的了,那个年代还都是胶卷相机照的,本身效果就不太好,所以第一步就是把相片放大,利用 AI 补充一些细节。

​ 在这使用的是一个高性能图像放大算法waifu2x ,这个算法最初是给动漫图片放大使用的(不愧是日本人开发的),但是实测UpPhoto模型对于照片的成像效果也非常不错,市面上所谓的无损放大大部分都是假的,一小部分又得收费,实际效果感觉没啥太大区别。而且这个算法还支持CUDA,网上 99%搜到的在线“无损”放大都是基于这个算法。那这么好用直接开整就完事了。

​ 首先先下载waifu2x-caffe,这是waifu2xCaffe版,也就是GUI(客户端)的版本,有简体中文的语言包,还支持GPU加速

​ 使用很简单,在releases里下载最新版本的,直接解压就能用。如果你的显卡比较新,支持GPU加速的话那么比直接CPU计算快上好几倍。配置GPU加速也很简单(windows)

  • 首先去英伟达下载CUDAcuDNN。注意对应版本,比如我的显卡支持最新的CUDA,那么我下载的就是最新(2019-12)cuda_10.2.89_441.22_win10.exe(国内网络环境不好,所以一定要下载local版的)。

  • 然后下载cuDNNcuDNN需要对应CUDA的版本,上面下载的是CUDA 10.2,所以在这下载cuDNN v7.6.5 (November 18th, 2019), for CUDA 10.2

注意:cuDNN需要登录才能下载

下载完成之后之后就可以开始安装了
  1. 安装CUDA之前记得安装Visual Studio。两个软件都是下一步到底就行。

  2. 之后把cuDNN解压出来放到CUDA的安装目录里,我的是在默认安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2

环境变量会自动配置,网上的教程都过时了,一直下一步到结束就行。

然后点一下软件的cuDNN检查看看是否配置成功了。

waifu2x-caffe

​ 当然不配置也不影响使用,就是会非常非常慢。之后就是中文界面的傻瓜操作了,选择需要转换的文件夹和输出的文件夹。自动降噪放大3级2xUpPhoto 模型_(或者拿你的照片多试几次,挑一个效果最好的)_。点击开始之后就是漫长的等待了。我转换了1000 多张相片花了大概4 个多小时

3. 压缩照片大小

​ 照片放大以后位深度会比较大,整体照片体积也会很大,比我的一张照片大概就有50M左右,所以我们需要压缩一下,本来打算使用腾讯出的智图,效果还不错,但是依赖的imagemagick默认是CPU运行,GPU的版本还没编译成功,无奈放弃了。后来发现PS的压缩效果也很不错,所以直接就用PS了。PS本身就带录制功能,直接录制一下压缩的操作然后执行就行了,在这就不赘述了。

4. 搭建图床

​ 后面我们需要用到图片的url,微信小程序也需要一个接口。所以在这搭建一个图床,或者使用其他免费的图床也可以(免费图床有随时挂掉/网络不稳定的几率,做好准备)

​ 我使用的是一个开源的图床服务Lychee 。这是一个基于PHP的图床服务,搭建也很简单。在这就不多说了,搜一下教程一大堆。

​ 简单来说就是:

  1. clone项目
  2. 配置目录权限
  3. 在云供应商申请免费的ssh证书,配置https
  4. 配置mysql
  5. 配置php
  6. 配置nginx
  7. 打开地址输入数据库账号密码会自动建表
  8. 这个项目自带中文,在设置里改一下就可以了

5. AI 上色

​ 上述工作完成后就是关键的一步。给黑白或者褪色的照片上色了。在这使用的是DeOldify这个项目,这应该是全世界最知名的开源AI上色库了。你可以下载到本地,作者在这说过本地搭建并不简单,而且我确实失败了(头铁被锤爆了),不知道是windows上Docker的原因还是其他问题。

​ 但是谷歌给大众提供了一个平台Colaboratory,官方简介:

Colaboratory是一个免费的 Jupyter笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。

​ 借助 Colaboratory,您可以编写和执行代码、保存和共享分析结果,以及利用强大的计算资源,所有这些都可通过浏览器免费使用。

​ 简单来说这是一个谷歌开放的一款研究工具,主要用于机器学习的开发和研究。这款工具现在拥有非常好的GPU而且目前可以免费使用

​ 商业GPU免费使用!有没有?实测内存不够了居然还可以免费加!除了国内登不上简直没有其他缺点 🐶。

​ 首先打开项目给建好的笔记地址 _(不保证最新,建议从GitHub上打开)_。第一步先选择复制到云端硬盘。因为笔记本身并不满足咱们的需求,所以需要对原代码进行改动,复制到自己的云端硬盘以后下次打开就可以直接使用了。

​ 笔记复制到自己的云盘上以后第一步先挂载自己的云盘到Colab上。因为每次重新打开笔记的时候(重新打开浏览器之类的操作)都会重新分配新的服务器,所以要把自己云盘挂载上,训练成功的图片要存到自己的云盘上,否则重新打开/刷新以后就没有了。

挂载这一步的代码已经有了:

  1. 直接点击from google.colab import drive balabalabala前面的按钮

    挂载云盘

  2. 出现一个这样的链接https://accounts.google.com/o/oauth2/auth?client_id=*********,然后直接点击这个链接

  3. 登陆你的Google账号

  4. 获得一个很长的字符串

  5. 把那行字符串复制下来粘贴到出现的输入框里回车

  6. 看看左面文件选项卡下有没有你的网盘目录,没有就重新操作

    ​ 挂载云盘成功以后每一个运行都点一下,等待执行完就可以了。执行到最后一步(Colorize!!)的时候可以随便搜一个黑白照片试一下效果。成功以后可以进行正式的训练了。

    项目本身提供的代码一次只能训练一张,得手动执行 粘贴图片地址-训练-保存,这肯定不符合需求,像我有 1000 多张图片,一个一个整估计得明年过年才能训练完了。。。所以在这修改一下代码。

    第一步把原本笔记里的最后一步清空,写下咱们的代码:
    1. 设置阈值,具体数字根据效果来,可以多试几次看看多大数值效果好(min: 7, max: 45)
    1
    render_factor = 45
    1. 所有图片的url

    上面搭建图库就是为了这个,可以直接在network里找到所有图片的数组。格式化一下:

    1
    你的图片数组.map(p => `你的域名${p.url}`);
    1. 然后把所有地址粘过来:
    1
    paths=["地址1","地址2"...]
    1. 定义一个内存释放的函数,训练的时候不会自动释放内存,次数多了直接就崩溃了,所以每训练完一张图片就回收一下内存:
    1
    2
    3
    4
    5
    6
    def 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. 之后循环进行训练:
    1
    2
    3
    4
    for 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构建。

    1. yarn install

    2. npm run dev:weapp开发

    3. npm run build:weapp打包小程序

    结语

    ​ 为了让我妈能在春节请朋好友装逼大会中胜出真是让我煞费苦心。不知道叔叔阿姨大爷大娘手里的泡脚桶啊,按摩仪呀啥的还香不香了 😂

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×