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实现分割文件及合并文件的方法
Jul 10 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python中应该使用%还是format来格式化字符串
Sep 25 Python
python实现简单登陆系统
Oct 18 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
python3使用GUI统计代码量
Sep 18 Python
python的launcher用法知识点总结
Aug 07 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
python3 字符串str和bytes相互转换
Mar 23 Python
深入理解pytorch库的dockerfile
Jun 10 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 daodb插入、更新与删除数据
2009/03/19 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
js对象数组按属性快速排序
2011/01/31 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python中进程和线程的区别详解
2017/10/29 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
深入浅析Python中的迭代器
2019/06/04 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python时间日期操作方法实例小结
2020/02/06 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
怎样声明子类
2013/07/02 面试题
程序集与命名空间有什么不同
2014/07/25 面试题
P/Invoke是什么
2015/07/31 面试题
如何执行一个shell程序
2012/11/23 面试题
实习评语大全
2014/04/26 职场文书
环保倡议书500字
2014/05/15 职场文书
淮海战役观后感
2015/06/11 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
DSP接收机前端设想
2022/04/05 无线电