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的Django框架上部署ORM库的教程
Apr 20 Python
在Python中操作列表之list.extend()方法的使用
May 20 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
python列表返回重复数据的下标
Feb 10 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
什么是python的id函数
Jun 11 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
Django实现聊天机器人
May 31 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实现Socket服务器的代码
2008/04/03 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
Python新手学习raise用法
2020/06/03 Python
Python页面加载的等待方式总结
2021/02/28 Python
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
外贸学院会计专业应届生求职信
2013/11/14 职场文书
优秀大学生推荐信范文
2013/11/28 职场文书
综治宣传月活动总结
2014/04/28 职场文书
考勤制度通知
2015/04/25 职场文书
不同意离婚代理词
2015/05/23 职场文书
小学生家长意见
2015/06/03 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle