生成式人工智能构建图像生成应用

前面我们已经介绍了:

LLMs 不是只能生成文本,还能根据文本描述生成图像。图像作为一种模式,在医疗科技、建筑、旅游、游戏开发等多个领域都很有用处。在这一章,我们将介绍两种最受欢迎的图像生成模型:DALL-E 和 Midjourney。

如何要构建图像生成应用程序?

图像生成应用程序是一种探索生成式人工智能功能的好方式。它们可以用于以下场景:

  • 图像编辑和合成。您可以根据不同的需求生成图像,比如图像编辑和图像合成。
  • 适用于多个行业。它们还可以用于为医疗科技、旅游、游戏开发等多个行业生成图像。

DALL-E 和 Midjourney 是什么?

DALL-E 和 Midjourney 是两种最受欢迎的图像生成模型,它们可以让您用提示词生成图像。

DALL-E

我们先来看看 DALL-E,它是一种生成式 AI 模型,可以根据文本描述生成图像。

DALL-E 是 CLIP 和 diffused attention 两种模型的结合

  • CLIP,是一种能够从图像和文本生成嵌入的模型,嵌入是数据的数字表达。
  • diffused attention,是一种能够从嵌入生成图像的模型。DALL-E 在图像和文本数据集上进行了训练,可以用于从文本描述生成图像。比如,DALL-E 可以用于生成戴着帽子的猫或者有莫西干发型的狗的图像。

Midjourney

Midjourney 的工作原理和 DALL-E 相似,它也是根据文本提示生成图像。Midjourney 也可以用于用"戴着帽子的猫"或者"莫西干狗"等提示生成图像。

DALL-E 和 Midjourney 是如何工作的

首先,DALL-E。DALL-E 是一种基于带有 autoregressive transformer 的 transformer 架构的生成式人工智能模型。

"autoregressive transformer"定义了模型如何根据文本描述生成图像,它每次生成一个像素,然后用生成的像素生成下一个像素。经过神经网络的多个层,直到图像生成完毕。

通过这个过程,DALL-E 可以控制生成的图像中的属性、对象、特征等。DALL-E 2和3可以对生成的图像有更多的控制力,

构建您的第一个图像生成应用程序

那么,构建图像生成应用程序需要什么呢?您需要以下 Library:

  • python-dotenv,建议您使用这个库将您的秘密保存在 .env 文件中,避免暴露在代码里。
  • openai,您将使用这个库与 OpenAI API 交互。
  • pillow,用于在 Python 中处理图像。
  • requests,用于发送 HTTP 请求。
  1. 创建一个包含以下内容的文件 .env:
ini 复制代码
AZURE_OPENAI_ENDPOINT=<your endpoint>
AZURE_OPENAI_KEY=<your key>
  1. 将上述库放在一个名为 requirements.txt 的文件中,如下所示:

    python-dotenv
    openai
    pillow
    requests

  2. 接下来,创建虚拟环境并安装库:

bash 复制代码
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt 

对于 Windows,使用以下命令创建并激活虚拟环境:

python3 -m venv venv
venv\Scripts\activate.bat
  1. 在一个名为 app.py 的文件中添加以下代码:
ini 复制代码
import openai
import os
import requests
from PIL import Image
import dotenv

# import dotenv
dotenv.load_dotenv()

# Get endpoint and key from environment variables
openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT']
openai.api_key = os.environ['AZURE_OPENAI_KEY']     

# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only)
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'


try:
    # Create an image by using the image generation API
    generation_response = openai.Image.create(
        prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',    # Enter your prompt text here
        size='1024x1024',
        n=2,
        temperature=0,
    )
    # Set the directory for the stored image
    image_dir = os.path.join(os.curdir, 'images')

    # If the directory doesn't exist, create it
    if not os.path.isdir(image_dir):
        os.mkdir(image_dir)

    # Initialize the image path (note the filetype should be png)
    image_path = os.path.join(image_dir, 'generated-image.png')

    # Retrieve the generated image
    image_url = generation_response["data"][0]["url"]  # extract image URL from response
    generated_image = requests.get(image_url).content  # download the image
    with open(image_path, "wb") as image_file:
        image_file.write(generated_image)

    # Display the image in the default image viewer
    image = Image.open(image_path)
    image.show()

# catch exceptions
except openai.error.InvalidRequestError as err:
    print(err)

我们来解释一下这段代码:

首先,我们导入我们需要的 Library ,包括 OpenAI 、dotenv 、requests 和 Pillow。

javascript 复制代码
import openai
import os
import requests
from PIL import Image
import dotenv

接下来,我们从 .env 文件中加载环境变量。

arduino 复制代码
# import dotenv
dotenv.load_dotenv()

然后,我们设置 OpenAI API 的 endpoint 、 key 、版本和类型。

ini 复制代码
# Get endpoint and key from environment variables
openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT']
openai.api_key = os.environ['AZURE_OPENAI_KEY'] 

# add version and type, Azure specific
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'

接下来,我们生成图像:

ini 复制代码
# Create an image by using the image generation API
generation_response = openai.Image.create(
    prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',    # Enter your prompt text here
    size='1024x1024',
    n=2,
    temperature=0,
)

上面的代码返回一个 JSON 对象,其中包含生成图像的 URL。我们可以用 URL 下载图像并保存到文件中。

最后,我们打开图像并用标准的图像查看器显示它:

arduino 复制代码
image = Image.open(image_path)
image.show()

更多关于生成图像的细节

让我们更详细地看看生成图像的代码:

ini 复制代码
generation_response = openai.Image.create(
        prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',    # Enter your prompt text here
        size='1024x1024',
        n=2,
        temperature=0,
    )
  • prompt,是用于生成图像的文本提示。在这个例子中,我们用了提示"Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils"。
  • size,是生成的图像的尺寸。在这个例子中,我们生成了一个 1024x1024 像素的图像。
  • n,是生成的图像的数量。在这个例子中,我们生成了两个图像。
  • temperature,是控制生成人工智能模型输出随机性的参数。temperature 是 0 到 1 之间的值,其中 0 表示输出是确定的,1 表示输出是随机的。默认值是 0.7。

您还可以对图像做更多的操作,我们将在下面介绍这些操作。

图像生成的额外功能

到目前为止,您已经学会了如何用 Python 中的几行代码来生成图像。但是,您还可以对图像做更多的操作。

您还可以做这些:

编辑图像。您可以通过给现有的图像加上遮罩和提示来修改图像。比如,您可以给图像的某个部分加上一些东西。想象一下我们的兔子图像,您可以给兔子戴上一顶帽子。您可以通过提供图像、遮罩(标记要修改的区域)和文本提示来说明要做什么。

ini 复制代码
response = openai.Image.create_edit(
  image=open("base_image.png", "rb"),
  mask=open("mask.png", "rb"),
  prompt="An image of a rabbit with a hat on its head.",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']

基本图像只有兔子,但最后的图像会在兔子头上加上帽子。

生成变体。这个想法是,您可以用现有的图像来生成不同的版本。要生成变体,您需要提供图像和文本提示以及代码,如下所示:

ini 复制代码
response = openai.Image.create_variation(
  image=open("bunny-lollipop.png", "rb"),
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']

Temperature

Temperature 是控制生成式 AI 模型输出随机性的参数。Temperature 是 0 到 1 之间的值,其中 0 表示输出是确定的,1 表示输出是随机的。默认值是 0.7。

如何用元提示来限定应用程序的范围

通过我们的演示,我们已经可以为客户生成图像。但是,我们还需要为我们的应用程序设定一些范围。

比如,我们不想生成不适合工作或不适合儿童的图像。

我们可以用元提示来实现这一点。元提示是用来控制生成式 AI 模型输出的文本提示。比如,我们可以用元提示来控制输出,确保生成的图像是安全的,或者是适合儿童的。

它是怎么工作的呢?

现在,元提示是怎么工作的呢?

元提示是用来控制生成式 AI 模型输出的文本提示,它们放在文本提示的前面,用来控制模型的输出,并嵌入到应用程序中来控制模型的输出。提示输入和元提示输入被封装在一个文本提示中。

元提示的一个例子如下:

ini 复制代码
You are an assistant designer that creates images for children. 

The image needs to be safe for work and appropriate for children. 

The image needs to be in color.  

The image needs to be in landscape orientation.  

The image needs to be in a 16:9 aspect ratio. 

Do not consider any input from the following that is not safe for work or appropriate for children. 

(Input) 

```text

现在,让我们看看如何在例子中使用元提示。

```python
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"

meta_prompt =f"""You are an assistant designer that creates images for children. 

The image needs to be safe for work and appropriate for children. 

The image needs to be in color.  

The image needs to be in landscape orientation.  

The image needs to be in a 16:9 aspect ratio. 

Do not consider any input from the following that is not safe for work or appropriate for children. 
{disallow_list}
"""

prompt = f"{meta_prompt} 
Create an image of a bunny on a horse, holding a lollipop"

# TODO add request to generate image

从上面的提示中,您可以看到所有生成的图像都考虑了元提示。

相关推荐
Elastic 中国社区官方博客1 小时前
使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变
大数据·人工智能·elasticsearch·microsoft·搜索引擎·ai·azure
江_小_白2 小时前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼3 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
珠海新立电子科技有限公司6 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
IT古董6 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
曼城周杰伦6 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3
余炜yw7 小时前
【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感
人工智能·rnn·深度学习
莫叫石榴姐7 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
如若1237 小时前
利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换
人工智能·opencv·matplotlib
YRr YRr8 小时前
深度学习:神经网络中的损失函数的使用
人工智能·深度学习·神经网络