百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

如何利用人工智能技术将黑白照片转化为彩色照片呢

toyiye 2024-06-21 11:55 14 浏览 0 评论

首先,请打开 GitHub 官网,搜索并找到 "DeOldify" 这个项目,然后将其源代码下载到您的本地电脑上。

接下来,请确保您的电脑上已经安装了 Python。如果尚未安装,请前往 Python 官网下载并安装适合您电脑系统的版本。对于 64 位的系统,可以选择下载以下文件:https://www.python.org/ftp/python/3.12.0/python-3.12.0-amd64.exe。安装完成后,打开终端并输入以下命令创建 Python 虚拟环境:

Python -m venv venv 来创建一个python的虚拟环境,在执行这个命令后你应该能够在你的当前文件夹下找到一个名为venv的文件,

随后,请在您的项目文件夹下打开终端,输入以下命令激活虚拟环境:

.\venv\Scripts\activate

接下来,切换到 "deoldify" 文件夹,该文件夹包含您刚才从 GitHub 上下载的项目文件。切换目录的命令为:cd deoldify

接下来,执行以下命令安装项目的依赖环境:

pip install -r requirements.txt

在执行这个命令的时候请确保您的电脑网络畅通,且电脑中有一块 NVIDIA 的独立显卡。安装完依赖后,再执行以下命令安装 DeOldify:pip install e .

在执行完这个指令后,再执行以下指令:pip install e . 执行这个指令是为了安装deoldify,

到了这里,运行这个deoldify项目的所有环境和依赖都安装到位了,

接下来请把下面的代码:

import subprocess
import os

# 尝试导入依赖
try:
    import fastai
    import deoldify
    # ...你可以尝试导入其他依赖
    dependencies_installed = True
except ImportError:
    dependencies_installed = False

# 如果依赖没有安装,执行安装命令
if not dependencies_installed:
    subprocess.run(["pip", "install", "-r", "requirements.txt"])

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)

# 获取当前文件的目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 设置 TORCH_HOME 为当前目录下的 torch_cache 文件夹
torch_cache_dir = os.path.join(current_dir, 'torch_cache')
os.environ['TORCH_HOME'] = torch_cache_dir

os.makedirs('result', exist_ok=True)
os.makedirs('input', exist_ok=True)

import torch

if not torch.cuda.is_available():
    print('GPU not available.')

import fastai
from deoldify.visualize import *

torch.backends.cudnn.benchmark = True

# 创建 models 目录
os.makedirs('models', exist_ok=True)

pretrained_model_path = './models/ColorizeStable_gen.pth'
if not os.path.exists(pretrained_model_path):
    
    # 下载预训练模型
    #subprocess.run(["wget", "https://www.dropbox.com/s/axsd2g85uyixaho/ColorizeStable_gen.pth?dl=0", "-O", pretrained_model_path])
    # 或者使用 curl
    subprocess.run(["curl", "-L", "https://www.dropbox.com/s/axsd2g85uyixaho/ColorizeStable_gen.pth?dl=1", "-o", pretrained_model_path])


# 下载预训练模型
#subprocess.run(["wget", "https://www.dropbox.com/s/axsd2g85uyixaho/ColorizeStable_gen.pth?dl=0", "-O", "./models/ColorizeStable_gen.pth"])
#subprocess.run(["curl", "-L", "https://www.dropbox.com/s/axsd2g85uyixaho/ColorizeStable_gen.pth?dl=1", "-o", "./models/ColorizeStable_gen.pth"])

colorizer = get_image_colorizer(artistic=False)

# 提示用户选择图片类型
image_source = input("Enter 'url' for a web image or 'file' for a local image: ").strip().lower()

# 根据用户的选择,提示用户输入相应的 URL 或文件路径
if image_source == 'url':
    image_path_or_url = input("Enter the URL of the image: ").strip()
elif image_source == 'file':
    image_path_or_url = input("Enter the file path of the image: ").strip()
else:
    print('Invalid input. Please run the program again and enter either "url" or "file".')
    exit()  # 退出程序

render_factor = 35
watermarked = True

if image_source == 'url':
    image_path = colorizer.plot_transformed_image_from_url(url=image_path_or_url, render_factor=render_factor, compare=True, watermarked=watermarked)
elif image_source == 'file':
    image_path = colorizer.plot_transformed_image(path=image_path_or_url, render_factor=render_factor, compare=True, watermarked=watermarked)

# 使用 matplotlib 显示图像
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread(image_path)
imgplot = plt.imshow(img)
plt.show()

for i in range(10, 40, 2):
    colorizer.plot_transformed_image('test_images/image.png', render_factor=i, display_render_factor=True, figsize=(8, 8))

if image_source == 'url':
    # 从 URL 下载图片并保存到 input 文件夹
    response = requests.get(image_path_or_url)
    input_image_path = os.path.join('input', 'input_image.jpg')  # 你可以选择其他文件名和格式
    with open(input_image_path, 'wb') as f:
        f.write(response.content)
    
    image_path = colorizer.plot_transformed_image_from_url(url=image_path_or_url, render_factor=render_factor, compare=True, watermarked=watermarked)
elif image_source == 'file':
    # 复制本地图片到 input 文件夹
    input_image_path = os.path.join('input', os.path.basename(image_path_or_url))
    shutil.copy(image_path_or_url, input_image_path)
    
    image_path = colorizer.plot_transformed_image(path=image_path_or_url, render_factor=render_factor, compare=True, watermarked=watermarked)

# 保存处理后的图片到 result 文件夹
result_image_path = os.path.join('result', 'result_image.jpg')  # 你可以选择其他文件名和格式
shutil.copy(image_path, result_image_path)

复制粘贴到一个txt文档中,然后将这个txt文档重命名为go_v1.py,并将这个go_v1.py文档移动到项目deoldify文件夹下,如下所示:

接下来,请记住你的虚拟环境还没有退出,如果退出了请重新激活虚拟环境,然后将虚拟环境切换到deoldify文件夹下,随后运行以下命令:

Python go_v1.py ,不久后你的电脑桌面会弹出如下画面:

到这里你需要选择你需要上色的黑白照片,如果你选择url,那么你就在这提示词“Enter 'url' for a web image or 'file' for a local image: “背后输入url,那么,接下来你应该选择网络上的一张黑白照片的地址,这里我输入的地址是这个:https://cdn.pixabay.com/photo/2016/01/17/15/15/albert-einstein-1145030_1280.jpg

如下所示:

按下回车后,等上几秒钟,你就得到了如下的画面:

上面这副图片的左侧表示的原链接中的黑白照片,而右边则是经过deoldify软件处理后的彩色照片,更多的黑白图片转彩色照片的展示示例如下所示:

上述黑白照片url地址分给为:

https://cdn.pixabay.com/photo/2018/01/01/15/24/one-3054343_1280.jpg

https://cdn.pixabay.com/photo/2012/11/19/01/41/roses-66517_1280.jpg

https://cdn.pixabay.com/photo/2015/03/24/13/13/self-portrait-687589_1280.jpg

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码