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


Posted in Python onJune 21, 2022

前言

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

最近把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 

以上就是Python+DeOldify实现老照片上色功能的详细内容,更多关于Python DeOldify老照片上色的资料请关注三水点靠木其它相关文章!


Tags in this post...

Python 相关文章推荐
python异步任务队列示例
Apr 01 Python
10款最好的Web开发的 Python 框架
Mar 18 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
浅谈Python处理PDF的方法
Nov 10 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
基于python OpenCV实现动态人脸检测
May 25 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
Python threading的使用方法解析
Aug 28 Python
Python中过滤字符串列表的方法
Dec 22 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 #Python
virtualenv隔离Python环境的问题解析
Jun 21 #Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 #Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 #Python
pd.DataFrame中的几种索引变换的实现
Python实战实现爬取天气数据并完成可视化分析详解
pandas时间序列之pd.to_datetime()的实现
Jun 16 #Python
You might like
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
php如何获取文件的扩展名
2015/10/28 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
js单向链表的具体实现实例
2013/06/21 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
React实现轮播效果
2020/08/25 Javascript
python比较2个xml内容的方法
2015/05/11 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
实例讲解Python爬取网页数据
2018/07/08 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
深入了解Python在HDA中的应用
2019/09/05 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
初中学生期末评语
2014/04/24 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
就业意向协议书
2015/01/29 职场文书
优秀团员自我评价
2015/03/10 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
如何利用Python实现一个论文降重工具
2021/07/09 Python
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL