如何在Python中使用OpenAI API和DALL·E 2生成图像

如何在Python中使用OpenAI API和DALL·E 2生成图像

如果您曾经使用过 ChatGPT,那么您已经见证了它的直觉。 借助 OpenAI 的 API,代码生成、文本完成、文本比较、模型训练和图像生成都在囊中,供开发人员探索并集成到应用程序中。

在本教程中,您将学习如何将 OpenAI 的 API 与 Python 结合使用,以使用自然语言提示生成、编辑和改变图像。

推荐:修复缓慢页面加载ajax.googleapis.com

使用 Python 开始使用 OpenAI

在开始本教程之前,您需要进行一些设置。 首先,确保您已经在计算机上安装了 Python 的最新版本。 如果您使用像 Ubuntu 这样的 Linux 发行版,您可能还想了解如何在 Ubuntu 上安装 Python。

为您的项目创建一个新文件夹,然后打开命令行到您的项目目录。

接下来是 OpenAI 包安装。 你需要安装 pillow 在使用图像编辑端点时将图像转换为 RGBA。 您可能还想安装 python-dotenv; 您将使用它来屏蔽密钥。

我们建议创建一个专用的 Python 虚拟环境来隔离依赖项。

该项目中使用的代码在 GitHub 存储库中可用,您可以在 MIT 许可下免费使用。

安装 python-dotenvpillow, and openai 包,在终端中运行以下命令:

pip install openai python-dotenv pillow

现在转到 OpenAI 并登录到您的仪表板以获取您的 API 密钥:

  1. 登录后,单击右上角的个人资料图标。
    OpenAI 文档页面
  • 登录 查看 API 密钥. 如果您的 API 密钥不可见,请单击 创建新的密钥 生成一个新的。
    打开 API 密钥模式框
  • 复制生成的密钥并将其粘贴到计算机上安全的位置。 为了安全起见,您可能希望将其粘贴到项目根目录中的环境变量文件中。

如何在 Python 中使用 OpenAI API 生成和编辑图像

OpenAI API 的图像生成具有用于生成新图像、创建图像变体和编辑它们的端点。

在以下部分中,您将探索这些端点以使用自然语言提示生成、编辑、调整和下载图像。

使用 OpenAI API 生成图像

图像生成端点接受三个关键字参数。 这些包括 promptn, and size.

prompt  关键字是描述您希望生成的图像的文本字符串,而 n 是在 API 调用期间生成的图像数。 这 size尺寸 是图像大小,根据官方 OpenAI 图像生成文档,截至撰写本文时,它仅接受 256×256、512×512 和 1024×1024 像素。

以下代码使用自然语言提示生成图像并输出它们的 URL(图像地址):

import openai
import os
import requests
from dotenv import load_dotenv
from PIL import Image
load_dotenv()

class ImageGenerator:
def __init__(self) -> str:
self.image_url: str
openai.api_key = os.getenv(“OPENAI_API_KEY”)
self.APIKey = openai.api_key
self.name = None

def generateImage(self, Prompt, ImageCount, ImageSize):
try:
self.APIKey
response = openai.Image.create(
prompt = Prompt,
n = ImageCount,
size = ImageSize,
)
self.image_url = response[‘data’]

self.image_url = [image[“url”] for image in self.image_url]
print(self.image_url)
return self.image_url
except openai.error.OpenAIError as e:
print(e.http_status)
print(e.error)

def downloadImage(self, names)-> None:
try:
self.name = names
for url in self.image_url:
image = requests.get(url)
for name in self.name:
with open(“{}.png”.format(name), “wb”) as f:
f.write(image.content)
except:
print(“An error occured”)
return self.name

imageGen = ImageGenerator()

imageGen.generateImage(
Prompt = “Giant lion, bear, ape, and tiger standing on a water water fall”,
ImageCount = 2,
ImageSize = ‘1024×1024’
)

imageGen.downloadImage(names=[
“Animals”,
“Animals2”
])

上面的代码包含一个 图像生成器 类与 图片_urlAPI密钥 属性。 这 生成图片 方法适应图像生成端点的要求。 它产生 n 使用自然语言提示的 URL,具体取决于 图片数 价值。

