【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程

news2024/10/27 10:10:24

引言

OpenAI 推出的 DALL·E 工具因其能够生成令人惊叹的艺术作品而备受瞩目。DALL·E 不仅能够生成静态图像,还能根据用户的需求进行风格化处理,创造出独特的艺术作品。通过 OpenAI 的 API,你可以轻松将 DALL·E 的强大功能集成到你的 Python 程序中,实现自动化的图像生成。本文将为你提供一个详细的教程,帮助你快速上手。

文章目录

    • 引言
    • 本文价值
    • 一、什么是图像生成?
      • DALL-E
      • 图像生成
      • 图像编辑
      • 图像变体
    • 二、快速开始 🚀
      • 安装 OpenAI Python 库
      • 生成图像的基本代码
      • 保存生成的图像数据
    • 三、解码 Base64 编码的 JSON 响应
    • 四、创建图像的变体
    • 五、处理和优化生成的图像
      • 安装 Pillow
      • 图像处理示例
    • 总结

本文价值

在本教程中,你将学习到:

  • 什么是图像生成?
  • 如何快速安装和配置 OpenAI 的 Python 库
  • 探索与图像生成相关的 API 调用
  • 根据文本提示生成图像
  • 制作生成图像的不同版本
  • 将 Base64 格式的 JSON 响应转换为 PNG 图像文件
  • 将图像数据保存到本地文件中
  • 处理和优化生成的图像

一、什么是图像生成?

图像生成模型可以通过提示和/或基础图像,创造出全新的内容。这些生成式 AI 模型不仅能够生成逼真的图像和艺术作品,还可以更改图像的布局或样式,并创建现有图像的变体。

DALL-E

除了自然语言处理功能外,生成式 AI 模型还具备编辑和创建图像的能力。DALL-E 是处理图像的主要模型,与 GPT 模型类似,它的版本也会不断更新,例如 DALL-E 2。图像功能通常分为三类:图像创建、图像编辑和图像变体。

图像生成

通过提供详细的文本提示,可以生成原始图像。提示越详细,模型越能准确生成所需的结果。

使用 DALL-E,你甚至可以请求特定风格的图像,例如“文森特梵高风格的狗”。这些风格也可以用于图像编辑和变体生成。

例如,给定提示“一头大象站立着,头顶一个汉堡,数字艺术风格”,模型会生成一幅准确描述该内容的数字艺术图像。
在这里插入图片描述

当提示更具体时(如“一只粉色的狐狸穿过田野,莫奈风格”),模型会生成更为详细和相似的图像。
在这里插入图片描述

图像编辑

如果提供了图像,DALL-E 可以根据要求编辑图像,通过更改样式、添加或删除元素,或生成新的内容来填充指定区域。上传原始图像并指定一个透明掩模,指示要编辑的图像区域,然后提供编辑提示,模型会生成适当的内容来填充该区域。

图像变体

通过提供图像并指定所需的变体数量,可以生成图像的变体。图像的主要内容将保持不变,但对象的位置、视线、背景场景和颜色等方面可能会有所不同。

例如,如果上传了一张大象戴着汉堡作为帽子的图像,你会得到同一对象的各种变体。
在这里插入图片描述


二、快速开始 🚀

利用 Python、DALL·E 和 OpenAI API 从文本生成图像的过程非常有趣。为了确保你能在 Python 脚本中持续使用这些生成的图像,建议直接获取图像数据,而不是通过 URL 进行访问。以下是一个简单的示例代码:

安装 OpenAI Python 库

首先,你需要安装 OpenAI 的 Python 库。可以通过 pip 命令轻松完成:

pip install openai  # 安装 OpenAI 的 Python 库

生成图像的基本代码

以下是生成图像的基本代码示例:

from openai import OpenAI  # 导入 OpenAI 库

client = OpenAI()  # 创建 OpenAI 客户端实例

# 定义生成图像的文本提示
PROMPT = "An eco-friendly computer from the 90s in the style of vaporwave"

# 调用 DALL·E API 生成图像
response = client.images.generate(
    model="dall-e-2",  # 使用 DALL·E 2 模型
    prompt=PROMPT,  # 输入的文本提示
    n=1,  # 生成一张图像
    size="256x256",  # 图像的尺寸
    response_format="b64_json",  # 响应格式为 Base64 编码的 JSON
)

# 打印生成的图像数据的前50个字符
print(response.data[0].b64_json[:50])

在这个脚本中,通过将 response_format 参数设置为 "b64_json",你可以直接获取 Base64 编码的图像数据,而不是通过 URL。

保存生成的图像数据

为了防止丢失生成的图像数据,建议将 JSON 响应保存到文件中,而不是仅仅打印到终端:

import json  # 导入 JSON 库
from pathlib import Path  # 导入路径处理库
from openai import OpenAI  # 导入 OpenAI 库

client = OpenAI()  # 创建 OpenAI 客户端实例

# 定义生成图像的文本提示
PROMPT = "An eco-friendly computer from the 90s in the style of vaporwave"
DATA_DIR = Path.cwd() / "responses"  # 定义响应文件夹路径

DATA_DIR.mkdir(exist_ok=True)  # 创建响应文件夹(如果不存在)

# 调用 DALL·E API 生成图像
response = client.images.generate(
    model="dall-e-2",  # 使用 DALL·E 2 模型
    prompt=PROMPT,  # 输入的文本提示
    n=1,  # 生成一张图像
    size="256x256",  # 图像的尺寸
    response_format="b64_json",  # 响应格式为 Base64 编码的 JSON
)

# 定义保存 JSON 响应的文件名
file_name = DATA_DIR / f"{PROMPT[:5]}-{response.created}.json"

# 将响应保存为 JSON 文件
with open(file_name, mode="w", encoding="utf-8") as file:
    json.dump(response.to_dict(), file)  # 保存响应为 JSON 文件

通过以上代码,你可以在 Python 脚本中实现文件操作功能,确保生成的图像数据不会丢失。

三、解码 Base64 编码的 JSON 响应

你已经将 PNG 图像以 Base64 编码的字符串形式保存在 JSON 文件中。现在,你需要解码这些数据,以便查看图像:

import json  # 导入 JSON 库
from base64 import b64decode  # 导入 Base64 解码函数
from pathlib import Path  # 导入路径处理库

DATA_DIR = Path.cwd() / "responses"  # 定义响应文件夹路径
JSON_FILE = DATA_DIR / "An ec-1667994848.json"  # 定义 JSON 文件路径
IMAGE_DIR = Path.cwd() / "images" / JSON_FILE.stem  # 定义图像文件夹路径

IMAGE_DIR.mkdir(parents=True, exist_ok=True)  # 创建图像文件夹(如果不存在)

# 读取 JSON 文件
with open(JSON_FILE, mode="r", encoding="utf-8") as file:
    response = json.load(file)  # 加载 JSON 数据

# 解码并保存图像
for index, image_dict in enumerate(response["data"]):
    image_data = b64decode(image_dict["b64_json"])  # 解码 Base64 编码的图像数据
    image_file = IMAGE_DIR / f"{JSON_FILE.stem}-{index}.png"  # 定义图像文件名
    with open(image_file, mode="wb") as png:
        png.write(image_data)  # 保存解码后的图像

这个脚本会读取指定的 JSON 文件,从中提取 Base64 编码的字符串,解码它,并将解码后的图像数据保存为 PNG 文件。

四、创建图像的变体

如果你有一张图像,但它与理想的图像还不完全一致,你可以利用 DALL·E 2 来创建它的变体:

import json  # 导入 JSON 库
from base64 import b64decode  # 导入 Base64 解码函数
from pathlib import Path  # 导入路径处理库
from openai import OpenAI  # 导入 OpenAI 库

client = OpenAI()  # 创建 OpenAI 客户端实例

DATA_DIR = Path.cwd() / "responses"  # 定义响应文件夹路径
SOURCE_FILE = DATA_DIR / "An ec-1667994848.json"  # 定义源 JSON 文件路径

# 读取源 JSON 文件
with open(SOURCE_FILE, mode="r", encoding="utf-8") as json_file:
    saved_response = json.load(json_file)  # 加载 JSON 数据
    image_data = b64decode(saved_response["data"][0]["b64_json"])  # 解码 Base64 编码的图像数据

# 调用 DALL·E API 创建图像变体
response = client.images.create_variation(
    image=image_data,  # 输入的图像数据
    n=3,  # 生成三张变体图像
    size="256x256",  # 图像的尺寸
    response_format="b64_json",  # 响应格式为 Base64 编码的 JSON
)

