DALL-E 图像生成器
![ChatGPT中文站](/posts/1$cObFMaX_rjm5T7Oekuf1bQ.jpeg)
Dall-E是一种生成型人工智能模型,可以生成图像。它使用深度学习方法根据自然语言描述来生成图像。
我们可以使用 Dall-E 根据我们的需求生成图像。我在之前的博客中也使用了这些由 Dall-E 生成的图像。作为一个基于神经网络的模型,它试图复制一个人在某个主题上的思维方式,并相应地输出一张图像。
我制作了一个聊天机器人,允许用户使用Dall-E生成图像。用户需要输入图像的描述,ChatGPT API会生成一个提示。如果这个提示与用户需要的图像相符,就会使用Dall-E包装器生成该图像。
![ChatGPT中文站](/posts/1$MilBg04gJwwb3UYUUnXsvQ.jpeg)
查看此机器人的代码
先决条件
我们将使用Python 3.11与LangChain和ChatGPT API。为此,我们使用命令提示符创建了Anaconda环境。我使用了ChatGPT API:gpt-3.5-turbo-16k-0613。我们为此项目创建了一个诗歌shell。要启动项目,请使用以下命令。
pip install poetry
poetry init
poetry shell
poetry install
poetry build
将创建一个'pyproject.toml'和一个poetry.lock文件,其中包含所有安装的依赖项。
生成图像的提示
首先,生成的第一步是收集用户需求的描述。对于图像生成来说,Dall-E需要深入理解用户需求。由于用户可能不够具体,所以我们通过深入理解用户提供的描述来生成一个提示。
用于此的模板是这样的。
template_image_description = """prompt which desribes {image_desc} in 20 words"""
根据这个模板PromptTemplate生成提示。
def prompt_factory() -> str:
return PromptTemplate(
input_variables=["image_desc"],
template=t.template_image_description,
)
该 PromptTemplate 是通过 LLM 链路传递以发出提示。
async def give_prompt(description: str)-> str:
chain = await image_chain_factory()
prompt_generated = await chain.arun(description)
logger.info(prompt_generated)
return prompt_generated
图像生成
用户应该检查生成的提示,如果可以接受,将会传递给Dall-E封装器进行图像生成。可以使用以下方式安装Dall-E封装器。
from langchain.utilities.dalle_image_generator import DallEAPIWrapper
该图像将使用此函数生成。
def generate_image(prompt: str) -> str:
return DallEAPIWrapper().run(prompt)
聊天机器人
这就是图像生成的聊天机器人的样子。
![ChatGPT中文站](/posts/1$6_qzvfXtjG880vi92bCi0w.png)
机器人告诉我们描述我们希望生成的图像。我举了一个例子:“一片向日葵田”。生成的提示是:
一片辽阔的向日葵田,它们生机勃勃的黄色花瓣朝向太阳延伸,形成了一个令人叹为观止的美丽海洋。
它是一个很好的提示来生成图像,所以我说了是。我们获得了图像的URL。
这个URL会在聊天机器人中读取和打开,用户可以预览图片。如果用户想要以后下载图片,也会为用户提供这个URL。
![ChatGPT中文站](/posts/1$huUCEJR8MYgxIee9T8okGg.png)
对于这个聊天机器人,我使用了标记技术来感知用户所发出的信息的情绪。因此,如果用户对一个问题的回答是“是”,机器人将会感知到一个“积极”的回答,并继续进行后续步骤。同样地,如果回答是“否”,则会记录一个“消极”的回答。如果不是以上两种情况,机器人将退出。
在该项目中使用了一个Pydantic标记链。这是由Dall-E生成的图像。
如果我对图像不满意,将会生成一张新的图像。让我们试试看。
![ChatGPT中文站](/posts/1$SJAFf1kMs7SdQGxg6u8gMw.png)
产生了一张新的图像。
![ChatGPT中文站](/posts/1$G6yYxDd6R6rVjHO3rpMMLg.png)
这是一张更符合我的要求的图片。
我还考虑到了一种情况,即聊天机器人生成的图像可以从机器人本身下载。为此,我使用了以下代码。
def download_image_file(image_url, image_name):
img_data = requests.get(image_url).content
path = cfg.image_path / f"{image_name}.jpg"
with open(path, 'wb') as handler:
handler.write(img_data)
我已提供给用户选择要下载的图像的名称的条款。
![ChatGPT中文站](/posts/1$YiBS25602snXYF3EsbgyFQ.png)
将创建一个名为“ImagesDall-E”的新文件夹,其中包含下载的图像。
![ChatGPT中文站](/posts/1$-MzDSBjLCk3wG8D3HAsYXQ.png)
结论
Dall-E 是一个用于生成图像的强大工具。您可以使用这个机器人来了解 Dall-E 的工作原理和人工智能的惊人之处。
![ChatGPT中文站](/posts/1$OYobBXD9CuMJF3RwKOs7Ig.png)