开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
EasyDL零门槛AI开发平台

    经典版声音分类API调用文档

    目录

    1. 接口功能描述
    2. 接口鉴权
    3. 请求说明
    4. 返回说明
    5. 错误码

    接口描述

    声音分类模型完成模型发布后可以获得定制的声音分类API,实现基于定制的声音分类模型,调用API输入15s以内的音频数据,返回自定义的分类结果。

    接口鉴权

    创建应用

    进入EasyDL控制台概览页,在已上线的定制接口下,可以看到已发布上线的声音分类API。在正式调用之前,首先点击创建应用,定义应用名称、应用类型、应用描述等信息,完成应用创建。

    image.png

    应用创建后,在应用详情页获取API Key、Secret Key。

    image.png

    请求说明

    请求示例

    HTTP 方法:POST

    请求URL: 请在应用详情页面获取接口地址,与发布模型时定义的url一致。

    image.png

    URL参数:

    参数
    access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

    Header如下:

    参数
    Content-Type application/json

    Body请求示例:

    {
        "sound": "<base64数据>",
        "top_num": 6
    }

    Body中放置请求参数,参数详情如下:

    请求参数

    参数 是否必选 类型 可选值范围 说明
    sound string - 音频,base64编码,要求base64编码后大小不超过4M,支持mp3、m4a、wav格式 注意需要去掉编码头后再进行urlencode。
    top_num number - 返回分类数量,默认为6个

    请求代码示例

    提示一:使用示例代码前,请记得替换其中的示例Token、音频地址或Base64信息。

    提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。

    PHP代码示例

    <?php
    /**
     * 发起http post请求(REST API), 并获取REST请求的结果
     * @param string $url
     * @param string $param
     * @return - http response body if succeeds, else false.
     */
    function request_post($url = '', $param = '')
    {
        if (empty($url) || empty($param)) {
            return false;
        }
    
        $postUrl = $url;
        $curlPost = $param;
        // 初始化curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $postUrl);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        // 要求结果为字符串且输出到屏幕上
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        // post提交方式
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        // 运行curl
        $data = curl_exec($curl);
        curl_close($curl);
    
        return $data;
    }
    
    $token = '[调用鉴权接口获取的token]';
    $url = '【接口地址】?access_token=' . $token;
    $bodys = "{\"sound\":\"sfasq35sadvsvqwr5q...\"}"
    $res = request_post($url, $bodys);
    
    var_dump($res);

    Python3代码示例

    """
    EasyDL 声音分类 调用模型公有云API Python3实现
    """
    
    import json
    import base64
    import requests
    """
    使用 requests 库发送请求
    使用 pip(或者 pip3)检查我的 python3 环境是否安装了该库,执行命令
      pip freeze | grep requests
    若返回值为空,则安装该库
      pip install requests
    """
    
    
    # 目标音频的 本地文件路径,支持mp3/m4a/wav格式
    SOUND_FILEPATH = "【您的测试音频地址,例如./example.mp3】"
    
    # 可选的请求参数
    # top_num: 返回的分类数量,不声明的话默认为 6 个
    PARAMS = {"top_num": 3}
    
    # 服务详情 中的 接口地址
    MODEL_API_URL = "【您的API地址】"
    
    # 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
    # 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
    ACCESS_TOKEN = "【您的ACCESS_TOKEN】"
    API_KEY = "【您的API_KEY】"
    SECRET_KEY = "【您的SECRET_KEY】"
    
    
    print("1. 读取目标音频 '{}'".format(SOUND_FILEPATH))
    with open(SOUND_FILEPATH, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        base64_str = base64_data.decode('UTF8')
    print("将 BASE64 编码后音频的字符串填入 PARAMS 的 'sound' 字段")
    PARAMS["sound"] = base64_str
    
    
    if not ACCESS_TOKEN:
        print("2. ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")
        auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"\
                   "&client_id={}&client_secret={}".format(API_KEY, SECRET_KEY)
        auth_resp = requests.get(auth_url)
        auth_resp_json = auth_resp.json()
        ACCESS_TOKEN = auth_resp_json["access_token"]
        print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
    else:
        print("2. 使用已有 ACCESS_TOKEN")
    
    
    print("3. 向模型接口 'MODEL_API_URL' 发送请求")
    request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
    response = requests.post(url=request_url, json=PARAMS)
    response_json = response.json()
    response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
    print("结果:\n{}".format(response_str))

    JAVA代码示例

    package com.baidu.ai.aip;
    
    import com.baidu.ai.aip.utils.HttpUtil;
    import com.baidu.ai.aip.utils.GsonUtils;
    
    import java.util.*;
    
    /**
    * easydl声音分类
    */
    public class EasydlSoundClassify {
    
        /**
        * 重要提示代码中所需工具类
        * FileUtil,Base64Util,HttpUtil,GsonUtils请从
        * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
        * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
        * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
        * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
        * 下载
        */
        public static String easydlSoundClassify() {
            // 请求url
            String url = "【接口地址】";
            try {
                Map<String, Object> map = new HashMap<>();
                map.put("sound", "sfasq35sadvsvqwr5q...");
    
                String param = GsonUtils.toJson(map);
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
                String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, "application/json", param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args) {
            EasydlSoundClassify.easydlSoundClassify();
        }
    }

    C++代码示例

    #include <iostream>
    #include <curl/curl.h>
    
    // libcurl库下载链接:https://curl.haxx.se/download.html
    // jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
    const static std::string request_url = "【接口地址】";
    static std::string easydlSoundClassify_result;
    /**
     * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
     * @param 参数定义见libcurl文档
     * @return 返回值定义见libcurl文档
     */
    static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
        // 获取到的body存放在ptr中,先将其转换为string格式
        easydlSoundClassify_result = std::string((char *) ptr, size * nmemb);
        return size * nmemb;
    }
    /**
     * easydl声音分类
     * @return 调用成功返回0,发生错误返回其他错误码
     */
    int easydlSoundClassify(std::string &json_result, const std::string &access_token) {
        std::string url = request_url + "?access_token=" + access_token;
        CURL *curl = NULL;
        CURLcode result_code;
        int is_success;
        curl = curl_easy_init();
        if (curl) {
            curl_easy_setopt(curl, CURLOPT_URL, url.data());
            curl_easy_setopt(curl, CURLOPT_POST, 1);
            curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"sound\":\"sfasq35sadvsvqwr5q...\"}");
            result_code = curl_easy_perform(curl);
            if (result_code != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                        curl_easy_strerror(result_code));
                is_success = 1;
                return is_success;
            }
            json_result = easydlSoundClassify_result;
            curl_easy_cleanup(curl);
            is_success = 0;
        } else {
            fprintf(stderr, "curl_easy_init() failed.");
            is_success = 1;
        }
        return is_success;
    }

    返回说明

    返回参数

    字段 是否必选 类型 说明
    log_id number 唯一的log id,用于问题定位
    results array(object) 分类结果数组
    +name string 分类名称
    +score number 置信度

    错误码

    若请求错误,服务器将返回的JSON文本包含以下参数:

    • error_code:错误码。
    • error_msg:错误描述信息,帮助理解和解决发生的错误。

    例如Access Token失效返回:

    {
      "error_code": 110,
      "error_msg": "Access token invalid or no longer valid"
    }

    需要重新获取新的Access Token再次请求即可。

    错误码 错误信息 描述
    1 Unknown error 服务器内部错误,请再次请求, 如果持续出现此类错误,请在百度云控制台内提交工单反馈。
    2 Service temporarily unavailable 服务暂不可用,请再次请求, 如果持续出现此类错误,请在百度云控制台内提交工单反馈。
    3 Unsupported openapi method 调用的API不存在,请检查后重新尝试
    4 Open api request limit reached 集群超限额
    6 No permission to access data 无权限访问该用户数据
    13 Get service token failed 获取token失败
    14 IAM Certification failed IAM鉴权失败
    15 app not exists or create failed 应用不存在或者创建失败
    17 Open api daily request limit reached 每天请求量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请在百度云控制台内提交工单反馈
    18 Open api qps request limit reached QPS超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请在百度云控制台内提交工单反馈
    19 Open api total request limit reached 请求总量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请在百度云控制台内提交工单反馈
    100 Invalid parameter 无效的access_token参数,请检查后重新尝试
    110 Access token invalid or no longer valid access_token无效
    111 Access token expired access token过期
    336000 Internal error 服务器内部错误,请再次请求, 如果持续出现此类错误,请在百度云控制台内提交工单反馈
    336001 Invalid Argument 入参格式有误,比如缺少必要参数、图片base64编码错误等等,可检查下图片编码、代码格式是否有误。有疑问请在百度云控制台内提交工单反馈
    336002 JSON不合法 入参格式或调用方式有误,比如缺少必要参数或代码格式有误。有疑问请在百度云控制台内提交工单反馈
    336003 Base64解码失败 图片/音频/文本格式有误或base64编码有误,请根据接口文档检查格式,base64编码请求时注意要去掉头部。有疑问请在百度云控制台内提交工单反馈
    336004 输入文件大小不合法 音频大小超出限制,请根据接口文档检查入参格式,音频文件大小应控制在4M以内,有疑问请在百度云控制台内提交工单反馈
    336005 音频解码失败 音频解码失败失败,音频文件非所限定的mp3, m4a, wav格式
    336006 缺失必要参数 未上传音频文件,请补充必要参数后重新请求
    336100 model temporarily unavailable 遇到该错误码请等待1分钟后再次请求,可恢复正常,若反复重试依然报错或有疑问请在百度云控制台内提交工单反馈
    上一篇
    经典版声音分类模型发布整体说明
    下一篇
    经典版声音分类模型如何发布为API