然而, self.image_url 使用列表理解中的 for 循环将生成的图像 URL 从 JSON 响应提取到列表中。

输出如下所示:

代码输出 OpenAI API

最后, 下载图片 方法通过请求生成的地址来下载每个图像。 这个方法接受 n 您希望为每个图像指定的名称数量。

使用 OpenAI API 编辑图像

编辑端点允许您根据遮罩模板编辑现有图像。 蒙版是一种 RGBA 格式,带有带注释的透明区域,并且必须与要编辑的图像大小相同。

当您提供遮罩时,编辑端点会用现有图像中的新提示替换其遮罩区域以生成新图像。 在上面的类中添加以下方法:

class ImageGenerator:
    def __init__(self, ...):
        ..............

def convertImage(self, maskName):
image = Image.open(“{}.png”.format(maskName))
rgba_image = image.convert(‘RGBA’)
rgba_image.save(“{}.png”.format(maskName))

return rgba_image

def editImage(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
self.convertImage(maskName)
response = openai.Image.create_edit(
image = open(“{}.png”.format(imageName), “rb”),
mask = open(“{}.png”.format(maskName), “rb”),
prompt = Prompt,
n = ImageCount,
size = ImageSize,
)
self.image_url = response[‘data’]
self.image_url = [image[“url”] for image in self.image_url]

print(self.image_url)
return self.image_url

imageGen.editImage(
imageName = “Animals”,
maskName = “mask”,
ImageCount = 1,
ImageSize = “1024×1024”,
Prompt = “An eagle standing on the river bank drinking water with a big mountain”
)

imageGen.downloadImage(names=[
“New Animals”,
])

转换图像 方法将掩码图像转换为 RGBA 格式。 您可以使用 转变 来自 Python 的 pillow 包的方法(作为 PIL 导入)。

转换后,它将新蒙版保存为现有蒙版的覆盖。 因此,图像转换是编辑方法的首要任务(编辑图片) 执行。

图像 从现有文件中读取目标图像,而 面具 读取转换后的遮罩图像,该图像必须具有透明区域。

您可以使用 Gimp 或 Photoshop 等照片编辑软件在蒙版中标出透明区域。

例如,我们要使用上面代码中的提示编辑的图像是:

动物在河边喝水

现在,假设您要按照提示中的说明将站在河岸边的羚羊换成一只老鹰。

这是面具的样子:

带有注释区域的动物饮用水图片

由于上述代码提示中的关键字是“一只站在河岸上的老鹰”,空白处被一只老鹰填满,取代了之前在那里的羚羊。

这是本例中的新图像:

动物从河边喝水,河岸上有一只鹰

您可以尝试使用其他照片来使用图像编辑端点。

使用 OpenAI API 在 Python 中生成图像变体

变体端点从现有图像生成替代图像。 通过添加图像变化方法进一步扩展图像生成器类,如下所示:

class ImageGenerator:
    def __init__(self) -> str:
        .............
        
    def imageVariations(self, ImageName, VariationCount, ImageSize):
        response = openai.Image.create_variation(
            image = open("{}.png".format(ImageName), "rb"),
            n = VariationCount,
            size = ImageSize
            )
        
        self.image_url = response['data']
            
        self.image_url = [image["url"] for image in self.image_url]
        print(self.image_url)
        return self.image_url
        
imageGen = ImageGenerator()

imageGen.imageVariations(
ImageName = “New_Animals”,
VariationCount = 2,
ImageSize = “1024×1024”
)

imageGen.downloadImage(names=[
“Variation1”,
“Variation2”,
]
)

上面的代码生成图像的变体。

充分利用 OpenAI

虽然有些人担心人工智能会抢走他们的工作,但毕竟它可能是一个避风港——如果你学会控制和使用它。 这个 OpenAI 图像创建教程只是 AI 在现实世界中的众多用例之一。 OpenAI API 提供方便的预训练模型,您可以轻松将其集成到您的应用程序中。 因此,您可以接受挑战并从本教程中构建一些有价值的东西。

尽管图像生成 API 在撰写本文时仍处于测试阶段,但它已经可以让您制作想象中的艺术品。 希望它能得到进一步的更新,以允许放大并接受不同的图像尺寸。

推荐:WordPress阻止内容被复制Content Protector


发表评论