Aitools 开放接口文档

接口调用签名

本文档介绍如何使用 AppKey 与 AppSecret 对 API 调用进行签名,以确保请求的合法性、防止参数篡改和重放攻击。

添加公共参数

参数名 必填 说明
app_key 应用标识
timestamp 当前 Unix 时间戳(秒)
nonce 随机字符串,防止重放攻击
sign 最终生成的签名

将所有请求参数(不含 sign)按键名排序拼接

将所有请求参数(不含 sign)按键名排序, 同时剔除空数据

例如请求参数:

{
  "app_key": "abc123",
  "timestamp": "1736882000",
  "nonce": "f91a2",
  "user_id": "1001",
  "limit": "10",
  "sign": "签名结果"
}

按ASCII升序排序后, 通过url query的方式进行拼接:

app_key=abc123&limit=10&nonce=f91a2&timestamp=1736882000&user_id=1001

使用hmac-sha256进行签名

使用app_secret作为签名的key, 对上面的生成的签名字符串进行HMAC-SHA256计算签名

sign = HMAC-SHA256(key='<App Secret>', message='sign string')

对输出的sign进行hex编码

把生成的sign加入请求参数中提交

{
  "app_key": "abc123",
  "timestamp": "1736882000",
  "nonce": "f91a2",
  "user_id": "1001",
  "limit": "10",
  "sign": "8e5b77d9d2b0d87f9cf53bb8..."
}

下面是一个Go语言生成Sign的示例

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "sort"
    "strings"
)

func BuildHmacSha256Sign(params map[string]string, appSecret string) string {
    // 1. 排序(不包含 sign)
    keys := make([]string, 0, len(params))
    for k := range params {
        if k != "sign" {
            keys = append(keys, k)
        }
    }
    sort.Strings(keys)

    // 2. 拼接成 "k=v&k=v" 格式
    var buf []string
    for _, k := range keys {
        buf = append(buf, fmt.Sprintf("%s=%s", k, params[k]))
    }
    signingString := strings.Join(buf, "&")

    // 3. HMAC-SHA256
    mac := hmac.New(sha256.New, []byte(appSecret))
    mac.Write([]byte(signingString))
    sig := mac.Sum(nil)

    return hex.EncodeToString(sig)
}

func main() {
    params := map[string]string{
        "app_key":   "abc123",
        "timestamp": "1736882000",
        "nonce":     "f91a2",
        "user_id":   "1001",
        "limit":     "10",
    }

    sign := BuildHmacSha256Sign(params, "YourAppSecret")
    fmt.Println("Sign:", sign)
}

抠图

POST: https://aitools.leminet.cn/v1/matting

Content-Type: application/json

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
model Json Body String Matting 选择的模型
image Json Body String https://pic.com/tmp/target.png 待抠图片地址
mask_only Json Body Boolean false 是否只返回遮罩
format Json Body string WEBP 输出图片格式, HEIC, WEBP, 默认使用webp
max_side Json Body int 2048 输出图片的最大边的尺寸, 图片尺寸过大, 会影响导出速度

模型列表

模型 说明
General 1024x1024
Matting 默认
Lite 1024x1024
512x512 512x512
Portrait 1024x1024, 适用于人像抠图

Response

{
  "code": 0,
  "success": true,
  "data": {
    "image": "https://oss.hlsgl.top/tmp/443419a417fa45829455a3a9f9fb470c.png", // 抠图结果
    "mask": ""                                                                 // 当mask_only=true时, 返回抠图遮罩
  }
}

擦除

POST: /v1/inpaint

Content-Type: application/json

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
model Json Body String LaMa 模型选择, 默认模型
image Json Body String https://pic.com/tmp/target.png inpaint 目标图像
mask Json Body String https://pic.com/tmp/mask.png inpaint 遮罩

模型列表

模型 说明
LaMa 推荐
MAT
MIGAN
ZITS 默认模型, 效果好, 但很慢

Response

{
    "code": 0,
    "success": true,
    "data": {
        "image": "https://pic.com/310/tmp/1c72fcaa088c462ba3839a53329920b5.webp"
    }
}

图像超分

POST: /v1/upscale

Content-Type: application/json

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
model Json Body String RealESRGAN 模型选择, 默认使用RealESRGAN模型
image Json Body String tmp/target.png 目标图像
scale Json Body Int 2 放大倍数, 如果原图很大, 显存不足会导致接口调用失败, 放大倍数应该与模型选择一致

模型列表

模型 说明
RealESRGAN/General 默认, Scale = 4
RealESRGAN/RealESRGAN_x2 Scale = 2
RealESRGAN/RealESRGAN_x4 Scale = 4
RealESRGAN/RealESRNET_x4 Scale = 4

Response

{
    "code": 0,
    "success": true,
    "data": {
        "image": "https://oss.hlsgl.top/poster/310/tmp/816feccc7bd047e4a1f9405e7f274a78.webp",
        "scale": 2,           // 缩放倍数
        "filesize": 189383,   // 输出文件大小, 单位字节
        "input_size": "512x512", // 输入图片分辨率
        "output_size": "1024x1024" // 输出图片分辨率
    }
}

图像修复

POST: /v1/restore

Content-Type: application/json

POST: /v1/restore

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
model Json Body String FaceRestore 模型选择, 当前可选值: FaceRestore, General
image Json Body String https://pic.com/tmp/target.png 目标图像

模型列表

模型 说明
General 通用处理, Pipeline(denoise, deblur, upscale)
FaceRestore 在处理人脸修复时有较好的效果, Pipeline(gfpgan, upscale)

图像上色

POST: /v1/colorize

Content-Type: application/json

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
model Json Body String ModelScope 模型选择
image Json Body String https://pic.com/tmp/target.png 目标图像

模型列表

模型 说明
ModelScope 默认模型
Artistic 其它

Response

{
    "code": 0,
    "success": true,
    "data": {
        "image": "https://oss.hlsgl.top/poster/310/tmp/816feccc7bd047e4a1f9405e7f274a78.webp"
    }
}

图像压缩

POST: /v1/compress

Content-Type: application/json

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
image Json Body string poster/310/tmp/test.png 待压缩图片
speed Json Body int 3 [1-11] 数值越大压缩速度越快, 但压缩质量越低, 默认取值4
quality Json Body int 75 图像质量

Response

{
  "code": 0,
  "success": true,
  "data": {
    "input": " "poster/310/tmp/pexels-photo-29611225.webp",
    "image": "https://oss.hlsgl.top/poster/310/tmp/1-67dd2ef3-1561c282-13f5e701c3c0.webp",
    "filesize": 696640, # 导出图片大小, 单位字节
    "ori_filesize": 804258, # 原始图片大小, 单位字节
    "compressibility": 87 # 压缩率, 导出图片大小/原始图片大小*100
  }
}

图像格式转换

POST: /v1/convert

Content-Type: application/json

Request

注意: 公共请求参数请查看调用签名

字段 位置 字段类型 必传 示例 说明
image Json Body string poster/310/tmp/test.png 目标图片
format Json Body string PNG 输出图像格式, 支持PNG, JPG, WEBP, AVIF, HEIC, PSD, PDF, JXL, BMP
alpha Json Body string on 是否保留图像透明度

输出格式列表

格式
PNG
JPG
WEBP
AVIF
HEIC
PSD
PDF
JXL
BMP

Response

{
  "code": 0,
  "success": true,
  "data": {
    "image": "https://oss.hlsgl.top/poster/310/tmp/1-67dd2ef3-1561c282-13f5e701c3c0.webp",
    "format": "avif",
    "filesize": 696640 # 导出图片大小, 单位字节
  }
}