基于DeOldify的给黑白照片、视频上色

老照片常常因为当时的技术限制而只有黑白版本。然而现代的 AI 技术,如 DeOldify,可以让这些照片重现色彩。

本教程将详细介绍如何使用 DeOldify 来给老照片上色。

在这里插入图片描述

文章目录

  • 准备工作
  • 执行代码
    • 图片上色
    • 视频上色
  • 总结

准备工作

这里用 git clone 命令克隆了 DeOldify 的 GitHub 仓库,然后安装了所需的依赖库。

git clone https://github.com/jantic/DeOldify.git

常规的需要创建和激活虚拟环境,并安装相关依赖包。

conda create --name python38 python=3.8
conda activate python38 pip install -r requirements.txt

然后会可能会提示

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
onnxruntime 1.14.1 requires flatbuffers, which is not installed.
onnxruntime 1.14.1 requires sympy, which is not installed.

这里还需要安装flatbufferssympy

pip install flatbuffers sympy

安装完成之后你的文件目录是这样的,然后将虚拟环境目录移动到当前目录下。

在这里插入图片描述
接下来需要下载模型文件。

下载地址在 https://huggingface.co/spensercai/DeOldify/tree/main 。

在这里插入图片描述
将下载好的文件移动到models文件夹下即可。

在这里插入图片描述

执行代码

图片上色

  • 导入依赖库:包括DeOldify库、matplotlib.pyplot、torch等。这些库用于图像处理、可视化以及深度学习任务。
  • 设置设备:使用DeOldify库的device.set()函数将计算设备设置为GPU0。这意味着后续的图像处理任务将在GPU上进行加速处理,如果有多个GPU可用,可以根据需要进行选择。
  • 设置图像风格:使用plt.style.use('dark_background')设置了Matplotlib图形的风格,使其采用黑色背景。
  • 禁用警告:使用warnings.filterwarnings()函数来忽略特定类型的警告,这里忽略了UserWarning类型的警告消息。
  • 创建着色器:使用get_image_colorizer(artistic=True)创建了一个图像着色器对象,其中artistic=True表示使用艺术化的着色方式。
  • 设置参数
    • render_factor定义了渲染因子,影响着色的细节程度。
    • source_urlsource_path分别指定了输入图像的URL和本地路径。
    • result_path用于存储着色后的图像的路径,初始设置为None。
  • 图像着色
    • 代码根据source_url是否为空,选择不同的方式来进行图像着色。如果source_url不为空,将从URL加载图像并进行着色,否则从本地路径加载图像进行着色。着色后的结果将存储在result_path中。
# env setup.py/py
# -*- coding: UTF-8 -*-
'''
@Project :setup.py 
@File    :porcess_img.py
@IDE     :PyCharm 
@Author  :Mr数据杨
@Date    :2023/10/11 12:43 
'''from deoldify import device
from deoldify.device_id import DeviceId# choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)from deoldify.visualize import *plt.style.use('dark_background')
torch.backends.cudnn.benchmark = True
import warningswarnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")colorizer = get_image_colorizer(artistic=True)render_factor = 35
source_url = None
source_path = 'data/img.jpg'
result_path = Noneif source_url is not None:result_path = colorizer.plot_transformed_image_from_url(url=source_url, path=source_path, render_factor=render_factor, compare=True)
else:result_path = colorizer.plot_transformed_image(path=source_path, render_factor=render_factor, compare=True)show_image_in_notebook(result_path)

最后会在result_images文件夹下生成结果图片。

在这里插入图片描述

视频上色

执行代码之前需要在项目目录下创建video文件夹,并在文件夹下创建source文件夹。

这里执行的代码不再解释,理论上和上面图片的差不多,就是处理的时候先将视频转帧然后依次上色最后再合并在一起,保存成视频。

# env setup.py/py
# -*- coding: UTF-8 -*-
'''
@Project :setup.py 
@File    :porcess_img.py
@IDE     :PyCharm 
@Author  :Mr数据杨
@Date    :2023/10/11 12:43 
'''from deoldify import device
from deoldify.device_id import DeviceId# choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)from deoldify.visualize import *plt.style.use('dark_background')
import warningswarnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")colorizer = get_video_colorizer()render_factor = 21# source_url='https://twitter.com/silentmoviegifs/status/1116751583386034176'
source_url = None
file_name = 'video'
file_name_ext = file_name + '.mp4'
result_path = Noneif source_url is not None:result_path = colorizer.colorize_from_url(source_url, file_name_ext, render_factor=render_factor)
else:result_path = colorizer.colorize_from_file_name(file_name_ext, render_factor=render_factor)show_video_in_notebook(result_path)

总结

DeOldify 不仅能够给老照片上色,还能用于其他许多有趣的应用,如老电影修复等。希望这个简单的教程能帮助读者更容易地掌握这一技术。

如果想使用Stable Diffusion进行操作的话可以参考 Stable diffusion 用DeOldify给黑白照片、视频上色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用R语言进行生态环境数据的可视化分析:方法和实践