# 定义保存变体图像的 JSON 文件名
new_file_name = f"vary-{SOURCE_FILE.stem[:5]}-{response.created}.json"

# 将变体图像的响应保存为 JSON 文件
with open(DATA_DIR / new_file_name, mode="w", encoding="utf-8") as file:
    json.dump(response.to_dict(), file)  # 保存变体图像的 JSON 数据

这个脚本会将之前 JSON 响应中的 Base64 编码图像数据发送到 Images API,并请求生成该图像的多个变体。然后,将这些变体图像的数据保存在新的 JSON 文件中。

五、处理和优化生成的图像

生成的图像可能需要进一步的处理和优化,以满足特定的需求。你可以使用 Python 的图像处理库,如 Pillow,来对生成的图像进行调整和优化。

安装 Pillow

首先,确保你安装了 Pillow 库:

pip install Pillow  # 安装 Pillow 图像处理库

图像处理示例

以下是一个简单的图像处理示例,展示如何使用 Pillow 对生成的图像进行调整:

from PIL import Image, ImageFilter  # 导入 Pillow 库中的图像处理模块

# 打开生成的图像
image_path = IMAGE_DIR / "your_image.png"  # 定义图像文件路径
image = Image.open(image_path)  # 打开图像文件

# 调整图像大小
image = image.resize((512, 512))  # 将图像调整为 512x512 像素

# 应用滤镜
image = image.filter(ImageFilter.SHARPEN)  # 应用锐化滤镜

# 保存处理后的图像
image.save(IMAGE_DIR / "processed_image.png")  # 保存处理后的图像

通过以上代码,你可以对生成的图像进行大小调整、滤镜应用等操作,提升图像的质量和视觉效果。


🔥点击这里体验:codemoss_能用AI
【无限GPT4.omini】 【拒绝爬梯】 【上百种AI工作流落地场景】
【主流大模型集聚地:GPT-4o-Mini、GPT-3.5 Turbo、GPT-4 Turbo、GPT-4o、GPT-o1、Claude-3.5-Sonnet、Gemini Pro、月之暗面、文心一言 4.0、通易千问 Plus等众多模型】
🔥传送门:https://www.nyai.chat/chat?invite=nyai_1141439&fromChannel=csdn241021_27context
在这里插入图片描述


总结

通过使用 Python 和 OpenAI 的 Images API,你可以根据文本提示生成图像,并对其进行变体处理。在本教程中,你学会了:

  • 如何在本地安装和配置 OpenAI Python 库
  • 如何利用 OpenAI API 的图像生成功能
  • 如何将 Base64 JSON 响应转换为 PNG 图像文件
  • 如何制作和保存生成图像的变体
  • 如何使用 Pillow 对生成的图像进行处理和优化

这些技能将帮助你将图像生成功能集成到你的应用中,实现自动化的图像创作。希望你能在这个过程中获得灵感,创造出更多精彩的作品!✨

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

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

相关文章

基于SSM的智慧篮球馆预约系统

前言 近些年,随着中国经济发展,人民的生活质量逐渐提高,对网络的依赖性越来越高,通过网络处理的事务越来越多。随着智慧篮球馆预约的常态化,如果依然采用传统的管理方式,将会为工作人员带来庞大的工作量&a…

Linux中C/C++程序编译过程与动静态链接库概述

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

qt QMainWindow详解

一、概述 QMainWindow继承自QWidget,并提供了一个预定义的布局,将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。这些区域共同构成了一个功能丰富的主窗口,使得应用程序的开发更加简单和高效。 二、QMainWindow的常用组件及功能 菜单栏&…

【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程

目录 网络编程 1.socket套接字 2.udp数据报套接字编程 DatagramSocket API DatagramPacket API Java基于UDP实现客户端-服务器代码实例 3.tcp流套接字编程 ServerSocket API Socket API TCP中的长短连接 Java基于TCP客户端-服务器代码实例 网络编程 1.socket套接字 S…

云对象存储进阶

《使用Minio搭建文件服务器》一文对minio作了简单的介绍,本文为进阶学习。 1.对象存储产品介绍 目前市场上流行各种对象存储服务,诸如以下: Amazon S3:亚马逊提供的服务, 是市场上最成熟的产品,拥有最大的…

