Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)

简介: Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)

引言

想象一下,只要描述你想要的画面,电脑就能帮你画出来。这在几年前还像是科幻小说里的场景,但随着神经网络和潜在扩散模型(LDM)技术的发展,现在已经成为可能。OpenAI 推出的 DALL·E 工具,因其能生成令人惊叹的艺术作品和逼真的图像而广受欢迎。

你可以通过 OpenAI 的 API 访问 DALL·E,这样你就可以将它的功能集成到你的 Python 程序中。

本教程将带你:

  • 快速上手 OpenAI 的 Python 库
  • 探索与图像生成相关的 API 调用
  • 根据文本提示生成图像
  • 制作生成图像的不同版本
  • 将 Base64 格式的 JSON 响应转换成 PNG 图像文件

环境准备

如果你对 DALL·E 的强大功能感到好奇,并希望将其集成到你的 Python 项目中,那么这篇文章正是你需要的。在本节中,你将快速了解如何开始在你的代码中利用 DALL·E 来创建图像。

  • 安装 OpenAI Python 库

请确保你的 Python 版本至少是 3.7.1,并创建一个虚拟环境来隔离项目依赖。接下来,安装 OpenAI 提供的 Python 库,以便使用 DALL·E 的功能。

$ python --version
Python 3.12.5
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install openai

openai 包让您可以访问完整的 OpenAI API。在本教程中,您将重点关注图像生成,它使您可以与 DALL·E 模型交互,根据文本提示创建和编辑图像。

  • 获取您的 OpenAI API 密钥

您需要 API 密钥才能成功进行 API 调用。注册 OpenAI 并通过单击仪表板菜单,然后单击导航菜单左下角的 API 密钥来创建新的项目 API 密钥:

在此页面上,您可以创建和管理您的 API 密钥,这使您可以访问 OpenAI 通过其 API 提供的服务。您可以创建和删除密钥。单击“创建新密钥”以创建新的 API 密钥,并复制弹出窗口中显示的值。复制此键的值,以便稍后可以在项目中使用它。您只会看到该键值一次。

  • 将您的 API 密钥保存为环境变量

保存 API 密钥并使其可用于 Python 脚本的一种快速方法是将其保存为环境变量。选择您的操作系统以了解如何:

(venv) $ export OPENAI_API_KEY="<your-key-value-here>"

通过执行这条指令,你可以在当前的终端会话中设置一个名为 OPENAI_API_KEY 的环境变量,以便访问你的 API 密钥。请记住,一旦你关闭了终端窗口,这个密钥就会失效。

你可以根据个人喜好来命名这个环境变量,但如果你按照 OpenAI 的官方文档建议,使用 OPENAI_API_KEY 这个名字,那么你就能够直接使用文档中的代码示例,无需进行额外的配置。

现在,准备工作已经完成,你的 API 密钥也已安全存储,你可以开始根据文本提示来生成图像了。

根据文本描述生成图像

首先,通过命令行界面调用 openai 库来确保你的环境已经配置完毕,准备开始使用。

(venv) $ openai api images.generate -p "a vaporwave computer"

该命令将向 OpenAI 的图像 API 发送请求,并根据文本提示“蒸汽波计算机”创建图像。因此,您将收到一个 JSON 响应,其中包含指向您新创建的图像的 URL:

{
   
  "created": 1723549436,
  "data": [
    {
   
      "b64_json": null,
      "revised_prompt": null,
      "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org
      ⮑ -H8Satq5hV2dscyutIStbN89m/user-O5O8mpE4TugEI9zqpxx8tGPt/img-4rDZEQ
      ⮑ leCdzAD3fuWowgLb5U.png?st=2024-08-13T10%3A43%3A56Z&se=2024-08-13T1
      ⮑ 2%3A43%3A56Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&sk
      ⮑ oid=d505667d-d6c1-4a0a-bac7-5c84a87759f8&sktid=a48cca56-e6da-484e-
      ⮑ a814-9c849652bcb3&skt=2024-08-12T23%3A00%3A04Z&ske=2024-08-13T23%3
      ⮑ A00%3A04Z&sks=b&skv=2024-08-04&sig=c%2BBmroDkC0wkA2Lu8MxkvXH4xjdW5
      ⮑ B18iQ4e4BwJU6k%3D"
    }
  ]
}

单击您的 URL 或将其复制并粘贴到浏览器中以查看图像。这是 DALL·E 针对这一要求设想的图像:

