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

引言

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.rhkb.cn/news/458601.html

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

相关文章

单反相机内存卡误删照片怎么办?别急,这里有恢复方法

在摄影的世界里,单反相机无疑是众多摄影爱好者与专业摄影师的首选工具。它不仅能够捕捉细腻丰富的画面细节,还提供了高度的操作灵活性和可扩展性。然而,在使用单反相机的过程中,我们难免会遇到一些技术上的困扰,其中之…

【网络面试篇】三次握⼿、四次挥手综述

目录 一、三次握手 1. 过程描述 2. 为什么不是四次握手?为什么不能两次握手? 二、四次挥手 1. 过程描述 2. 为什么是四次挥手? 一、三次握手 1. 过程描述 ① 客户端 向 服务器 发送 SYN 报文、初始化序列号 ISN(seqx&…

自定义鼠标事件在拖拽中的使用

目标: 显示鼠标在容器元素中划过时经过的元素,但是容器内肯能会出现大量元素,所以直接给容器元素添加click事件,通过elementFromPoint的API模拟子元素被点击事件效果 看看效果吧 涉及的重要对象 MousEvent 参考 MDN 相关代码 operateCont…

[项目详解][boost搜索引擎#2] 建立index | 安装分词工具cppjieba | 实现倒排索引

目录 编写建立索引的模块 Index 1. 设计节点 2.基本结构 3.(难点) 构建索引 1. 构建正排索引(BuildForwardIndex) 2.❗构建倒排索引 3.1 cppjieba分词工具的安装和使用 3.2 引入cppjieba到项目中 倒排索引代码 本篇文章,我们将继续项…

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法,了解了vector当中各个函数该如何使用,在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的,但同时也发现vector当中一些函数以及接口是和string不同的…

在Postgresql中对空间数据进行表分区的实践

在数据库管理中,合理地对数据进行分区可以提高查询性能和数据管理效率。 本文将详细介绍在Postgresql中对空间数据进行表分区的实践过程。 测试计算机容量有限,测试最大数据量为1,000,000条。 关键字: Postgresql PostGIS 表分区 空间数据 测试计算…

Easy Excel合并单元格情况简单导入导出

需求 实现报表数据的导入导出&#xff0c;表格中部分数据是系统生成&#xff0c;部分数据是甲方填写&#xff0c;录入系统。 批号唯一 Maven <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.…

【modbus协议】libmodbus库移植基于linux平台

文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体&#xff1a; 这是 libmodbus 的核心数据结构&#xff0c;代表一个 Mod…

机房巡检机器人有哪些功能和作用

随着数据量的爆炸式增长和业务的不断拓展&#xff0c;数据中心面临诸多挑战。一方面&#xff0c;设备数量庞大且复杂&#xff0c;数据中心内服务器、存储设备、网络设备等遍布&#xff0c;这些设备需时刻保持良好运行状态&#xff0c;因为任何一个环节出现问题都可能带来严重后…

从0到1学习node.js(express模块)

文章目录 Express框架1、初体验express2、什么是路由3、路由的使用3、获取请求参数4、电商项目商品详情场景配置路由占位符规则5、小练习&#xff0c;根据id参数返回对应歌手信息6、express和原生http模块设置响应体的一些方法7、其他响应设置8、express中间件8.1、什么是中间件…

如何搭建直播美颜SDK平台的最佳实践?美颜API的实现与集成详解

本篇文章&#xff0c;将从技术实现、平台搭建、API集成以及性能优化四个方面&#xff0c;为开发者详解如何搭建一个直播美颜SDK平台。 一、直播美颜SDK平台的技术架构 一般的美颜效果包括磨皮、亮肤、瘦脸、大眼等&#xff0c;这些效果的实现需要依赖图像增强和滤镜算法。核心…

【51单片机】第一个小程序 —— 点亮LED灯

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 单片机介绍LED灯介绍练习创建第一个项目点亮LED灯LED周期闪烁 单片机介绍 单片机&#xff0c;英文Micro Controller Unit&#xff0…

创建ODBC数据源SQLConfigDataSource函数的用法

网络上没有这个函数能实际落地的用法说明&#xff0c;我实践后整理一下&#xff1a; 1.头文件与额外依赖库&#xff1a; #include <odbcinst.h> #pragma comment(lib, "legacy_stdio_definitions.lib") 2.调用函数&#xff1a; if (!SQLConfigDataSourceW(…

阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f343; vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode&#x1f4ab; Gitee &#x1f…

java :String 类

在我们之前的讲解中我们已经了解了很多的Java知识&#xff0c;这节我们讲Java中字符如何定义以及关于String如何使用还有常见的string函数。 【本节目标】 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 …

江协科技STM32学习- P21 ADC模数转换器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

基于SpringCloud的WMS管理系统源码

商品管理&#xff1a;商品类型&#xff0c;规格&#xff0c;详情等设置。 采购管理&#xff1a;采购单录入。 销售管理&#xff1a;销售单录入。 库存管理&#xff1a;库存查询、库存日志 采用前后端分离的模式&#xff0c;微服务版本前端 后端采用Spring Boot、Spring Cl…

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦&#xff0c;提前祝大家新年快乐 完整代码下载地址&#xff1a;https://download.csdn.net/download/ture_mydream/89926458

vLLM推理部署Qwen2.5

vLLM vLLM 是一个用于大模型推理的高效框架。它旨在提供高性能、低延迟的推理服务&#xff0c;并支持多种硬件加速器&#xff0c;如 GPU 和 CPU。 vLLM 适用于大批量Prompt输入&#xff0c;并对推理速度要求高的场景&#xff0c;吞吐量比HuggingFace Transformers高10多倍。 …

手指关节分割系统:视觉算法突破

手指关节分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-RFAConv&#xff06;yolov8-seg-fasternet-bifpn等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…