科大讯飞AI图片生成 API 接口接入

科大讯飞AI图片生成 API 接口接入

一、图片生成是什么?

图片生成 是根据用户输入的文字内容,生成符合语义描述的不同风格的图像。

二、使用步骤

1.注册并认证

访问讯飞官网注册账号:https://xinghuo.xfyun.cn/sparkapi?ch=gji
在这里插入图片描述
服务管理-完成个人认证
在这里插入图片描述

2.创建应用

右上角-我的应用
在这里插入图片描述
完善应用信息
在这里插入图片描述
左边选择“星火认知大模型”-“图片生成”
在这里插入图片描述
右边的token信息需要记录下来
实时用量-立即购买,免费领取图点:5000
在这里插入图片描述

3.构建API

https://www.xfyun.cn/doc/spark/ImageGeneration.html
官方提供的demo有go、python3、java语言,这里以PHP调用python为例构建一个API
index.php获取文字及图片参数供Python调用。

<?php
header('Access-Control-Allow-Origin:*');
header('Content-type: application/json');
 
$text=isset($_GET['text'])? $_GET['text'] :null; 
if(empty($text)){die("请传入文本参数");}
 
$width = isset($_GET['width'])? $_GET['width'] :null; 
$height = isset($_GET['height'])? $_GET['height'] :null; 
if(empty($width)||empty($height)){die("请传入图片完整尺寸参数");}
 
$str = exec("python3 w2p.py $text $width $height");
$data = json_decode($str, true); 
 
$response_msg = $data["code"];
if($response_msg == "200") {$code = "200";}
else{$code = "202";}
$image = $data["image"];
 
$json_return = array(
    "code" => $code,
    "src" => $text,
    "image" => "你的api网络位置".$image
);
echo json_encode($json_return, JSON_UNESCAPED_UNICODE);

Python请求讯飞识别接口:w2p.py文件写入内容

# encoding: UTF-8
import time
 
import requests
from datetime import datetime
from wsgiref.handlers import format_date_time
from time import mktime
import hashlib
import base64
import hmac
from urllib.parse import urlencode
import json
from PIL import Image
from io import BytesIO
import json
import sys
 
class AssembleHeaderException(Exception):
    def __init__(self, msg):
        self.message = msg
 
 
class Url:
    def __init__(this, host, path, schema):
        this.host = host
        this.path = path
        this.schema = schema
        pass
 
 
# calculate sha256 and encode to base64
def sha256base64(data):
    sha256 = hashlib.sha256()
    sha256.update(data)
    digest = base64.b64encode(sha256.digest()).decode(encoding='utf-8')
    return digest
 
 
def parse_url(requset_url):
    stidx = requset_url.index("://")
    host = requset_url[stidx + 3:]
    schema = requset_url[:stidx + 3]
    edidx = host.index("/")
    if edidx <= 0:
        raise AssembleHeaderException("invalid request url:" + requset_url)
    path = host[edidx:]
    host = host[:edidx]
    u = Url(host, path, schema)
    return u
 
 
# 生成鉴权url
def assemble_ws_auth_url(requset_url, method="GET", api_key="", api_secret=""):
    u = parse_url(requset_url)
    host = u.host
    path = u.path
    now = datetime.now()
    date = format_date_time(mktime(now.timetuple()))
    # print(date)
    # date = "Thu, 12 Dec 2019 01:57:27 GMT"
    signature_origin = "host: {}\ndate: {}\n{} {} HTTP/1.1".format(host, date, method, path)
    # print(signature_origin)
    signature_sha = hmac.new(api_secret.encode('utf-8'), signature_origin.encode('utf-8'),
                             digestmod=hashlib.sha256).digest()
    signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')
    authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (
        api_key, "hmac-sha256", "host date request-line", signature_sha)
    authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
    # print(authorization_origin)
    values = {
        "host": host,
        "date": date,
        "authorization": authorization
    }
 
    return requset_url + "?" + urlencode(values)
 
# 生成请求body体
def getBody(appid,text,width,height):
    body= {
        "header": {
            "app_id": appid,
            "uid":"123456789"
        },
        "parameter": {
            "chat": {
                "domain": "general",
                "width": width,
                "height": height,
                "temperature":0.5,
                "max_tokens":4096
            }
        },
        "payload": {
            "message":{
                "text":[
                    {
                        "role":"user",
                        "content":text
                    }
                ]
            }
        }
    }
    return body
 
# 发起请求并返回结果
def main(text,appid,apikey,apisecret,width,height):
    host = 'http://spark-api.cn-huabei-1.xf-yun.com/v2.1/tti'
    url = assemble_ws_auth_url(host,method='POST',api_key=apikey,api_secret=apisecret)
    content = getBody(appid,text,width,height)
    # print(time.time())
    response = requests.post(url,json=content,headers={'content-type': "application/json"}).text
    # print(time.time())
    return response
 
#将base64 的图片数据存在本地
def base64_to_image(base64_data, save_path):
    # 解码base64数据
    img_data = base64.b64decode(base64_data)
 
    # 将解码后的数据转换为图片
    img = Image.open(BytesIO(img_data))
 
    # 保存图片到本地
    img.save(save_path)
 
 
# 解析并保存到指定位置
def parser_Message(message):
    data = json.loads(message)
    # print("data" + str(message))
    code = data['header']['code']
    if code != 0:
        print(f'请求错误: {code}, {data}')
    else:
        text = data["payload"]["choices"]["text"]
        imageContent = text[0]
        # if('image' == imageContent["content_type"]):
        imageBase = imageContent["content"]
        imageName = data['header']['sid']
        savePath = f"data/{imageName}.jpg"
        base64_to_image(imageBase,savePath)
        # print("图片保存路径:" + savePath)
        jsondata = {
            "code": "200",
            "image": "/data/" + imageName + ".jpg"
        }
        json_data = json.dumps(jsondata)
        print(json_data)
 
 
if __name__ == '__main__':
    #运行前请配置以下鉴权三要素,获取途径:https://console.xfyun.cn/services/tti
    APPID ='xxxxxx'
    APISecret = 'xxxxxx'
    APIKEY = 'xxxxxx'
    desc = sys.argv[1]
    WIDTH = int(sys.argv[2])
    HEIGHT = int(sys.argv[3])
    res = main(desc,appid=APPID,apikey=APIKEY,apisecret=APISecret,width=WIDTH,height=HEIGHT)
    # print(res)
    #保存到指定位置
    parser_Message(res)

运行前:请先填写Appid、APISecret、APIKEY ,新建data数据文件夹。

4.调用实例

请求地址:

https://你的api地址/?text=白日依山尽,黄河入海流&width=512&height=512

返回数据:

{
   "code": "200",
   "src": "生成一张图:白日依山尽,黄河入海流",
   "image": "你的api网络位置/data/cht000bc10b@dx19067ff76f0b8f3550.jpg"
}

Demo:https://api.szfx.top/api/xftti.html
构建的在线AI图片生成网站:https://tool.szfx.top/tti
在这里插入图片描述


总结

以上就是使用PHP调用python构建AI图片生成API 的教程,欢迎大家去体验。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值