你的生成图像会是独一无二的。这是因为扩散模型仅在你发起请求时才生成图像。

提示:你生成的图像的链接仅在一小时内有效,所以如果你对生成的图像感到满意并希望长期保存,请务必及时将其下载到你的电脑上。

当你向 API 发送请求时,需要遵守 OpenAI 的使用条款。如果你提供的文本提示违反了这些条款,你将收到错误提示,并且如果屡次违规,你的账户可能会被封禁。

既然你已经验证了所有设置都正确无误,并且对使用 OpenAI API 生成图像的功能有了初步了解,接下来你将学习如何将其整合到 Python 脚本中。

调用 API

能够通过命令行界面(CLI)生成图像固然不错,但如果能将这项功能集成到你的 Python 应用中就更棒了。你可以借此构建许多激动人心的项目!

打开你常用的代码编辑器,编写一个脚本。这个脚本将用于根据文本提示生成图像,操作方式与你之前在命令行中进行的操作类似。

但这一次,你将明确指定要使用的 DALL·E 模型版本:

from openai import OpenAI

client = OpenAI()

PROMPT = "A vaporwave computer"

response = client.images.generate(
    model="dall-e-3",
    prompt=PROMPT,
)

print(response.data[0].url)

与之前类似,这段代码向 API 发送了一个经过认证的请求,根据 PROMPT 中的文本生成一张图片。这段代码还做了一些优化,以便你在脚本中添加更多功能:

第 3 行初始化了 OpenAI 的一个实例,并将其存储为 client。这个实例已经包含了身份验证信息,因为你已经将环境变量命名为 OPENAI_API_KEY。如果你遵循了这个命名规则,它会自动从你的环境变量中获取 API 密钥值。当然,你也可以在创建实例时直接通过 api_key 参数传递 API 密钥。

第 5 行将文本提示定义为一个常量。这样做的好处是,如果你需要修改提示文本,只需要在脚本顶部找到这个常量并进行修改,非常方便。

第 7 行调用了 client.images.generate() 方法。接下来的几行代码展示了你可以传递给这个方法的一些参数。

第 8 行指定使用更新的 DALL·E 3 模型,它不仅以不同的方式处理你的提示,还支持不同的参数设置、图片尺寸和质量,与默认的 DALL·E 2 模型有所区别。

第 9 行将 PROMPT 的值传递给名为 prompt 的参数。这样,你就为 DALL·E 提供了用于生成图片的文本。别忘了,你之前在命令行中调用 API 时也传递了文本提示。

最后,你还需要获取生成图片的 URL,以便在线查看。为此,你需要访问响应对象的 .url 属性,并在第 12 行将其值打印到终端。

当你执行这个脚本时,你将得到一个类似于之前的输出,但现在只会显示 URL,而不会显示完整的 JSON 响应。

(venv) $ python create.py
https://oaidalleapiprodscus.blob.core.windows.net/private/org-H8Satq5hV2d
⮑ scyutIStbN89m/user-O5O8mpE4TugEI9zqpxx8tGPt/img-hMAEPhuqVH73JMRQ6BOV4J
⮑ Hz.png?st=2024-08-13T10%3A56%3A54Z&se=2024-08-13T12%3A56%3A54Z&sp=r&sv
⮑ =2023-11-03&sr=b&rscd=inline&rsct=image/png&skoid=d505667d-d6c1-4a0a-b
⮑ ac7-5c84a87759f8&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2024-0
⮑ 8-12T21%3A36%3A11Z&ske=2024-08-13T21%3A36%3A11Z&sks=b&skv=2023-11-03&s
⮑ ig=D7K6UF353uO3wJDOovbeyBsn2yaf384kEotVbjJ5SB4%3D

单击链接或将其粘贴到浏览器中以查看生成的图像。因为您现在使用的是 DALL·E 3 模型,所以输出可能看起来更引人注目:

这表明图像的质量和细节有了显著提高,看起来新模型对蒸汽波风格的理解更加深入。

虽然这很有可能,但在背后还有一些其他因素也在影响着图像细节的提升。当你请求使用 DALL·E 3 模型生成图像时,它会在生成图像前对你的提示进行重新编辑。

如果你想知道 DALL·E 在生成图像时实际使用的修改后的提示是什么,你可以通过 .revised_prompt 属性来查看。

# ...

print(response.data[0].revised_prompt)

在请求生成图像时,通常来说,提供更详细的描述会得到更理想的结果。在你的描述中加入更多的细节可以大幅提升效果!例如,下面是生成上面图像所用的详细描述:

