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实现从ftp服务器下载文件的方法
Apr 30 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
关于python2 csv写入空白行的问题
Jun 22 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
python3 读取Excel表格中的数据
Oct 16 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Python 列表的清空方式
Jan 13 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
Python如何使用input函数获取输入
Aug 06 Python
python 逐步回归算法
Apr 06 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仿discuz分页效果代码
2008/10/02 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python中list循环语句用法实例
2014/11/10 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
党章学习思想汇报
2014/01/14 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
新郎答谢词
2015/01/04 职场文书
爱国主义电影观后感
2015/06/18 职场文书