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 # 导出图片大小, 单位字节
  }
}