跳转至

音频分类

POST /api/v5/audio/classification

该接口用于对上传的音频文件进行情感分类识别,返回音频的向量表示、情感三维度(唤醒度、支配度、效价)分数以及格式化后的分类结果列表。

访问令牌支持说明

  • AtomGit 用户访问令牌(AtomGit user access tokens)

是否允许匿名访问

此接口允许匿名访问

请求参数

参数名 位置 类型 必填 说明
model query string 是 模型名称,默认为 audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim

请求体为 multipart/form-data 表单,字段见下:

Request Body:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "file": {
      "description": "音频文件(支持 mp3、wav、m4a、flac、webm 格式),必填",
      "type": "string",
      "format": "binary"
    }
  },
  "required": ["file"]
}

注意: model 虽为必填,但未传时可回落到默认模型 audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim。

响应参数

字段 类型 必返 可为空 说明
vector number 是 是 音频文件的向量表示
emotion_class object 是 是 情感三维度(唤醒度/支配度/效价)分数
emotionItems array 是 是 情感分类结果列表(格式化后)

emotion_class 对象

字段 类型 必返 可为空 说明
emotion_class.arousal number 是 是 唤醒度分数(情感激活程度:如兴奋/平静)
emotion_class.dominance number 是 是 支配度分数(情感控制感:如支配/顺从)
emotion_class.valence number 是 是 效价分数(情感正负向:如愉悦/不悦)

emotionItems 数组元素

字段 类型 必返 可为空 说明
emotionItems.label string 是 是 分类名称(中文),如 激动程度
emotionItems.labelEn string 是 是 分类名称(英文),如 Arousal
emotionItems.value string 是 是 数值,如 0.6820112466812134
emotionItems.valueDesc string 是 是 数值描述(中文),如 偏激动
emotionItems.valueDescEn string 是 是 数值描述(英文),如 slightly excited

失败响应

400 参数错误:

{
  "error_message": "读取文件失败: <原因>"
}

401 未认证:

{
  "error_message": "缺少或无效的访问令牌"
}

500 服务异常:

{
  "error_message": "音频转录服务返回空响应"
}

错误响应体结构以实际返回为准,字段名可能因上游服务差异而不同。

HTTP 响应状态码

状态码 说明
200 成功(OK)
400 参数错误(Bad request)
401 需要认证(Unauthorized)
500 系统内部错误(Internal server error)

请求示例

参数说明

  • <file> 替换为音频文件路径(支持 mp3、wav、m4a、flac、webm 格式);
  • <model> 替换为模型名称,可省略(缺省使用默认模型 audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim);
  • 本接口允许匿名访问,也可携带 AtomGit 用户访问令牌。

cURL

curl -X POST 'https://api.atomgit.com/api/v5/audio/classification' \
  -H 'Accept: application/json' \
  -F 'file=@<audio-file>' \
  -F 'model=audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim'

JavaScript

// 原生 fetch (Node.js 18+ / 浏览器)
const formData = new FormData();
formData.append("file", fileInput.files[0]);
formData.append("model", "audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim");

const response = await fetch("https://api.atomgit.com/api/v5/audio/classification", {
  method: "POST",
  headers: {
    "Accept": "application/json",
  },
  body: formData,
});

if (!response.ok) {
  throw new Error(`请求失败: ${response.status}`);
}

const data = await response.json();
console.log(data);

Python

import requests

resp = requests.post(
    "https://api.atomgit.com/api/v5/audio/classification",
    headers={
        "Accept": "application/json",
    },
    files={
        "file": (
            "audio.mp3",
            open("audio.mp3", "rb"),
            "audio/mpeg",
        )
    },
    data={
        "model": "audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim",
    },
    timeout=10,
)
resp.raise_for_status()

print(resp.json())

响应示例

状态码: 200

{
  "vector": null,
  "emotion_class": {
    "arousal": 0.38037118315696716,
    "dominance": 0.4589272439479828,
    "valence": 0.5078083276748657
  },
  "emotion_items": [
    {
      "label": "激动程度",
      "label_en": "Arousal",
      "value": "0.38037118315696716",
      "value_desc": "偏平静",
      "value_desc_en": "Calm"
    },
    {
      "label": "情绪正负",
      "label_en": "Valence",
      "value": "0.5078083276748657",
      "value_desc": "中性",
      "value_desc_en": "Neutral"
    },
    {
      "label": "控制感",
      "label_en": "Dominance",
      "value": "0.4589272439479828",
      "value_desc": "中性",
      "value_desc_en": "Medium Control"
    }
  ]
}

注意: 响应为上游服务返回的原始 JSON,实际字段名(emotion_class/emotion_class、emotionItems/emotion_items)与键名风格以实际返回为准。

错误码

错误码 说明
400 参数错误或请求无法解析
401 未认证或凭证无效
500 系统内部错误

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 gitcode-dev/atomgit-api-doc