调用百度文心AI作画API实现中文-图像跨模态生成

作者介绍

乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。
研究方向:机器视觉与人工智能。
电子邮件:1078914066@qq.com

一.文心AI作画API介绍

1. 文心AI作画

文心ERNIE-ViLG,一款适合中文的跨模态AI绘画大模型。
论文地址:https://arxiv.org/pdf/2112.15283.pdf
体验连接:https://wenxin.baidu.com/ernie-vilg

文心ERNIE-ViLG是一个大规模的中文跨模态生成模型,其参数规模达到100亿。该模型首次通过自回归算法将图像生成和文本生成统一建模,增强模型的跨模态语义对齐能力,显著提升图文生成效果。

ERNIE-ViLG生成的不同风格的图像如下:

ERNIE-ViLG生成的不同风格的图像

利用AI技术生成图片的最终目的是要便捷地为人类创造美的作品,激发人的想象力和创作力。在艺术创作、虚拟现实、图像编辑、AI 辅助设计、虚拟数字人等领域,文心 ERNIE-ViLG 这类跨模态大模型有着广泛的应用前景,也为这些领域未来的发展提供了无限的创意和可能。作为百度“文心”大模型全景图中的重要一员,文心 ERNIE-ViLG 也代表着百度文心在跨模态大模型领域迈出坚实步伐,从技术自主创新和加速产业应用方面持续推动中国 AI 发展。

2.接口介绍

文心AI作画API基于文心ERNIE-ViLG大模型,可根据用户输入的中文文本,自动创作图片。

文心AI作画涉及2个接口,分别为:提交请求、查询结果。

  • 提交请求:传入文本、分辨率、风格参数,创建ERNIE-ViLG AI作画任务,获得任务ID。
  • 查询结果:用于在任务创建后,查看图片生成状态。待图片生成完毕,通过查询接口即可查看生成图片的地址链接。

该接口通过自定义丰富的修饰词,生成不同风格、不同构图、不同流派的图片(每次可自定义生成1张至6张图片)。

二.注册账号并获取API Key

进入:百度智能云并创建应用获取API Key,Secret Key

1. 注册百度智能云账号

免费注册登录百度智能云账号进入下图界面,选择右上角 “控制台”模块:

在这里插入图片描述

选择“产品服务”中“人工之智能”模块的“智能创作平台”项目:

在这里插入图片描述

点击领取免费的接口资源(根据要求实名认证后可获取):

在这里插入图片描述

在这里插入图片描述

2. 获取API

在“应用列表”中点击“创建应用”,免费创建个人文本-图像生成应用模块:

在这里插入图片描述

创建成功的应用模块如下,从中可以获取个人应用模块的API Key和Secret Key:

在这里插入图片描述

三.代码实现

完整代码

  • 提交请求代码
    创建“提交请求”接口文件,并根据申请的个人API Key和Secret Key,以及自定义输入的文本和参数信息,修改并运行以下代码。(该代码可得到图片生成任务ID——“taskId”)
import requests
import json

API_KEY = "自己申请的API Key"
SECRET_KEY = "自己申请的Secret Key"

