# 【拥抱AIGC 应用ChatGPT和OpenAI API】使用OpenAI生成四格漫画
《拥抱AIGC 应用ChatGPT和OpenAI API》这本书讲的内容,基本都是实战相关的,这篇分享,就是阅读之后,使用OpenAI,来生成四格漫画。其中使用到了OpenAI的对话功能,以及绘图功能。
## 简单流程:
1. 用一句话做为Prompt,让OpenAI进行扩写
2. 将扩写的内容,分为4个部分
3. 用扩写的内容,调用OpenAI的Dall-E-3,来生成漫画图片
## 实现过程:
### 安装openai扩展
openai提供的SDK,主要为Python环境的,首先为Python环境安装openai扩展:
```
pip install openai
```
### 实例化openai对象
```
from openai import OpenAI
import time
import requests
import os
os.environ["OPENAI_LOG"] = 'debug'
# openai参数定义
OPENAI_API_KEY = "sk-cPjd4D89kSsj2dhDkx678DbSi29D01bCqU4PGSW3a7D8kS30"
OPENAI_BASE_URL = "https://api.openai.com/v1"
client = OpenAI(
api_key=OPENAI_API_KEY,
base_url=OPENAI_BASE_URL
)
```
需要注意的是,当前openai对请求验证严格,需要确保有稳定可靠的运行环境。
### 定义绘画相关的参数
```
# 图像大小
# ['1024x1024', '1024x1792', '1792x1024']
image_width = 1024
image_height = 1024
image_num = 4
# 风格类型
style = "comic-book"
```
绘图调用OpenAI的Dall-E-3,可以支持数十种以上的风格,这里使用手绘风格。
### 扩写内容调用
扩写内容,直接调用openai的chat接口,提供合适的提示词,就能把一句话扩写为一段话或者几段话
```
prompt = "画一个猪八戒大战变形金刚的四格漫画"
messages = [
{"role": "system", "content": "你是一个四格漫画生成助手"},
{"role": "user","content": prompt}
]
completion = client.chat.completions.create(
model="gpt-4o-mini", #"gpt-3.5-turbo",
messages=messages,
temperature=0.7,
)
content = completion.choices[0].message.content
```
调用 client.chat.completions.create 成功后,content里面,就是实际返回的文本内容了。
实际运行,输出结果如下:
> **第一格**:猪八戒手握钉耙,面露自信,站在变形金刚面前。旁白:“今天,我要挑战这个机械巨人!”
>
> **第二格**:变形金刚变形,发出轰鸣声,露出高大威猛的姿态。旁白:“小心了,猪八戒!”
>
> **第三格**:猪八戒挥舞钉耙,勇敢冲向变形金刚,嘴里喊着:“我可是八戒,谁怕谁!”
>
> **第四格**:变形金刚被钉耙打中,四分五裂,猪八戒一脸得意。旁白:“看来,今天是我的胜利!”
### 生成图片调用
生成了内容以后,就可以调用Dall-E-3,来生成对应的漫画图片了。
```
prompt2 = "生成{}张{}风格样式的图片:{}".format(
image_num, style, content
)
response = client.images.generate(
model="dall-e-3",
prompt=prompt2,
size="{}x{}".format(image_width,image_height), # ['1024x1024', '1024x1792', '1792x1024']
# quality="standard",
n=1,
)
image_url = response.data[0].url
```
上面的代码,将之前扩写的内容,提交给Dall-E-3,来生成对应的漫画。生成成功后,会返回一个老长老长的网址,就对应实际生成的图片。
最终生成的结果如下:
## 总结
通过上面的步骤,调用OpenAI的接口,从而实现了扩写内容到生成对应的图片。
当然,上述每一步的prompt还可以继续优化,以便更好的把我们的意图传达给AI服务,从而得到更符合我们期望的输出结果。
另外,后续将会结合Python图像处理工具,将每一格对应的文件,显示在对应的漫画格上。这一步,虽然可以用OpenAI来完成,但是有时候效果可能不是很好。