API使用__录音文件识别_语音识别(ASR)_智能语音交互-阿里云
“录音文件识别”API包括两部分:POST方式的“请求调用接口”,GET方式的“结果查询接口”。
请求调用接口
提交识别请求以获取id。
URL说明
| 协议 | URL | 方法 | 参数 |
|---|---|---|---|
| HTTPS | nlsapi.aliyun.com/transcriptions | POST | JSON字符串 |
输入参数
“请求调用接口”的关键请求参数,以json格式放置于Https Body内,并作为数加验证的body参数进行加密。
{"app_key": "***","oss_link": "***","valid_times": [{"begin_time": 200,"end_time":2000,"channel_id": 0}]}
- 请求参数JSON字符串:
| 属性 | 值类型 | 是否必须 | 说明 |
|---|---|---|---|
| app_key | String | 是 | 业务方或者业务场景的标记 |
| oss_link | String | 是 | 语音文件存放的OSS link地址 |
| valid_times | List< ValidTime > | 否 | 有效时间段信息,用来排查一些不必要的时间段 |
- 有效时间段ValidTime描述:
| 属性 | 值类型 | 是否必须 | 说明 |
|---|---|---|---|
| begin_time | Int | 是 | 有效时间段的起始点时间偏移(单位: ms) |
| end_time | Int | 是 | 有效时间段的结束点时间偏移(单位: ms) |
| channel_id | Int | 是 | 有效时间段的作用音轨序号(从0开始) |
- 数加验证字符串:
数加验证字符串以json格式放置于Https headers内。数加验证过程见“官方服务API校验规范”。使用过程见完整示例。
{"Content-Type": "application/json","Accept": "application/json","date": gmtTime,"Authorization": authorization}
输出参数
{"id": "***"}
参数说明:
- 返回HTTP状态: 201 Created
- 返回参数JSON字符串:
| 属性 | 值类型 | 是否必须 | 说明 |
|---|---|---|---|
| id | String | 是 | 识别任务ID |
结果查询接口
在提交完识别请求后,调用方将可以按照如下接口轮询结果。
URL说明
| 协议 | URL | 方法 | 参数 |
|---|---|---|---|
| HTTPS | nlsapi.aliyun.com/transcriptions/< id > | GET | 无 |
输入参数
用户通过id调用“结果查询”接口可获取识别结果,在接口调用过程时,需要设置一定的查询时间间隔,可参考完整示例。
- 请求参数:
id为识别任务ID。
- 数加验证字符串:
数加验证字符串以json格式放置于Https headers内。数加验证过程见“官方服务API校验规范”。使用过程见完整示例。
{"Content-Type": "application/json","Accept": "application/json","date": gmtTime,"Authorization": authorization}
输出参数
正常返回
{"id": "***","status": "SUCCEED","result": [{"channel_id": 0,"begin_time": 700,"end_time": 3120,"text": "你好,很高兴为您服务"}......]}
正在识别
{"id":"2e2bf1fbe4d34dab8b9e36488d0fa1e2","status":"RUNNING"}
异常返回
{"error_message": "UNSUPPORTED_SAMPLE_RATE","id": "***","status": "FAILED","status_code": 400}
参数说明:
- 返回HTTP状态: 200 OK
- 返回参数JSON字符串:
| 属性 | 值类型 | 是否必须 | 说明 |
|---|---|---|---|
| id | String | 是 | 识别任务ID |
| status | String | 是 | 该识别任务的当前状态, 三种取值:RUNNING, SUCCEED, FAILED |
| status_code | Int | 否 | 错误码。当status为FAILED时存在。 |
| error_message | String | 否 | 对错误状态的进一步描述。当status为FAILED时存在 |
| result | List< SentenceResult> | 否 | 识别的结果数据。当status为SUCCEED时存在 |
- 错误码status_code描述:
| 状态码 | 说明 |
|---|---|
| 200 | 成功 |
| 400 | 无效的请求 |
| 401 | 需要鉴权信息 |
| 403 | 鉴权失败 |
| 404 | 不存在 |
| 408 | 请求超时 |
| 422 | 请求内容有误 |
| 429 | 超出最大并发 |
| 500 | 服务器内部出错 |
| 503 | 服务不可用 |
- 单句结果SentenceResult描述:
| 属性 | 值类型 | 是否必须 | 说明 |
|---|---|---|---|
| channel_id | Int | 是 | 该句所属音轨ID |
| begin_time | Int | 是 | 该句的起始时间偏移(单位: ms) |
| end_time | Int | 是 | 该句的结束时间偏移(单位: ms) |
| text | String | 是 | 该句的识别文本结果 |
完整示例
Java Demo 下载地址
- 语音文件识别服务demo入口
package com.alibaba.idst.nls;import com.alibaba.fastjson.JSON;import com.alibaba.idst.nls.utils.*;public class TranscriptionDemo {/*** 服务url* */private static String url = "https://nlsapi.aliyun.com/transcriptions";private static RequestBody body = new RequestBody();private static HttpUtil request = new HttpUtil();public static void main(String[] args) throws InterruptedException {//设置请求参数body.setApp_key("xxx");body.setOss_link("https://aliyun-nls.oss.aliyuncs.com/asr/fileASR/examples/nls-sample.wav");body.addValid_time(100,2000,0); //validtime 可选字段 设置的是语音文件中希望识别的内容,begintime,endtime以及channelbody.addValid_time(100,2000,1);String ak_id = "xxx";String ak_secret = "xxx";System.out.println("Recognize begin!");/** 发送录音转写请求* **/String bodyString;bodyString = JSON.toJSONString(body);String postResult = request.sendPost(url,bodyString,ak_id,ak_secret);System.out.println("response is:"+postResult);/** 通过TaskId获取识别结果* **/String TaskId = JSON.parseObject(postResult).getString("id");String status = "RUNNING";String getResult = "";while (!status.equals("RUNNING")){Thread.sleep(3000);getResult = request.sendGet(url,TaskId,ak_id,ak_secret);status = JSON.parseObject(getResult).getString("status");System.out.println("response is:"+getResult);}System.out.println("Recognize over!");}}
- RequestBody类,语音识别服务请求中数加鉴权所需的body参数,也是HTTPS请求的data部分。
package com.alibaba.idst.nls.utils;import java.util.*;public class RequestBody {private String app_key = null; //appkey 应用的keyprivate String oss_link = null; //语音文件存储地址private List<validTime> valid_times =null; //有效时间段ValidTime描述,可选字段public class validTime{private int begin_time;private int end_time;private int channel_id;public int getBegin_time() {return begin_time;}public void setBegin_time(int begin_time) {this.begin_time = begin_time;}public int getEnd_time() {return end_time;}public void setEnd_time(int end_time) {this.end_time = end_time;}public int getChannel_id() {return channel_id;}public void setChannel_id(int channel_id) {this.channel_id = channel_id;}}public void setApp_key(String appKey){app_key = appKey;}public void setOss_link(String fileLine){oss_link = fileLine;}public void addValid_time(int beginTime,int endTime,int channelId){if(valid_times == null){valid_times = new ArrayList<validTime>();}validTime valid_time = new validTime();valid_time.setBegin_time(beginTime);valid_time.setEnd_time(endTime);valid_time.setChannel_id(channelId);valid_times.add(valid_time);}public List<validTime> getValid_times() {return valid_times;}public String getOss_link() {return oss_link;}public String getApp_key() {return app_key;}}
- HttpUtil类,实现数加鉴权过程,并将其作为HTTPS请求的header部分。实现POST方式的请求识别方法和GET方式的结果查询方法。
package com.alibaba.idst.nls.utils;import java.io.*;import java.net.URL;import java.net.URLConnection;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Encoder;import javax.crypto.Mac;@SuppressWarnings("restriction")public class HttpUtil {/** 计算MD5+BASE64*/public static String MD5Base64(String s) throws UnsupportedEncodingException {if (s == null)return null;String encodeStr = "";//string 编码必须为utf-8byte[] utfBytes = s.getBytes("UTF-8");MessageDigest mdTemp;try {mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(utfBytes);byte[] md5Bytes = mdTemp.digest();BASE64Encoder b64Encoder = new BASE64Encoder();encodeStr = b64Encoder.encode(md5Bytes);} catch (Exception e) {throw new Error("Failed to generate MD5 : " + e.getMessage());}return encodeStr;}/** 计算 HMAC-SHA1*/public static String HMACSha1(String data, String key) {String result;try {SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");Mac mac = Mac.getInstance("HmacSHA1");mac.init(signingKey);byte[] rawHmac = mac.doFinal(data.getBytes());result = (new BASE64Encoder()).encode(rawHmac);} catch (Exception e) {throw new Error("Failed to generate HMAC : " + e.getMessage());}return result;}/** 等同于javaScript中的 new Date().toUTCString();*/public static String toGMTString(Date date) {SimpleDateFormat df = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z", Locale.UK);df.setTimeZone(new java.util.SimpleTimeZone(0, "GMT"));return df.format(date);}/** 发送POST请求*/public static String sendPost(String url, String body, String ak_id, String ak_secret) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);/** http header 参数*/String method = "POST";String accept = "application/json";String content_type = "application/json";String path = realUrl.getFile();String date = toGMTString(new Date());// 1.对body做MD5+BASE64加密String bodyMd5 = MD5Base64(body);String stringToSign = method + "n" + accept + "n" + bodyMd5 + "n" + content_type + "n" + date ;// 2.计算 HMAC-SHA1String signature = HMACSha1(stringToSign, ak_secret);// 3.得到 authorization headerString authHeader = "Dataplus " + ak_id + ":" + signature;// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", accept);conn.setRequestProperty("content-type", content_type);conn.setRequestProperty("date", date);conn.setRequestProperty("Authorization", authHeader);// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(body);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}/** GET请求*/public static String sendGet(String url, String task_id,String ak_id, String ak_secret) {String result = "";BufferedReader in = null;try {URL realUrl = new URL(url+"/"+task_id);/** http header 参数*/String method = "GET";String accept = "application/json";String content_type = "application/json";String path = realUrl.getFile();String date = toGMTString(new Date());// 1.对body做MD5+BASE64加密//String bodyMd5 = MD5Base64("");String stringToSign = method + "n" + accept + "n" + "" + "n" + content_type + "n" + date;// 2.计算 HMAC-SHA1String signature = HMACSha1(stringToSign, ak_secret);// 3.得到 authorization headerString authHeader = "Dataplus " + ak_id + ":" + signature;// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", accept);connection.setRequestProperty("content-type", content_type);connection.setRequestProperty("date", date);connection.setRequestProperty("Authorization", authHeader);// 建立实际的连接connection.connect();// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e) {e.printStackTrace();}}return result;}}
最后更新:2016-11-23 17:16:08
上一篇:
OPUS格式语音编解码__一句话识别_语音识别(ASR)_智能语音交互-阿里云
下一篇:
批量合成工具__语音合成(TTS)_智能语音交互-阿里云
服务产品流程模板__商品接入_服务商_云市场-阿里云
使用集群__命令行工具_批量计算-阿里云
创建数据迁移任务__快速入门_数据传输-阿里云
商品相关性分析__最佳实践_云数据库 Redis 版-阿里云
PullLogs__日志库相关接口_API-Reference_日志服务-阿里云
DescribeRegions__LoadBalancer相关API_API 参考_负载均衡-阿里云
DescribeHealthStatus__BackendServer相关API_API 参考_负载均衡-阿里云
主机管理控制台操作手册__管理控制台_使用指南_云虚机主机-阿里云
SplitShard__日志库相关接口_API-Reference_日志服务-阿里云
如何上传网站程序__网站上传/下载_使用指南_云虚机主机-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云