0°

使用 DALL·E 2 模型和 OpenAI API 生成图像

  随着神经网络和潜在扩散模型(LDM) 的进步,在几年前还听起来还很未来的东西现在已成为现实。OpenAI 的 DALL·E模型通过人们用它创造的惊人的生成艺术和逼真的图像而引起轰动。

  OpenAI 现在允许通过他们的API访问 DALL·E ,这意味着我们可以将其功能合并到您的Python 应用程序中。

  本文内容中,我们将学会做以下工作:

  开始使用OpenAI Python 库

  探索与图像生成相关的 API 调用

  根据文本提示创建图像

  创建生成图像的变体

  将 Base64 JSON 响应转换为PNG 图像文件

  如果您以前没有玩过DALL·E 的 Web 用户界面功能,先去体验一下,然后再回来学习如何通过 Python 以编程方式使用它并实现功能。

  安装 OpenAI Python 库,并获取您的 OpenAI API 密钥

  此部分内容是基础,之前文章中已经介绍过,不清楚的点击此链接先学习一下。

  使用 OpenAI 的 DALL·E 从文本提示创建图像

  新建一个python文件 create.py,如下代码,可以实现从文本提示创建图像功能

  import os

  import openai

  # 文本提示

  PROMPT = “An eco-friendly computer from the 90s”

  openai.api_key=””

  # 根据文本指令,向DALL·E 模型发送创建图片的请求,返回图片url

  response = openai.Image.create(

  prompt=PROMPT,

  n=1,

  size=”256×256″,

  )

  print(response[“data”][0][“url”])

  代码执行效果如上图,返回一个模型根据文本提示生成的图片链接,点击链接 浏览器会打开图片,可以看到图片如下:

  将图像数据保存到本地JSON文件

  API 允许您将响应的格式从 URL 切换为 Base64 编码的图像数据。在第 15 行中,您将 的值设置response_format为”b64_json”。此参数的默认值为”url”,这就是您到目前为止在 JSON 响应中收到 URL 的原因。为了避免丢失一张完美的图像,您可以将 JSON 响应存储在一个文件中。

  import json

  import os

  from pathlib import Path

  import openai

  PROMPT = “An eco-friendly computer from the 90s”

  DATA_DIR = Path.cwd() / “responses”

  DATA_DIR.mkdir(exist_ok=True)

  openai.api_key=””

  #图片返回格式设置成b64_json,

  response = openai.Image.create(

  prompt=PROMPT,

  n=1,

  size=”256×256″,

  response_format=”b64_json”,

  )

  #构建json文件路径名称

  file_name = DATA_DIR / f”{PROMPT[:5]}-{response[‘created’]}.json”

  # 写文件,保存文件

  with open(file_name, mode=”w”, encoding=”utf-8″) as file:

  json.dump(response, file)

  解码 Base64 JSON 文件生成图片

  新建convert.py脚本文件,该脚本将读取一个 JSON 文件,需要调整 的值JSON_FILE以匹配您的 JSON 文件的文件名,这将有所不同。

  然后脚本从 JSON 数据中获取 Base64 编码的字符串,对其进行解码,并将生成的图像数据作为 PNG 文件保存在目录中。该for循环将解码每个图像并将其保存为一个新文件。

  代码片段的真正亮点是b64decode(). 它解码 Base64 编码的字符串,以便您可以将实际图像数据保存为 PNG 文件。然后您的计算机将能够将其识别为 PNG 图像并可以查看。

  # convert.py

  import json

  from base64 import b64decode

  from pathlib import Path

  DATA_DIR = Path.cwd() / “responses”

  JSON_FILE = DATA_DIR / “An ec-1667994848.json”

  IMAGE_DIR = Path.cwd() / “images” / JSON_FILE.stem

  IMAGE_DIR.mkdir(parents=True, exist_ok=True)

  with open(JSON_FILE, mode=”r”, encoding=”utf-8″) as file:

  response = json.load(file)

  for index, image_dict in enumerate(response[“data”]):

  image_data = b64decode(image_dict[“b64_json”])

  image_file = IMAGE_DIR / f”{JSON_FILE.stem}-{index}.png”

  with open(image_file, mode=”wb”) as png:

  png.write(image_data)

  python3 convert.py运行该脚本,就会生成对应png文件,如上图。

  创建图像的变体

  如果您有一张图像——无论它是否是机器生成的图像——与您正在寻找的图像相似但不完全符合要求,那么您可以使用 OpenAI 的 DALL·E 潜在扩散模型创建它的变体。

  根据前面编写的代码,我们可以创建一个新文件vary.py:

  import json

  import os

  from base64 import b64decode

  from pathlib import Path

  import openai

  DATA_DIR = Path.cwd() / “responses”

  #被变化的原始图片文件

  SOURCE_FILE = DATA_DIR / “An ec-1667994848.json”

  openai.api_key=””

  with open(SOURCE_FILE, mode=”r”, encoding=”utf-8″) as json_file:

  saved_response = json.load(json_file)

  image_data = b64decode(saved_response[“data”][0][“b64_json”])

  #原始图片作为参数发送请求给模型,模型返回3张相似的随机变体图片

  response = openai.Image.create_variation(

  image=image_data,

  n=3,

  size=”256×256″,

  response_format=”b64_json”,

  )

  new_file_name = f”vary-{SOURCE_FILE.stem[:5]}-{response[‘created’]}.json”

  with open(DATA_DIR / new_file_name, mode=”w”, encoding=”utf-8″) as file:

  json.dump(response, file)

  运行脚本,以原始图片作为参数,请求模型返回3张变体图片,然后再运行convert.py脚本将3张彼岸图图片json转成PGN图片,打开就可以看到如上图所示。

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论