ATom:2016-2018 年沿飞行轨迹的 CAM-chem/CESM2 模型输出

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: CAM-chem/CESM2 Model Outputs Along Flight Tracks, 2016-2018 ATom:2016-2018 年沿飞行轨迹的 CAM-chem/CESM2 模型输出 简介 该数据集包含沿 ATom 飞行轨迹的 CAM-chem(带化学的…

[ARM-2D 专题]5 MDK编译器一个旧版本-Ofast优化bug的问题及解决办法

最近开始大量基于ARM-2D开发应用项目,为了达到最佳性能,我们使用了编译器的许多特殊技能,其中就包含了-Ofast优化,很不幸,一不小心踩坑了。 案发情况如下: 使用的MDK版本5.36,编译器6.16 优化选…

在GeoTools中的Shapefile属性表读取效率之Shp与Dbf对比

目录 前言 一、POI测试数据简介 1、选用的POI数据 2、关于数据的属性数据 二、属性数据读取的两种方式实现 1、基于DbaseFileReader的读取 2、基于SimpleFeatureSource的读取 三、实际运行对比 1、内存和CPU占用情况 2、运行耗时情况 四、总结 前言 众所周知&#x…

【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper+代码——交叉注意力(Cross-Attention)

【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper代码——交叉注意力(Cross-Attention) 【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper代码——交叉注意力(Cross-Attention) 文章目录 【…

‌Spring MVC的主要组件有哪些?

前言 SpringMVC的核心组件包括DispatcherServlet、Controller、HandlerMapping、HandlerAdapter、ViewResolver、ModelAndView等,它们协同工作以支持基于MVC架构的Web应用程序开发。这些组件使得开发人员能够以一种声明式和模块化的方式构建Web应用程序&#xff0c…

小程序开发实战:PDF转换为图片工具开发

目录 一、开发思路 1.1 申请微信小程序 1.2 编写后端接口 1.3 后端接口部署 1.4 微信小程序前端页面开发 1.5 运行效果 1.6 小程序部署上线 今天给大家分享小程序开发系列,PDF转换为图片工具的开发实战,感兴趣的朋友可以一起来学习一下&#xff01…

ECharts饼图-基础南丁格尔玫瑰图,附视频讲解与代码下载

引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详…

一、在cubemx下RTC配置调试实例测试

一、rtc的时钟有lse提供。 二、选择rtc唤醒与闹钟功能 内部参数介绍 闹钟配置 在配置时间时,注意将时间信息存储起来,防止复位后时间重新配置。 if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0)! 0x55AA)//判断标志位是否配置过,没有则进…

qt EventFilter用途详解

一、概述 EventFilter是QObject类的一个事件过滤器,当使用installEventFilter方法为某个对象安装事件过滤器时,该对象的eventFilter函数就会被调用。通过重写eventFilter方法,开发者可以在事件处理过程中进行拦截和处理,实现对事…

WSL2 Ubuntu22.04编译安装LLVM

前提 这两天因为工作需要,要编译一个Debug版本的llvm。这里对编译安装过程进行一个简单的记录,同时也记录下这个过程中遇到的几个问题。 下载源码并编译 有关llvm编译安装的官方文档在这里。 从git仓库clone llvm的源码。 git clone https://github.c…

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…

电磁场-Laplace算子与冲激函数的关系

csdn重新打一遍公式太麻烦了。欢迎转到我的知乎账号上查阅原版文章,也可后台私信我发送原版PDF或者markdown。 电磁场-Laplace算子与冲激函数的关系 - 知乎 下面的文章是一张超大的图片。

论1+2+3+4+... = -1/12 的不同算法

我们熟知自然数全加和, 推导过程如下, 这个解法并不难,非常容易看懂,但是并不容易真正理解。正负交错和无穷项计算,只需要保持方程的形态,就可以“预知”结果。但是这到底说的是什么意思?比如和…

C++扑克牌(poker)2024年CSP-J认证第二轮第一题 CCF信息学奥赛C++ 中小学初级组 第二轮真题解析

目录 C扑克牌(poker) 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C扑克牌(poker) 2024年CSP-J认证第二轮第一题 一、题目要求 1、编程实现 小 P 从同学…

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展(AttributeModifier、AttributeUpdater) Styles装饰器:定义组件重用样式   ;Extend装饰器:定义扩展组件样式   自定义扩展:AttributeModifier、AttributeUpdater 1.1. 区…