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

不到断气不罢休  论坛元老 | 2024-8-28 12:32:08 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1809|帖子 1809|积分 5427

作者介绍

乔冠华,女,西安工程大学电子信息学院,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天生的不同风格的图像如下:

利用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”)
  1. import requests
  2. import json
  3. API_KEY = "自己申请的API Key"
  4. SECRET_KEY = "自己申请的Secret Key"
  5. def main():
  6.         
  7.     url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img?access_token=" + get_access_token()
  8.    
  9.     payload = json.dumps({
  10.         "text": "中国山水画",#输入中文描述
  11.         "resolution": "1024*1024",#选择图片分辨率,可支持1024*1024、1024*1536、1536*1024
  12.         "style": "古风",#选择图像风格,古风、二次元、写实风格、浮世绘、未来主义、赛博朋克等等
  13.         "num": 2#输入要生成的图片数量,可选1~6张
  14.     })
  15.     headers = {
  16.         'Content-Type': 'application/json',
  17.         'Accept': 'application/json'
  18.     }
  19.    
  20.     response = requests.request("POST", url, headers=headers, data=payload)
  21.    
  22.     print(response.text)
  23.    
  24. #获取Access Token
  25. def get_access_token():
  26.     """
  27.     使用 AK,SK 生成鉴权签名(Access Token)
  28.     :return: access_token,或是None(如果错误)
  29.     """
  30.     url = "https://aip.baidubce.com/oauth/2.0/token"
  31.     params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
  32.     return str(requests.post(url, params=params).json().get("access_token"))
  33. if __name__ == '__main__':
  34.     main()
复制代码


  • 查询效果代码
    创建“查询效果”接口文件,根据申请的个人API Key和Secret Key,以及“提交请求”代码得到的图片天生使命ID——“taskId”(有用期一个月),修改并运行以下代码。(该代码可得到最终天生的图片)
  1. import requests
  2. import json
  3. from io import BytesIO#BytesIO实现了在内存中读写bytes
  4. from PIL import Image
  5. import os
  6. API_KEY = "自己申请的API Key"
  7. SECRET_KEY = "自己申请的Secret Key"
  8. def main():
  9.     #API接口的url
  10.     url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImg?access_token=" + get_access_token()
  11.    #发送请求获取网页内容
  12.     payload = json.dumps({
  13.         "taskId": "提交请求代码返回的 'taskId' 的值"
  14.     })
  15.     headers = {
  16.         'Content-Type': 'application/json',
  17.         'Accept': 'application/json'
  18.     }   
  19.     response = requests.request("POST", url, headers=headers, data=payload)
  20.     print('请求的返回值:',response.text)
  21.     json_result = json.loads(response.text)
  22.     imgUrls=json_result['data']['imgUrls']#返回imgUrls的结果
  23.     print("imgUrls的返回值:", imgUrls)#imgUrls":[{"image":"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/4a90992981919xxxxxx"},{"image":"https://wenxin.baidu.com/younger/file/ERNIE-ViLG/4a90992981919a74f0b4xxxxx"}]
  24.     print("imgUrls类型:",type(imgUrls))#查看imgUrls类型,是列表
  25.     print("imgUrls数量:",len(imgUrls))
  26.     #获得图片网址并将图片保存到本地
  27.     for i in range(0,len(imgUrls)):
  28.         img_url=imgUrls[i]
  29.         print('imges_url:',img_url)
  30.         img_url=img_url['image']
  31.         print('image_url:',img_url)
  32.         #保存图片到本地
  33.         req=requests.get(img_url)#获取图片网址
  34.         image = Image.open(BytesIO(req.content))#在内存中打开图片
  35.         image.save(os.path.join('图片保存路径','{}.jpg'.format(i)), 'JPEG')
  36.         
  37. #获取Access Token
  38. def get_access_token():
  39.     """
  40.     使用 AK,SK 生成鉴权签名(Access Token)
  41.     :return: access_token,或是None(如果错误)
  42.     """
  43.     url = "https://aip.baidubce.com/oauth/2.0/token"
  44.     params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
  45.     return str(requests.post(url, params=params).json().get("access_token"))
  46. if __name__ == '__main__':
  47.     main()
复制代码
四.效果展示



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



  • 根据得到的使命ID运行“查询效果”代码后即可得到最终天生的.jpg图片:

参考链接:
https://zhuanlan.zhihu.com/p/600247099
https://zhuanlan.zhihu.com/p/455523289

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表