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