科大讯飞语音识别Demo
准备工作
测试Demo
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.apache.commons.codec</artifactId>
<version>1.8</version>
</dependency>
import org.apache.commons.codec.digest.DigestUtils;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: jethro
* @CreateTime: 2018-11-23
* @Description: 科大讯飞测试类
*/
public class KDXFTest {
/**
*科大讯飞语音参数开始
*/
private static final String URL = "http://openapi.xfyun.cn/v2/aiui";
private static final String APPID = "";
private static final String API_KEY = "";
private static final String DATA_TYPE = "audio";
private static final String SCENE = "main";
private static final String SAMPLE_RATE = "16000"; //采样率!!
private static final String AUTH_ID = "2ff181c8bc23f373ca155d332ece22e9";
private static final String AUE = "raw";
private static String FILE_PATH = "C:/a/22.wav";
// 个性化参数,需转义
private static final String PERS_PARAM = "{\\\"auth_id\\\":\\\"2894c985bf8b1111c6728db79d3479ae\\\"}";
/**
*科大讯飞语音参数结束
*/
public static void main(String[] args) throws IOException, ParseException {
Map<String, String> header = buildHeader();
byte[] dataByteArray = readFile(FILE_PATH );
String result = httpPost(URL, header, dataByteArray);
System.out.println(result);
}
/**
* 科大讯飞方法开始
*/
private static Map<String, String> buildHeader() throws UnsupportedEncodingException, ParseException {
String curTime = System.currentTimeMillis() / 1000L + "";
String param = "{\"aue\":\""+AUE+"\",\"sample_rate\":\""+SAMPLE_RATE+"\",\"auth_id\":\""+AUTH_ID+"\",\"data_type\":\""+DATA_TYPE+"\",\"scene\":\""+SCENE+"\"}";
//使用个性化参数时参数格式如下:
//String param = "{\"aue\":\""+AUE+"\",\"sample_rate\":\""+SAMPLE_RATE+"\",\"auth_id\":\""+AUTH_ID+"\",\"data_type\":\""+DATA_TYPE+"\",\"scene\":\""+SCENE+"\",\"pers_param\":\""+PERS_PARAM+"\"}";
String paramBase64 = new String(org.apache.commons.codec.binary.Base64.encodeBase64(param.getBytes("UTF-8")));
String checkSum = DigestUtils.md5Hex(API_KEY + curTime + paramBase64);
Map<String, String> header = new HashMap<String, String>();
header.put("X-Param", paramBase64);
header.put("X-CurTime", curTime);
header.put("X-CheckSum", checkSum);
header.put("X-Appid", APPID);
return header;
}
private static byte[] readFile(String filePath) throws IOException {
InputStream in = new FileInputStream(filePath);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 4];
int n = 0;
while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n);
}
byte[] data = out.toByteArray();
in.close();
return data;
}
private static String httpPost(String url, Map<String, String> header, byte[] body) {
String result = "";
BufferedReader in = null;
OutputStream out = null;
try {
java.net.URL realUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection();
for (String key : header.keySet()) {
connection.setRequestProperty(key, header.get(key));
}
connection.setDoOutput(true);
connection.setDoInput(true);
//connection.setConnectTimeout(20000);
//connection.setReadTimeout(20000);
try {
out = connection.getOutputStream();
out.write(body);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
try {
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 科大讯飞方法结束
*/
}
注意事项
- 音频的采样率仅支持8000和16000
- 音频格式仅支持pcm/wav/speex/spx文件,且不超过2M