Python+DeOldify实现老照片上色功能

作者:剑客阿良_ALiang 时间:2021-07-13 00:04:46 

前言

老照片上色其实很早之前就想写了,也有不少人问了我这个项目。

最近把DeOldify项目好好弄了弄。

项目地址:DeOldify项目地址

先看看项目给出的图片对比效果。

Python+DeOldify实现老照片上色功能

Python+DeOldify实现老照片上色功能

从给出的效果可以看出,上色后的图片对人物、景色、物品、环境等等都变得很生动。

下面来安装一下项目执行环境,测试一下自己的图片。

安装

看一下项目的README中关于安装的部分。

Python+DeOldify实现老照片上色功能

使用anaconda安装环境。安装完成后看一下模型文件需要下载哪些。

Python+DeOldify实现老照片上色功能

仔细看看,文章给出了不同模型的区别。

Python+DeOldify实现老照片上色功能

从作者的描述中,可以看出前面2个主要是针对图像的模型,一个艺术一个稳定,等下使用的时候看看区别。

三个模型如果比较难下载,可以从我的网盘下载,地址如下。

链接 提取码:kr3c 

下载的3个模型文件放到项目根目录下models文件夹内,没有就创建models。

Python+DeOldify实现老照片上色功能

代码改造使用

作者在README中给出了docker快速启动以及api启动方式。有点麻烦,还是自己改一下。

先看一下app.py代码内容。

@app.route("/process", methods=["POST"])
def process_image():

input_path = generate_random_filename(upload_directory,"jpeg")
   output_path = os.path.join(results_img_directory, os.path.basename(input_path))

try:
       if 'file' in request.files:
           file = request.files['file']
           if allowed_file(file.filename):
               file.save(input_path)
           try:
               render_factor = request.form.getlist('render_factor')[0]
           except:
               render_factor = 30

else:
           url = request.json["url"]
           download(url, input_path)

try:
               render_factor = request.json["render_factor"]
           except:
               render_factor = 30

result = None

try:
           result = image_colorizer.get_transformed_image(input_path, render_factor=render_factor, post_process=True, watermarked=True)
       except:
           convertToJPG(input_path)
           result = image_colorizer.get_transformed_image(input_path, render_factor=render_factor, post_process=True, watermarked=True)
       finally:
           if result is not None:
               result.save(output_path, quality=95)
               result.close()

callback = send_file(output_path, mimetype='image/jpeg')
       return callback, 200

except:
       traceback.print_exc()
       return {'message': 'input error'}, 400

finally:
       pass
       clean_all([
           input_path,
           output_path
           ])

可以看出该POST接口主要操作分为:获取文件流、根据参数调整渲染因子(默认为30)、通过image_colorizer对象进行染色操作、最终将文件流返回。按照这个方法我改造了一个直接使用的工具方法。

代码如下:

#!/user/bin/env python
# coding=utf-8
"""
@project : DeOldify
@author  : 剑客阿良_ALiang
@file   : test1.py
@ide    : PyCharm
@time   : 2022-06-17 16:37:13
"""
import os
from pathlib import Path

from app_utils import convertToJPG
from deoldify.visualize import ModelImageVisualizer, get_image_colorizer

def colorizer(input_path, output_dir):
   _output_path = os.path.join(output_dir, os.path.basename(input_path))
   _image_colorizer = get_image_colorizer(artistic=True)
   try:
       result = _image_colorizer.get_transformed_image(input_path, render_factor=30, post_process=True,
                                                       watermarked=True)
   except:
       convertToJPG(input_path)
       result = _image_colorizer.get_transformed_image(input_path, render_factor=30, post_process=True,
                                                       watermarked=True)
   finally:
       if result is not None:
           result.save(_output_path, quality=95)
           result.close()

if __name__ == '__main__':
   colorizer("./data/image/xxx1.jpg", "./data/result1")

一些异常情况我就不处理,如果需要的话,使用的时候加一些补充代码即可。

artistic参数作为是否使用艺术模型的bool参数。

看一下我准备的需要上色的照片。

Python+DeOldify实现老照片上色功能

选择Artistic模型的效果如下:

Python+DeOldify实现老照片上色功能

选择Stable模型的效果如下:

Python+DeOldify实现老照片上色功能

还是可以看出一些区别的,只是本人没啥艺术细菌,看不大出来怎么个艺术法。

注意

1、 上面的工具代码由于引入了项目中的几个方法,可能存在引入包缺失问题。补充安装如下:

pip install opencv-python -i https://pypi.douban.com/simple
pip install scikit-image -i https://pypi.douban.com/simple
pip install ffmpeg -i https://pypi.douban.com/simple

2、安装scikit-image的时候会安装Pillow最新版本,可能会导致执行错误,补充卸载安装Pillow如下:

pip uninstall Pillow
pip install Pillow==6.2.2 

来源:https://blog.csdn.net/zhiweihongyan1/article/details/125339498

标签:Python,DeOldify,老照片,上色
0
投稿

猜你喜欢

  • Python中的延迟绑定原理详解

    2022-07-08 16:18:35
  • python 制作简单的音乐播放器

    2022-09-12 14:30:44
  • 秒杀场景的缓存、队列、锁使用Redis优化设计方案

    2023-05-29 19:07:18
  • Python编程中使用Pillow来处理图像的基础教程

    2021-07-20 10:53:19
  • PHP5在Apache下的两种模式的安装

    2023-11-24 05:18:08
  • Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)

    2023-12-23 19:32:54
  • Flask框架踩坑之ajax跨域请求实现

    2023-12-25 01:28:02
  • Python闭包思想与用法浅析

    2021-08-13 03:54:54
  • 详解Python图像处理库Pillow常用使用方法

    2022-07-17 11:04:53
  • Python实现批量读取图片并存入mongodb数据库的方法示例

    2021-03-25 01:51:53
  • Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

    2022-05-03 10:35:40
  • 一文搞懂​​​​​​​python可迭代对象,迭代器,生成器,协程

    2023-08-22 18:45:13
  • Python实现读取文件的方法总结

    2021-05-04 00:56:26
  • FrontPage XP设计制作网页小技巧八则

    2008-06-04 12:43:00
  • 如何在python字符串中输入纯粹的{}

    2023-09-21 22:56:41
  • Python中使用pprint函数进行格式化输出的教程

    2022-08-26 03:34:17
  • python的scipy.stats模块中正态分布常用函数总结

    2021-06-26 16:03:04
  • Python入门之模块和包用法详解

    2021-08-28 10:58:14
  • Python之Scrapy爬虫框架安装及使用详解

    2022-10-02 18:28:20
  • Python数据分析与处理(二)——处理中国地区信息

    2021-04-04 17:12:26
  • asp之家 网络编程 m.aspxhome.com