def main():
        
    url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img?access_token=" + get_access_token()
    
    payload = json.dumps({
        "text": "中国山水画",#输入中文描述
        "resolution": "1024*1024",#选择图片分辨率,可支持1024*1024、1024*1536、1536*1024
        "style": "古风",#选择图像风格,古风、二次元、写实风格、浮世绘、未来主义、赛博朋克等等
        "num": 2#输入要生成的图片数量,可选1~6张
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    
#获取Access Token
def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()
  • 查询结果代码
    创建“查询结果”接口文件,根据申请的个人API Key和Secret Key,以及“提交请求”代码得到的图片生成任务ID——“taskId”(有效期一个月),修改并运行以下代码。(该代码可得到最终生成的图片)
import requests
import json
from io import BytesIO#BytesIO实现了在内存中读写bytes
from PIL import Image
import os
API_KEY = "自己申请的API Key"
SECRET_KEY = "自己申请的Secret Key"

def main():
    #API接口的url 
    url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImg?access_token=" + get_access_token()
   #发送请求获取网页内容 
    payload = json.dumps({
        "taskId": "提交请求代码返回的 'taskId' 的值"
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }    
    response = requests.request("POST", url, headers=headers, data=payload)
    print('请求的返回值:',response.text)
    json_result = json.loads(response.text)
    imgUrls=json_result['data']['imgUrls']#返回imgUrls的结果
    print("imgUrls的返回值:", imgUrls)#imgUrls":[{"image":"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/4a90992981919xxxxxx"},{"image":"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/4a90992981919a74f0b4xxxxx"}]
    print("imgUrls类型:",type(imgUrls))#查看imgUrls类型,是列表
    print("imgUrls数量:",len(imgUrls))

    #获得图片网址并将图片保存到本地
    for i in range(0,len(imgUrls)):
        img_url=imgUrls[i]
        print('imges_url:',img_url)
        img_url=img_url['image']
        print('image_url:',img_url)
        #保存图片到本地
        req=requests.get(img_url)#获取图片网址
        image = Image.open(BytesIO(req.content))#在内存中打开图片
        image.save(os.path.join('图片保存路径','{}.jpg'.format(i)), 'JPEG')
        
#获取Access Token
def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()

四.效果展示

  • 运行“提交请求”代码后,可以得到获得任务ID——“taskId”:

在这里插入图片描述

  • 根据获得的任务ID运行“查询结果”代码后即可得到最终生成的.jpg图片:

在这里插入图片描述
参考链接:
https://zhuanlan.zhihu.com/p/600247099
https://zhuanlan.zhihu.com/p/455523289

  • 18
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 144
    评论
以下是一个调用腾讯云API实现图像滤镜的Python代码示例: ```python import base64 import hashlib import hmac import json import random import time import urllib.parse import urllib.request # 腾讯云API配置信息 secret_id = 'your_secret_id' secret_key = 'your_secret_key' endpoint = 'face.tencentcloudapi.com' service = 'face' version = '2018-12-03' algorithm = 'TC3-HMAC-SHA256' # 图片地址 image_url = 'your_image_url' # API请求参数 params = { 'Image': image_url, 'FilterType': 1 # 滤镜类型,1表示黑白 } # 生成TC3-HMAC-SHA256签名 def sign(secret_key, algorithm, datetime, service, version, action, params): # 生成规范请求串 canonical_uri = '/' canonical_querystring = '' canonical_headers = 'content-type:application/json\nhost:{}\n'.format(endpoint) signed_headers = 'content-type;host' payload_hash = hashlib.sha256(json.dumps(params).encode('utf-8')).hexdigest() canonical_request = 'POST\n{}\n{}\n{}\n{}\n{}\n{}'.format( canonical_uri, canonical_querystring, canonical_headers, signed_headers, payload_hash, ' '.join(sorted(signed_headers.split(';'))) ) # 生成待签名字符串 date = datetime.split('T')[0] credential_scope = '{}/{}/{}/tc3_request'.format(date, service, 'tc3_request') hashed_request = hashlib.sha256(canonical_request.encode('utf-8')).hexdigest() string_to_sign = '{}\n{}\n{}\n{}'.format( algorithm, datetime, credential_scope, hashed_request ) # 生成签名 secret_date = hmac.new(('TC3' + secret_key).encode('utf-8'), date.encode('utf-8'), hashlib.sha256).digest() secret_service = hmac.new(secret_date, service.encode('utf-8'), hashlib.sha256).digest() secret_signing = hmac.new(secret_service, 'tc3_request'.encode('utf-8'), hashlib.sha256).digest() signature = hmac.new(secret_signing, string_to_sign.encode('utf-8'), hashlib.sha256).hexdigest() # 生成Authorization头部信息 authorization = '{} Credential={}/{}, SignedHeaders={}, Signature={}'.format( algorithm, secret_id, credential_scope, signed_headers, signature ) return authorization # 发送API请求 def request_api(image_url, params): # 生成请求时间戳和随机字符串 datetime = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()) nonce = ''.join(random.choice('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') for i in range(32)) # 生成请求头部信息 headers = { 'Content-Type': 'application/json', 'Host': endpoint, 'X-TC-Action': 'StyleImage', 'X-TC-Version': version, 'X-TC-Timestamp': str(int(time.time())), 'X-TC-Nonce': nonce, 'Authorization': sign(secret_key, algorithm, datetime, service, version, 'StyleImage', params) } # 发送POST请求 req = urllib.request.Request('https://{}'.format(endpoint), data=json.dumps(params).encode('utf-8'), headers=headers, method='POST') resp = urllib.request.urlopen(req) result = json.loads(resp.read().decode('utf-8')) return result # 将返回结果中的base64编码的图片保存到本地 def save_image(base64_data, file_path): with open(file_path, 'wb') as f: f.write(base64.b64decode(base64_data)) # 调用API并保存结果 result = request_api(image_url, params) save_image(result['StyledImage'], 'output.jpg') ``` 需要替换代码中的 `your_secret_id` 和 `your_secret_key` 为自己的腾讯云API密钥,以及 `your_image_url` 为需要处理的图片地址。同时还可以根据需要修改滤镜类型等参数。该代码将使用黑白滤镜处理图片,并将结果保存到本地文件 `output.jpg` 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 144
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值