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 BeautifulSoup使用方法详解
Nov 21 Python
Python中请使用isinstance()判断变量类型
Aug 25 Python
跟老齐学Python之让人欢喜让人忧的迭代
Oct 02 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
python开发之函数定义实例分析
Nov 12 Python
将python图片转为二进制文本的实例
Jan 24 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
对Python _取log的几种方式小结
Jul 25 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 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中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jQuery知识点整理
2015/01/30 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
通过实例解析Python调用json模块
2019/12/11 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
python和php哪个更适合写爬虫
2020/06/22 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
类如何去实现接口
2013/12/19 面试题
SQL Server面试题
2013/04/04 面试题
如何开发一个JQuery插件
2016/07/28 面试题
绩效专员岗位职责
2013/12/02 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书