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调用cmd复制文件代码分享
Dec 27 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
Python元字符的用法实例解析
Jan 17 Python
Python List cmp()知识点总结
Feb 18 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
python实现画图工具
Aug 27 Python
python归并排序算法过程实例讲解
Nov 04 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
PHP实现的日历功能示例
2018/09/01 PHP
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
请说出以下代码输出什么
2013/08/30 面试题
网站编辑求职信
2013/10/17 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
五一家具促销方案
2014/01/10 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
五心教育心得体会
2014/09/04 职场文书
体育个人工作总结
2015/02/09 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
催款函范本大全
2015/06/24 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android