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 continue语句用法实例
Mar 11 Python
用Python展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
Pycharm学习教程(4) Python解释器的相关配置
May 03 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 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中explode与split的区别介绍
2012/10/03 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php限制文件下载速度的代码
2015/10/20 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
工商企业管理应届生求职信
2014/05/04 职场文书
青春奉献演讲稿
2014/05/08 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
浅谈Python数学建模之固定费用问题
2021/06/23 Python
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis