166.人工智能——AI作图体验

本文主要使用百度智能云的智能创作平台,体验如何调用百度AI服务(AI作图)。

首先要登录百度智能云(https://ai.baidu.com),找到智能创作平台,创建自己的应用( 通过应用的 API Key和 Secret Key获取Access_token来调用百度AI服务 )。

ai人工智能绘图作品欣赏,ai人工智能绘图教学

创建应用

ai人工智能绘图作品欣赏,ai人工智能绘图教学

智能创作平台

测试完整代码

import requests
import json
from PIL import Image
import threading


API_KEY = "***********" 
SECRET_KEY = "***********"

# 基础版和高级版,参数区别。
taskidlst=[]  #返回线程的变量

#文生图,并返回任务ID
def txt2imgmain():
    
		#基础版
    # url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img?access_token=" + get_access_token()    
    # payload = json.dumps({
    #     "text": "雨后的蔷薇花,近景,细致入微,晶莹剔透,娇艳欲滴,晨光下,高清晰度",
    #     "resolution": "1024*1024",
    #     "style": "写实风格"
    # })
    
    # 高级版
    url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2imgv2?access_token=" + get_access_token()
    payload = json.dumps({
        "prompt": "雨后的蔷薇花,近景,细致入微,晶莹剔透,娇艳欲滴,晨光下,高清晰度",
        "width": 1024,
        "height": 1024
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
  
    print(response.text)
    res=json.loads(response.text)
    #taskId=res['data']['taskId']
    #高级版,解析json数据
    taskId=res['data']['task_id']
    taskidlst.append(taskId)
    return taskId
    
    
#根据任务ID,返回生成图像的URL
def getImgmain(taskid):        
    #url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImg?access_token=" + get_access_token()
    #高级版
    url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImgv2?access_token=" + get_access_token()
    
    payload = json.dumps({
        #"taskId": taskid
        #高级版
        "task_id":taskid
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    res=json.loads(response.text)
    print(res)
    #imgurl=res['data']['imgUrls'][0]['image']
    #高级版
    imgurl=res['data']['sub_task_result_list'][0]['final_image_list'][0]['img_url']
    return imgurl

#获取访问令牌
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"))

#根据图像URL保存图像到本地,并显示。
def saveimg(imgurl):
    response = requests.get(imgurl)
    # 将图像文件保存到本地文件
    with open("output.jpg", "wb") as f:
        f.write(response.content)
    # 打开本地图像文件
    img = Image.open("output.jpg")
    img.show()

#程序主体入口
if __name__ == '__main__':
    thread1=threading.Thread(target=txt2imgmain,args=())
    thread1.start()
    # 判断线程是否执行结束(文生图是否结束)
    while thread1.is_alive():
        continue
    print("线程执行完毕")  
    print(taskidlst)
    taskid=taskidlst[0]
               
    imgurl=getImgmain(str(taskid))
    saveimg(imgurl)
    

注意:因为文生图函数执行时间比较长,如果函数没有执行完毕,就无法返回任务ID,主程序后面的保存图像函数就会报错。解决办法:引入线程。把文本图函数放入线程,等这个线程执行结束,才开始后面的函数。