想象一台带有蒸汽波风格的计算机;它像是一台80年代的老式机器,被霓虹粉和蓝色光晕所包围。它的设计充满了怀旧感,机身装饰着复古的字体。外壳上印有发光的数字棕榈树,让人联想到老式视频游戏中的场景。背景中可以看到希腊雕塑和蒸汽波设计中常见的故障日落图案,完美地结合了现代与复古的元素。

这比你最初提供的描述要详细得多!

注意:只有对 DALL·E 3 模型的请求才会进行提示重写,所以如果你使用的是 DALL·E 2,这个属性将不存在。

虽然 DALL·E 3 能够生成更令人印象深刻的图像,但它不允许你关闭提示重写功能,这意味着你对输出的控制会减少。此外,这个模型目前还没有完全开放所有功能。

因此,在本教程的后续部分,你将继续使用 DALL·E 2。首先,编辑脚本,在调用 .generate() 方法时添加一些额外的参数。同时,不妨也为你最初的描述增加一些细节:

from openai import OpenAI

client = OpenAI()

PROMPT = "An eco-friendly computer from the 90s in the style of vaporwave"

response = client.images.generate(
    model="dall-e-2",  # Default
    prompt=PROMPT,
    n=1,
    size="256x256",
)

print(response.data[0].url)

你已经为你的描述增加了一些细节,并切换回了默认的 DALL·E 2 模型。此外,你还添加了两个新参数来进一步定制生成的图像:

第 10 行将数字 1 指定给参数 n。这个参数允许你定义想要根据描述生成的新图像数量。n 的值应在 1 到 10 之间,默认为 1。

第 11 行设置了 size 参数的值。通过这个参数,你可以指定 DALL·E 生成图像的尺寸。这个参数需要是一个字符串,可用的尺寸会根据你使用的模型而有所不同。对于 DALL·E 2,可选的尺寸有 "256x256"、"512x512" 或 "1024x1024"。每个字符串都代表了你将收到的图像的像素尺寸,默认为最大的 "1024x1024"。

在你的脚本最后,你再次将生成图像的 URL 输出到终端。你已经移除了打印 .revised_prompt 的代码行,因为在 DALL·E 2 中这个值是不存在的。

当你执行脚本后,你会得到一个新的 URL 作为回应。点击这个链接或将其复制到你的浏览器中,就可以查看生成的图像了。和之前一样,你的图像会有所不同,但应该与你在 PROMPT 中使用的描述相似。由于你这次使用的是 DALL·E 2,所以图像的细节可能会比上一次少一些。

你可能会注意到,这次生成的图像比你之前创建的要小得多。这是因为你通过 size 参数指定了生成一张 256x256 像素的图片。较小的图像成本较低,所以你刚刚省下了一笔费用!作为一个节省成本的成功者,也许你还想保存其他东西——比如你的图像数据。

相关文章
|
16天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
97 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
4天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
4天前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
29 6
|
3天前
|
JSON 自然语言处理 Java
OpenAI API深度解析:参数、Token、计费与多种调用方式
随着人工智能技术的飞速发展,OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式,以及如何通过Rest API(以Postman为例)、Java API调用、工具调用等方式实现与OpenAI的交互,并特别关注调用具有视觉功能的GPT-4o使用本地图片的功能。此外,本文还将介绍JSON模式、可重现输出的seed机制、使用代码统计Token数量、开发控制台循环聊天,以及基于最大Token数量的消息列表限制和会话长度管理的控制台循环聊天。
33 7
|
12天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
58 5
|
18天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
41 11
|
20天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
86 5
|
19天前
|
API Python
利用python淘宝/天猫获得淘宝app商品详情原数据 API
要使用Python获取淘宝/天猫商品详情原数据,需先注册开放平台账号并实名认证,创建应用获取API权限。随后,根据API文档构建请求URL和参数,使用requests库发送请求,处理返回的商品详情数据。注意遵守平台使用规则。
|
22天前
|
供应链 API 开发者
探索Python与1688商品详情API接口的协同效应
在数字化时代,1688作为中国领先的B2B平台,其商品详情API接口为市场分析、库存管理和销售策略提供了重要数据支持。本文介绍如何使用Python调用该API,包括前期准备、技术实现、数据解析及错误处理等内容,助力企业和开发者挖掘数据价值,提升商业智能水平。
|
28天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
下一篇
DataWorks