API Path
/aipaas/voice/v1/asr/short
请求协议
HTTP
请求方法
POST
请求头部 :
| 头部标签 | 必填 | 说明 | 类型 | 数据字典 | 限制 | 头部内容 | 示例 |
|---|---|---|---|---|---|---|---|
| Content-Type | 是 | application/json | [string] | application/json | application/json | ||
| X-APP-ID | 是 | 控制台-应用管理-创建应用-AppID | [string] | ||||
| Device-Uuid | 否 | 设备管理-设备uuid | [string] | ||||
| Authorization | 是 | 鉴权信息 | [string] |
请求参数 Json:
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| timestamp | 当前时间的整形时间戳,精确到秒,10 分钟内有效 | 是 | [int] | |||
| audio_data | 语音数据,经过 Base64 编码,要求 Base64 编码后大小不超过 4M,音频时长不超过 1 分钟。 | 是 | [string] | |||
| req_id | 请求ID,记录该值便于排查问题 | 是 | [string] | |||
| sample_rate | 音频采样率,默认值 16000 Hz | 否 | [int] | |||
| enable_punc | 是否开启加标点,默认值是 true | 否 | [boolean] | |||
| enable_itn | 是否开启 ITN,默认值是 true | 否 | [boolean] |
REST参数 :
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| code | 是 | [string] |
响应内容 :
返回结果
> 成功 (200)
> Json
> Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| status | 状态码 | 是 | [int] | |||
| status_msg | 状态说明 | 是 | [string] | |||
| result | 识别结果 | 是 | [object] | |||
| result>>sentences | 识别的句子结果数据 | 是 | [array] | |||
| result>>sentences>>begin_time | 该句的起始时间偏移,单位为毫秒 | 是 | [int] | |||
| result>>sentences>>end_time | 该句的结束时间偏移,单位为毫秒 | 是 | [int] | |||
| result>>sentences>>texts | 该句的识别文本结果 | 是 | [string] |
成功示例[Mock API] :
{
"status": 10000,
"status_msg": "SUCCESS",
"result": {
"sentences": [{
"begin_time": 0,
"end_time": 2400,
"texts": "北京的天气。"
}]
}
}
短语音识别模型主要用于将较短的音频片段(如几秒钟到几十秒的语音)转换为文本。这种技术在许多应用场景中非常有用,例如语音助手、智能客服、语音输入、语音命令识别等,支持单通道 pcm_s16le编码的音频识别。
服务接口调用时需要严格遵循服务鉴权规则,服务调用鉴权规则请参见:开发指南 - 签名认证方式。
通用状态码请参见【状态码】中的【网关认证】,其余状态码如下:
| 返回码 | 解释 | 说明 | 解决方法 |
|---|---|---|---|
| 10301 | Required parameter miss | 必填参数缺失 | 检查请求体是否符合接口协议 |
| 10302 | Too many requests | 并发请求过多 | 联系商务,增加并发 |
| 10304 | Parse request body fail | 请求格式错误 | 查看请求的 URL body 格式是否正确,参考接口文档 |
| 10503 | Server connection time out | 服务连接超时 | 联系技术人员 |
| 10903 | Recognize failed | 识别失败 | 联系技术人员 |
| 10000 | Success | 成功 | 执行下一步操作 |
{
"timestamp": 1673493479,
"audio_data": "YAAIAA0ADQAtAFAAcABDAJcAvQB2AC0AQwA9AAQAGABLAGMANwABANH/tP+h/5X/qv+m/4f/vP/V/9P/xP/0/8f/oP/M/8v/x//v//P/GQAiAEYANwA3APn/AQAlADwA/f/4/+//5v/V/8D/5/8gACwAIwAXAMX/vv/T/+H/sP+w/5v/wv8LAEEARgA+ABcA+P/M/wgA2f/9/+z/3v8iABIAFQDz/+7/JABVACAA8",
"req_id": "3a87fe9793c9-4ebd-95d4-4ce2-a80c054b"
}
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import java.util.HashMap;
import java.util.Map;
/**
* 短语音同步识别
*/
public class Example {
public static void main(String[] args) {
example();
}
/**
* 方法中使用到的 JSONUtil、HttpRequest、HttpResponse均来自Hutool工具类。
* 具体maven依赖为:
*
* cn.hutool
* hutool-all
* 5.8.29
*
*/
public static void example() {
String url = "服务调用地址";
// 设置请求头
Map headers = new HashMap();
//调用鉴权
headers.put("Content-Type", "application/json");
headers.put("X-APP-ID", "yourAppId");
headers.put("Authorization", "yourAuthorization");
// 创建请求对象
JSONObject request = new JSONObject();
request.set("timestamp", System.currentTimeMillis());
request.set("audio_data", "yourbase64audiodata");
request.set("req_id", "yourRequestId");
// 将请求对象转换为JSON字符串
String requestBody = JSONUtil.toJsonStr(request);
// 打印完整的请求信息
System.out.println("=== HTTP 请求信息 ===");
System.out.println("请求URL: " + url);
System.out.println("请求方法: POST");
System.out.println("请求头:");
for(Object key:headers.keySet()){
System.out.println(" " + key + ": " + headers.get(key));
}
System.out.println(" 请求体 (JSON):");
System.out.println(JSONUtil.toJsonPrettyStr(request));
System.out.println("=================== ");
System.out.println("正在发送请求...");
HttpResponse response =
HttpRequest.post(url)
.headerMap(headers, false)
.body(requestBody)
.execute();
// 打印返回结果
System.out.println("=== 响应信息 ===");
System.out.println("HTTP状态码: " + response.getStatus());
System.out.println("响应体:");
System.out.println(response.body());
System.out.println("===================");
}
}
import json
import hashlib
import hmac
import time
import re
import urllib.parse
import requests
import warnings
from datetime import datetime
import logging
# 配置日志,设置日志级别为INFO,并指定日志格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置环境变量
X_APP_ID = "yourAppId"
AUTHORIZATION = "yourAuthorization"
# URL 和请求数据
url = "算法调用地址" # 请求的URL
request_data = {
"timestamp": int(time.time()),
"audio_data": "YAAIAA0ADQAtAFAAcABDAJcAvQB2AC0AQwA9AAQAGABLAGMANwABANH/tP+h/5X/qv+m/4f/vP/V/9P/xP/0/8f/oP/M/8v/x//v//P/GQAiAEYANwA3APn/AQAlADwA/f/4/+//5v/V/8D/5/8gACwAIwAXAMX/vv/T/+H/sP+w/5v/wv8LAEEARgA+ABcA+P/M/wgA2f/9/+z/3v8iABIAFQDz/+7/JABVACAA8",
"req_id": "3a87fe9793c9-4ebd-95d4-4ce2-a80c054b"
}
# 构建请求头
headers = {
"Content-Type": "application/json",
"X-APP-ID": X_APP_ID,
"Authorization": AUTHORIZATION
}
def timeSimple(timestamp):
# 将时间戳转换为HH:MM:SS格式的时间字符串
dt_object = datetime.fromtimestamp(timestamp)
formatted_time = dt_object.strftime("%H:%M:%S")
return formatted_time
def send_request(url):
try:
start_time = time.time()
logging.info(f"请求路径: {url}")
logging.info(f"开始发送: {timeSimple(start_time)}")
with requests.post(
url, json=request_data, headers=headers, stream=True, verify=False
) as response:
first_packet_time = None
if response.status_code == 200:
logging.info(f"接受到返回: {timeSimple(time.time())}")
for chunk in response.iter_content(chunk_size=1024):
if chunk:
if first_packet_time is None:
first_packet_time = time.time()
logging.info(
f"Received chunk: {timeSimple(time.time())} {chunk.decode('utf-8')}"
)
end_time = time.time()
logging.info(f"Time to first byte (TTFB): {first_packet_time - start_time:.3f} seconds")
logging.info(f"Request completed in {end_time - start_time:.3f} seconds")
else:
logging.error(f"Request failed with status code {response.status_code}")
except Exception as e:
logging.error(f"An error occurred: {e}")
# 发送请求
send_request(url)
logging.info(f"headers = {headers}")