838
阿裏雲
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以及channel
body.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 應用的key
private 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-8
byte[] 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-SHA1
String signature = HMACSha1(stringToSign, ak_secret);
// 3.得到 authorization header
String 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-SHA1
String signature = HMACSha1(stringToSign, ak_secret);
// 3.得到 authorization header
String 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-阿裏雲