AI画画,百度文心的小桥流水人家 | ERNIE-ViLG

上一篇讲了一种“通过文字生成图片” 的AI算法。只要提供充分具体的描述,AI就能帮你生成对应的图片,听起来是不是挺棒的?

今天我们就来看看实际的效果,以及人人皆可学会的操作方法。

考虑到本土化的问题,先上国产算法–ERNIE-ViLG。该算法由百度推出,号称全球最大规模中文跨模态生成模型。下面我用颇具中国特色的描述“小桥流水人家” 来进行创作,看看结果如何!

各位看官,感觉如何?我不太懂画,但是也能看出来有那么点意思。这水平应该能超过很多人了吧。

我很喜欢这首马致远的这种《天净沙·秋思》。既然说了一句,就把其余的也写一下吧。

枯藤老树昏鸦,
小桥流水人家,
古道西风瘦马。
夕阳西下,
断肠人在天涯。

看它表现还不错,我又诗兴大发,来了句“对酒当歌,人生几何!”  没想到…

酒有了,几何也有了,只是这画风这流派我有点欣赏不来了。看到这画,我当即就喊了一声“牛逼” 。

然后我就得到了这样一张图片!幸好他理解的重点在牛,而不是… 否则盯着图看,显得我有点变态。

既然我们前面都说到了诗歌,那么就避不开诗仙李白了。接下来我让文心画个李白吧,为了增加挑战性,特地制定了“赛博朋克”风格。

嗯。这一张表现也还不错。李白和赛博朋克的意思都有了。

这一张就很离谱,赛博朋克到位,李白不知道是哪一个!!!好了好了,不皮了,要更多效果可以看官网的文心画作集。

今天的重点是说一说怎么把这个东西玩起来。

方法一:使用网页版

为了让大家都能轻松的体验到新技术,百度文心推出了”ERNIE-ViLG 文生图” 网页版。只要打开官方提供的网址(见文末),即可直接使用。不需要安装任何东西,也不需要高配的电脑。只要会打字点击按钮就好了。

官方网页如上,只需要输入描述,选择风格,点击立即生成。等待几十秒钟,就可以生成6张图片。这些图片全部由同一个语句生成,但是具体内容会有差异。这一种特性,可以保证作品的独特性。就像德国哲学家莱布尼茨说的:“世上没有两片完全相同的树叶。

方法二:调用API

如果你是开发者,你也可以调用他们的API,然后开发自己的网站,APP,客户端。

点击右上角可以获取到API key和Secret Key。点击代码调用可以看到shell命令和Python代码。

Shell命令:

#ERNIE-ViLG API包含两个接口,一个是提交请求接口,一个是查询结果接口

#创建预测任务
curl -i -k 'https://wenxin.baidu.com/moduleApi/portal/api/rest/1.0/ernievilg/v1/txt2img?access_token=${access_token}' --data-urlencode 'text=萨尔瓦多·达利描绘古代文明的超现实主义梦幻油画,写实风格' --data-urlencode 'style=油画'

#查询任务
curl -i -k 'https://wenxin.baidu.com/moduleApi/portal/api/rest/1.0/ernievilg/v1/getImg?access_token=${access_token}' --,data-urlencode 'taskId=${task_id}' 

命令行分两个命令,一个是创建任务,一个是查询任务。创建任务需要token,描述,类型。token根据AK和SK生成。查询任务需要任务ID。

Python代码:

# -*- coding: utf-8 -*
import wenxin_api # 可以通过"pip install wenxin-api"命令安装
from wenxin_api.tasks.text_to_image import TextToImage
wenxin_api.ak = "iVSSngHASzTci4eQ7YVHPbGsVIkU0S7E"
wenxin_api.sk = "AeP0Wny3AKzrBPndufQEmP9jADodH39K"
input_dict = {
    "text": "萨尔瓦多·达利描绘古代文明的超现实主义梦幻油画,写实风格",
    "style": "油画"
}
rst = TextToImage.create(**input_dict)
print(rst)

 

Python代码是直接把AK和SK写在了代码里面。把文本和风格放到了一个字典里。使用代码前记得先安装官方提供的weixin-api包。

方法三:通过PaddleHub

Paddlehub基于飞浆,飞浆是百度自己研究的深度学习框架。所以要使用Paddlehub需要先安装飞浆,然后安装paddlehub。然后运行下方代码。

import paddlehub as hub 
module = hub.Module(name="ernie_vilg")
results = module.generate_image(text_prompts=["李白,赛博朋克"])
三行代码轻松搞定。除了百度自己的模型之外,通过修改name参数,还可以使用另外两种模型disco_diffusion_ernievil_base 和stable_diffusion。不过这两种类型,在window平台上似乎有一些问题。

基于Paddlehub 还可以快速启动一个服务,提供API接入功能。

服务端启动服务:

hub serving start -m ernie_vilg

 

客户端发起请求:

import requests
import json
import cv2
import base64
from io import BytesIO
from PIL import Image
​
# 发送HTTP请求
data = {'text_prompts': '巨大的白色城堡'}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/ernie_vilg"
r = requests.post(url=url, headers=headers, data=json.dumps(data))
​
# 获取返回结果
for i, result in enumerate(r.json()["results"]):
  image = Image.open(BytesIO(base64.b64decode(result)))
  image.save('result_{}.png'.format(i))

 

请求成功后会在请求方的电脑上生成图片。什么轮子都给你准备好了,用起来确实方便。而且使用Paddlehub来实现会比网页版快一些。

我一直以为Paddlehub上的ernie_vilg 应该属于离线版本,模型应该下载到了本地,其实并不是。虽然它努力装成这样,本质是在后台偷偷调用API 。。。。哈哈哈。这就比较坑了!

我是怎么发现的呢?因为我尝试生成涩图。然后被警告有敏感词… 本地模型居然有敏感词过滤?我难以置信,看了一下源代码,原来和网页版一样,调用的文心API … 。

所以不管壳怎么样,文心的本质都是调用API。你想要无法无天搞艺术(ghs)是不可能滴。为了更大的自由度,作品更加“国际化” , 接下来的文章将会介绍disco_diffusion和stable_diffusion。

这两个项目已经被外国朋友玩出花了,可玩性非常高,可以自定义参,顺便探索一下没有敏感词的世界。

 

相关链接

文心:https://wenxin.baidu.com/moduleApi/ernieVilg

AIStudio :https://aistudio.baidu.com/aistudio/projectdetail/4445016

Hugging Face:https://huggingface.co/spaces/PaddlePaddle/ERNIE-ViLG

提示技巧:https://wenxin.baidu.com/wenxin/docs#Ol7ece95m

 

 

小尾巴==========================
公众号:托尼不是塔克
交流群
知识星球
==============================