Python+DeOldify实现老照片上色功能
作者:剑客阿良_ALiang 发布时间:2021-07-13 00:04:46
前言
老照片上色其实很早之前就想写了,也有不少人问了我这个项目。
最近把DeOldify项目好好弄了弄。
项目地址:DeOldify项目地址
先看看项目给出的图片对比效果。
从给出的效果可以看出,上色后的图片对人物、景色、物品、环境等等都变得很生动。
下面来安装一下项目执行环境,测试一下自己的图片。
安装
看一下项目的README中关于安装的部分。
使用anaconda安装环境。安装完成后看一下模型文件需要下载哪些。
仔细看看,文章给出了不同模型的区别。
从作者的描述中,可以看出前面2个主要是针对图像的模型,一个艺术一个稳定,等下使用的时候看看区别。
三个模型如果比较难下载,可以从我的网盘下载,地址如下。
链接 提取码:kr3c
下载的3个模型文件放到项目根目录下models文件夹内,没有就创建models。
代码改造使用
作者在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参数。
看一下我准备的需要上色的照片。
选择Artistic模型的效果如下:
选择Stable模型的效果如下:
还是可以看出一些区别的,只是本人没啥艺术细菌,看不大出来怎么个艺术法。
注意
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
来源:https://blog.csdn.net/zhiweihongyan1/article/details/125339498


猜你喜欢
- python excel文件(.xls文件)如何处理xlrd 用于读取文件,xlwt 用于写入文件,xlutils 是两个工具包的桥梁,也就
- 1. vscode相关配置w3c school 手册: https://www.w3school.com.cn/html/inde
- 发送端代码:#!/usr/bin/python# -*- coding: UTF-8 -*-import socketimport stru
- MYSQL对大小写敏感见字如面,见标题知内容。你有遇到过因为MYSQL对大小写敏感而被坑的体验吗?之前看过阿里巴巴Java开发手册,在MyS
- 作者:JavaScript Kit译者:子乌(Sheneyan)翻译日期:2006-02-12英文原文:Conditional Compil
- 1、python安装可以跨平台2、有两个版本2.7和3.6,第三方库适用2.7版,两个版本不兼容windows安装:第一种方法官网安装:在官
- 两行JavaScript代码的QQ窗口抖动效果<img id="win" style='pos
- MySQL存储过程SAVEPOINT ROLLBACK to示例如下:DELIMITER $$DROP PROCEDURE IF EXIST
- 开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用x
- SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为:在执行增删改语句(产生事务日志)的过程中提示,The tr
- 见下表:序号保留字序号保留字序号保留字1ADD80ESCAPE159OR2ABSOLUTE81EXCEPT160ORDER3ACTION82
- asp如何获知页面上的图象的实际尺寸大小?见下面的两个asp文件:<!--#include virtual="/i
- 一、数字类型内置方法1.1 整型的内置方法作用描述年龄、号码、id号定义方式x = 10x = int('10')x = i
- 之前就见过很多网站在侧边栏上使用<dl />标签对来完成侧边栏栏目的布局,最近在研究DEDECMS的默认模板时,也发现该模板在大
- 一、绘制总体图形import numpy as npimport matplotlib.pyplot as pltfrom mpl_tool
- 本文实例讲述了Python基于pygame模块播放MP3的方法。分享给大家供大家参考,具体如下:安装pygame(可参考:安装Python和
- 1. 前言春联是中国传统文化中最具内涵的元素之一,它以对仗工整、简洁精巧的文字描绘美好形象,抒发美好愿望,是中国特有的文学形式,是华人们过年
- FLV在线转换,是目前主流播客网上通用的一种视频解决方案需要用到的组件 ASPExecmencoderffmpeg.exe第一步骤: 在线转
- 如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级
- 原则, 以datetime为中心, 起点或中转, 转化为目标对象, 涵盖了大多数业务场景中需要的日期转换处理步骤:1. 掌握几种对象及其关系