语音识别(一句话识别)
要求
技术处理
-
音频转码处理
-
音频要求
- 支持音频编码格式:pcm(无压缩的pcm文件或wav文件)、opus,16bit采样位数的单声道(mono);
- 支持音频采样率:8000Hz、16000Hz;
- 支持对返回结果进行设置:是否返回中间识别结果,是否在后处理中添加标点,是否将中文数字转为阿拉伯数字输出。
-
转码方案
首先想到的是神器 ffmpeg ,然而这哥们异常的不好用,操作不方便,在服务器上安装的时候贼麻烦。后来重新明确了需求,我们主要是需要对音频进行转换格式即转换音频格式到
wav
格式、转换音频的采样率和转换音频的声道。故我们使用了比较合适的轻量级工具 SOX (Sound eXchange),贼好用,教程在下方
-
转换代码:
String cmd1 = "lame "+ file + " " + name+".wav --decode";
Process exec1 = Runtime.getRuntime().exec(cmd1);
exec1.waitFor();
String cmd2 = "sox " + name +".wav -r 16000 -c 1 "+name+"_tras.wav";
Process exec2 = Runtime.getRuntime().exec(cmd2);
exec2.waitFor();
-
阿里云接口处理
-
这里阿里云接口的API的交互流程图
-
. API接口代码
-
/**
* SpeechRecognizerDemo class
*
* 一句话识别Demo
*/
public class SpeechRecognizerDemo {
private String appKey;
private String accessToken;
NlsClient client;
/**
* @param appKey
* @param token
*/
public SpeechRecognizerDemo(String appKey, String token) {
this.appKey = appKey;
this.accessToken = token;
// Step0 创建NlsClient实例,应用全局创建一个即可,默认服务地址为阿里云线上服务地址
client = new NlsClient(accessToken);
}
private static SpeechRecognizerListener getRecognizerListener() {
SpeechRecognizerListener listener = new SpeechRecognizerListener() {
// 识别出中间结果.服务端识别出一个字或词时会返回此消息.仅当setEnableIntermediateResult(true)时,才会有此类消息返回
@Override
public