R语言是一种用于统计分析、绘图的语言和操作环境,属于GNU系统的一个自由、免费、开源的软件,它是一个用于统计计算和统计制图的优秀工具1。 R是由Ross Ihaka和Robert Gentleman在1993年开发的一种编程语言,拥有广泛的统计和图形方法目录&…

16个最佳Chrome插件推荐给做前端的你

作为Web开发人员每天的工作就是不断地开发、测试、优化,涉及到语言、布局、字体、样式等技术。整个开发过程离不开浏览器。浏览器插件就像是浏览器的“装备”,可以增加浏览器额外的特性和功能。针对开发人员的日常工作,有些浏览器插件非常实用…

TensorFlow入门(十八、激活函数)

激活函数是什么? 单个神经元的网络模型: 用计算公式表达如下: 即在神经元中,输入的x通过与权重w相乘,与偏置量b求和后,还被作用了一个函数,这个函数就是激活函数。 激活函数的作用 如果没有激活函数,整个神经元模型就是一个简单的线性方程。而在现实生活中,线性方程能解决的事…

超简单的视频截取方法,迅速提取所需片段!

“视频可以截取吗?用相机拍摄了一段视频,但是中途相机发生了故障,录进去了很多不需要的片段,现在想截取一部分视频出来,但是不知道方法,想问问广大的网友,知不知道视频截取的方法。” 无论是工…

2023年中国牙线市场规模、竞争现状及行业需求前景分析[图]

牙线是由合成纤维或其他材料制成,或添加香料、色素、活性成分等,用来清洁牙齿邻面附着物的线。能够有效包裹牙齿,对于清洁平面/凸起牙面和牙齿邻接面的牙菌斑效果很好,还可以实现对于牙缝间食物/异物的剔除,有效清洁口…

linux后台运行java项目/ jar包:nohup 命令

1.提出问题 我们把一个 SpringBoot 工程导出为 jar 包,jar 包上传到阿里云 ECS 服务器上,使用 java -jar xxx-xxx.jar 命令启动这个 SpringBoot 程序。此时我们本地的 xshell 客户端必须一直开着,一旦 xshell 客户端关闭,java -j…

CPU性能分析--火焰图使用

记录工具使用说明,火焰图原理网上分析很多。主要用来分析函数调用栈占用的cpu利用率,分析函数性能。 perf安装: sudo apt-get install linux-tools-common sudo apt-get install linux-tools-"(uname -r)" sudo apt-get install …

基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps…

微服务必学!RedisSearch终极使用指南,你值得拥有!

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…

基于乌燕鸥优化的BP神经网络(分类应用) - 附代码

基于乌燕鸥优化的BP神经网络(分类应用) - 附代码 文章目录 基于乌燕鸥优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.乌燕鸥优化BP神经网络3.1 BP神经网络参数设置3.2 乌燕鸥算法应用 4.测试结果&#x…

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法,它是YOLO(You Only Look Once)系列模型的进化版本。YOLOv5是由Ultralytics开发的,基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

Python并发编程简介

1、Python对并发编程的支持 多线程: threading, 利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成多进程: multiprocessing, 利用多核CPU的能力,真正的并行执行任务异步IO: asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行使用Lo…

Altium如何查看导线长度?凡亿悄悄地告诉你

Altium Designer(AD)是全球应用最广泛的EDA工具之一,它提供了一套完整的解决方案,从原理图设计、模拟、PCB布局和布线,到最后的Gerber输出,都可在该平台上完成,因此是很多电子工程师的必学软件之…

Java学数据结构(4)——PriorityQueue(优先队列) 二叉堆(binary heap)

前言 数据结构与算法作为计算机科学的基础,是一个重点和难点,在实际编程中似乎看不它们的身影,但是它们有随处不在,如影随形。 本系列博客是《数据结构与算法分析—Java语言描述》的读书笔记,合集文章列表如下&#…

【开发日记】Docker搭建Maven私服

文章目录 前言1、拉取镜像2、创建本地目录3、启动容器4、访问5、上传依赖6、项目配置私服 前言 Maven私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。 在公司…

docker 部署 xxl-job SpringBoot 整合 xxl-job 执行任务

概述 XXL-JOB是一个轻量级的分布式任务调度平台,具有以下特点: 调度模块:负责管理调度信息,发出调度请求,支持可视化和动态的操作,监控调度结果和日志,支持执行器Failover 执行模块&#xff1…

【axmol-2.1 vs cocos2dx性能备忘】

axmol-2.1-08c0605 cocos2d-x-4.0 cocos2d-x-3.17.1 结论 从多边形Sprite渲染性能测试用例看,axmol相对于cocos2d-x-4.0提升42%, 相对于cocos2d-x-3.17.1提升30.8%

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…

CPU的执行流程

CPU的执行流程 取指令(Instruction Fetch):CPU 从程序存储器(通常是内存)中获取要执行的下一条指令。这个过程包括以下步骤: CPU 从程序计数器(Program Counter,PC)中获…

chromium线程模型(1)-普通线程实现(ui和io线程)

通过chromium 官方文档,线程和任务一节我们可以知道 ,chromium有两类线程,一类是普通线程,最典型的就是io线程和ui线程。 另一类是 线程池线程。 今天我们先分析普通线程的实现,下一篇文章分析线程池的实现。&#xff…