# ernie_vilg |模型名称|ernie_vilg| | :--- | :---: | |类别|图像-文图生成| |网络|ERNIE-ViLG| |数据集|-| |是否支持Fine-tuning|否| |模型大小|-| |最新更新日期|2022-08-02| |数据指标|-| ## 一、模型基本信息 ### 应用效果展示 - 输入文本 "宁静的小镇" 风格 "油画" - 输出图像
### 模型介绍
文心ERNIE-ViLG参数规模达到100亿,是目前为止全球最大规模中文跨模态生成模型,在文本生成图像、图像描述等跨模态生成任务上效果全球领先,在图文生成领域MS-COCO、COCO-CN、AIC-ICC等数据集上取得最好效果。你可以输入一段文本描述以及生成风格,模型就会根据输入的内容自动创作出符合要求的图像。
## 二、安装
- ### 1、环境依赖
- paddlepaddle >= 2.0.0
- paddlehub >= 2.2.0 | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst)
- ### 2、安装
- ```shell
$ hub install ernie_vilg
```
- 如您安装时遇到问题,可参考:[零基础windows安装](../../../../docs/docs_ch/get_start/windows_quickstart.md)
| [零基础Linux安装](../../../../docs/docs_ch/get_start/linux_quickstart.md) | [零基础MacOS安装](../../../../docs/docs_ch/get_start/mac_quickstart.md)
## 三、模型API预测
- ### 1、命令行预测
- ```shell
$ hub run ernie_vilg --text_prompts "宁静的小镇" --output_dir ernie_vilg_out
```
- ### 2、预测代码示例
- ```python
import paddlehub as hub
module = hub.Module(name="ernie_vilg")
text_prompts = ["宁静的小镇"]
images = module.generate_image(text_prompts=text_prompts, output_dir='./ernie_vilg_out/')
```
- ### 3、API
- ```python
def __init__(ak: Optional[str]=None, sk: Optional[str]=None)
```
- 初始化模块,可自定义用于申请访问文心API的ak和sk。
- **参数**
- ak:(Optional[str]): 用于申请文心api使用token的ak,可不填。
- sk:(Optional[str]): 用于申请文心api使用token的sk,可不填。
- ```python
def generate_image(
text_prompts:str,
style: Optional[str] = "油画",
topk: Optional[int] = 10,
output_dir: Optional[str] = 'ernievilg_output')
```
- 文图生成API,生成文本描述内容的图像。
- **参数**
- text_prompts(str): 输入的语句,描述想要生成的图像的内容。
- style(Optional[str]): 生成图像的风格,当前支持'油画','水彩','粉笔画','卡通','儿童画','蜡笔画'。
- topk(Optional[int]): 保存前多少张图,最多保存10张。
- output_dir(Optional[str]): 保存输出图像的目录,默认为"ernievilg_output"。
- **返回**
- images(List(PIL.Image)): 返回生成的所有图像列表,PIL的Image格式。
## 四、服务部署
- PaddleHub Serving可以部署一个在线文图生成服务。
- ### 第一步:启动PaddleHub Serving
- 运行启动命令:
- ```shell
$ hub serving start -m ernie_vilg
```
- 这样就完成了一个文图生成的在线服务API的部署,默认端口号为8866。
- **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA\_VISIBLE\_DEVICES环境变量,否则不用设置。
- ### 第二步:发送预测请求
- 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果。
- ```python
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))
- ### gradio app 支持
从paddlehub 2.3.1开始支持使用链接 http://127.0.0.1:8866/gradio/ernie_vilg 在浏览器中访问ernie_vilg的gradio app。
## 五、更新历史
* 1.0.0
初始发布
* 1.1.0
增加分辨率参数以及所支持的风格
* 1.2.0
移除分辨率参数,移除默认 AK 和 SK
* 1.3.0
新增对gradio app的支持
```shell
$ hub install ernie_vilg == 1.3.0
```