【文心大模型创意项目】经典菜品生成

文心大模型对于中文的理解十分到位。

在实际使用体验中,我认为这是它相比国外其它成熟的文字-图片项目最易感受到的一点。

一个最简单的例子就是“佛跳墙”,国外某平台只能给出“佛”“跳”“墙”几个要素组合的图片。虽然也成功的完成了语素分离和解析,但是并未找到“佛跳墙”的真实语义


相比之下,文心大模型的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)

开始生成图片

这里需要注意几点,避免项目运行报错。

  1. wenxin_api.akwenxin_api.sk可以替换为自己申请的api。
  2. input_dict参数需要根据最新的文档进行调整。
  3. 将生成的图片重命名并保存到规定的路径中。
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为止,我们已经实现了图片的生成与储存。但是仍然可以对生成的图片进行一些调整,来实现更好的自动化生成效果。


  1. 项目使用了随机选取图片的方式选择图片。在实际使用中,可以更换为更好的图片选择方式。
  2. 项目使用matplotlib在图片上绘制文字以实现图片标注。在实际使用中,还可以进一步使用其它库生成视频等更加丰富多样的表现形式。
  3. 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!

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