【2022 CCF BDCI 文心大模型创意项目】经典菜品生成
文生图对于中文语义理解和图片生成具有很好的效果。本项目尝试使用飞桨文生图实现八大菜系的代表菜品生成。
【文心大模型创意项目】经典菜品生成
文心大模型对于中文的理解十分到位。
在实际使用体验中,我认为这是它相比国外其它成熟的文字-图片项目最易感受到的一点。
一个最简单的例子就是“佛跳墙”,国外某平台只能给出“佛”“跳”“墙”几个要素组合的图片。虽然也成功的完成了语素分离和解析,但是并未找到“佛跳墙”的真实语义。
相比之下,文心大模型的ERNIE-ViLG 文生图拥有更全面的中文语料库,可以提供更为准确的生成结果。
效果展示
目前ERNIE-ViLG 文生图的风格化仍在拓展中。对于现实物品的绘制,可以尝试使用“古风”。
这里就以佛跳墙为例,展示ERNIE-ViLG 文生图的生成能力,并依此提出创意,我们可以方便的使用文生图生成所需的展示图片与视频。
如果直接以Prompt“佛跳墙”“古风”生成图片,可以展示如下成果:
为了更好的生成所需的图片,需要增加Prompt“菜”,即可生成贴合主题的图片:
开始项目
在工作生活中,有时需要快速制作一些展示视频。通过使用ERNIE-ViLG 文生图,可以规避一些在网络上搜寻图片带来的侵权问题,并可以极大地提升工作效率。
我们团队在这里抛砖引玉,制作了一个经典菜品生成的文生图项目,可以根据输入关键词快速生成结果。希望可以启发各位读者的思路,制作出更加有趣的项目。
安装依赖
首先安装依赖。
!ls /home/aistudio/work
!mkdir /home/aistudio/external-libraries
!pip install beautifulsoup4 -t /home/aistudio/external-libraries
!pip install --upgrade wenxin-api
import sys
sys.path.append('/home/aistudio/external-libraries')
然后引入库。
import os
import shutil
import paddlehub as hub
import wenxin_api
import requests
确定生成目标
这里以八大经典菜系为例。
首先通过数组输入Prompt。这里需要注意首先检查文件路径是否存在,避免路径冲突。
txt_list=["广州文昌鸡","麻婆豆腐","锅烧肘子","凤尾虾","醉排骨","东坡肉","剁椒鱼头","无为熏鸭"]
ind_list=["粤菜","川菜","鲁菜","苏菜","闽菜","浙菜","湘菜","徽菜"]
def mkdir(data_path):
if not os.path.exists(data_path):
os.makedirs(data_path)
temp_dir = "/home/aistudio/temp"
fin_dir="/home/aistudio/fin"
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
mkdir(temp_dir)
开始生成图片
这里需要注意几点,避免项目运行报错。
wenxin_api.ak
和wenxin_api.sk
可以替换为自己申请的api。input_dict
参数需要根据最新的文档进行调整。- 将生成的图片重命名并保存到规定的路径中。
from wenxin_api.tasks.text_to_image import TextToImage
%matplotlib inline
try:
for k, txt in enumerate(txt_list):
imgUrl = []
wenxin_api.ak = "NGQW0V6kkpzlQDiU3ehDCK8K6qDzYQi0"
wenxin_api.sk = "vPRGu52Nul4pkiyr9DFrND9rWrUFB3Zd"
input_dict = {
# 注意这里必须指明是菜,才不会引发歧义
"text": txt+",菜",
"style": "古风",
"resolution": "1024*1024"
}
rst = TextToImage.create(**input_dict)
print(rst)
imgUrl=rst['imgUrls']
this_dir='/home/aistudio/temp/'+str(k)
# 生成文件路径
mkdir(this_dir)
# 保存生成的图片
for i in range(len(imgUrl)):
r = requests.get(imgUrl[i])
name = str(k)+str(i)+'.png'
rename = this_dir+'/' + name
with open(rename, 'wb') as f:
f.write(r.content)
f.close()
except Exception as e:
print(e)
选取图片并调整
至前一个cell为止,我们已经实现了图片的生成与储存。但是仍然可以对生成的图片进行一些调整,来实现更好的自动化生成效果。
- 项目使用了随机选取图片的方式选择图片。在实际使用中,可以更换为更好的图片选择方式。
- 项目使用matplotlib在图片上绘制文字以实现图片标注。在实际使用中,还可以进一步使用其它库生成视频等更加丰富多样的表现形式。
- notebook运行报错或出现断点时,可能会生成
ipynb_checkpoints
文件。该文件默认隐藏,但是在项目运行时会干扰运行。这里使用判断将其自动删除。
import random
import shutil
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
font1 = ImageFont.truetype("ST.ttf",48)
if os.path.exists(fin_dir):
shutil.rmtree(fin_dir)
mkdir(fin_dir)
for i in range(len(txt_list)):
filelist = os.listdir(temp_dir+'/'+str(i))
# 保证读取按照文件的顺序
filelist.sort()
# 删除断点文件
if ('.ipynb_checkpoints' in filelist):
del filelist[0]
imageFile = temp_dir + '/' + str(i)+ '/' + random.choice(filelist)
tp=Image.open(imageFile)
# 在图片上添加文字
draw = ImageDraw.Draw(tp)
draw.text((50, 50),ind_list[i] + txt_list[i],(153, 188, 172),font=font1)
draw = ImageDraw.Draw(tp)
# 保存
tp.save(fin_dir + '/' + str(i)+'.png') #图片保存路径
完成图片生成
至此,已经在fin文件夹下生成所需的图片了。可以根据需要,调用其它库实现更加丰富的展示效果。
这里是我的生成效果展示。
本项目通过应用ERNIE-ViLG 文生图api,实现了预定目标图片的自动化生成。对于不同的项目,只需更改合适的Prompt即可实现。
期待各位读者能获得一些启发,使用ERNIE-ViLG 文生图制作出更有趣的项目。
如果喜欢,欢迎点赞和fork!
此文章为搬运
原项目链接
更多推荐
所有评论(0)