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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
pyside写ui界面入门示例
Jan 22 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
python中base64加密解密方法实例分析
May 16 Python
python编写简单爬虫资料汇总
Mar 22 Python
python取代netcat过程分析
Feb 10 Python
Python打印输出数组中全部元素
Mar 13 Python
python可迭代对象去重实例
May 15 Python
django中related_name的用法说明
May 20 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
python中24小时制转换为12小时制的方法
Jun 18 Python
Python集合的基础操作
Nov 01 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之COOKIE支持详解
2010/09/20 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python生成随机数的方法
2014/01/14 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
python安装与使用redis的方法
2016/04/19 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
python列表使用实现名字管理系统
2019/01/30 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
python opencv如何实现图片绘制
2020/01/19 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
《雪儿》教学反思
2014/04/17 职场文书
初中政教处工作总结
2015/08/12 职场文书
vue打包时去掉所有的console.log
2022/04/10 Vue.js