一.首先去官网https://ai.baidu.com/sdk#asr下载SDK
下载下来的是一个android工程
其中有三个module
当然其中也有百度自己的文档,在doc_integration_....文件夹中,也是很直接明了的,本人就是通过这三个文档进行集成以及功能实现的
具体的集成过程小编这边就不多仔细讲解了,可以直接去看这三个文档,我这边就稍微说一下这三个文件的主要是讲的基本内容吧
1._helloworld 文档主要是讲怎样集成语音识别的sdk,实现一个精简版的语音识别,按照它所给的步骤可以完成基本的sdk集成,以及简单的在线识别的功能,可以判断你的sdk是否集成成功
2._TTS文档主要是告诉你怎样集成sdk以及在自己的工程如何实现语音识别
3._demonstration文档主要是针对你所下载下来的工程Demo的功能介绍介绍
二.用你自己的百度账号去登陆控制台https://console.bce.baidu.com/?fromai=1#/aip/overview注册你应用的
AppID,API Key ,Secret Key,这三个参数是你集成sdk是要用到的
这个操作很简单在控制台中选中语音识别一栏
选中应用列表>>创建应用
>>填写基本应用信息
三.实现在线识别以及精确地识别自己的所需要词库
其实在线识别功能在_TTS文档中已经详细讲过了,我这边直接把实现代码拿出来
1.进行EventManager初始化
// 基于sdk集成1.1 初始化EventManager对象
asr = EventManagerFactory.create(this, "asr");
// 基于sdk集成1.3 注册自己的输出事件类
asr.registerListener(this); // EventListener 中 onEvent方法
2.开始识别的方法
private void start() {
Map<String, Object> params = new LinkedHashMap<String, Object>();
String event = null;
event = SpeechConstant.ASR_START; // 替换成测试的event
if (enableOffline) {
params.put(SpeechConstant.DECODER, 2);
}
// 基于SDK集成2.1 设置识别参数
params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
// 请先使用如‘在线识别’界面测试和生成识别参数。 params同ActivityRecog类中myRecognizer.start(params);
// 复制此段可以自动检测错误
(new AutoCheck(getApplicationContext(), new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 100) {
AutoCheck autoCheck = (AutoCheck) msg.obj;
synchronized (autoCheck) {
String message = autoCheck.obtainErrorMessage(); // autoCheck.obtainAllMessage();
Log.e("message", message);
// txtLog.append(message + "\n");
; // 可以用下面一行替代,在logcat中查看代码
// Log.w("AutoCheckMessage", message);
}
}
}
}, enableOffline)).checkAsr(params);
String json = null; // 可以替换成自己的json
json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
asr.send(event, json, null, 0, 0);
Log.e("message", json);
}
3.停止识别的方法
private void stop() {
Log.e("message", "停止识别:ASR_STOP");
asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); //
}
4.实现对语音识别的监听
implements EventListener
@Override
public void onEvent(String name, String params, byte[] data, int offset, int length) {
String logTxt = "name: " + name;
if (!isEnd && name.equals("asr.end")) {
isEnd = true;
}
if (isEnd && name.equals("asr.partial")) {
isEnd = false;
logTxt += " ;params :" + params;
try {
JSONObject jsonObject = new JSONObject(params);
String results_recognition = jsonObject.getString("results_recognition");
Toast.makeText(this, results_recognition, Toast.LENGTH_LONG).show();
Log.e("result", results_recognition);
} catch (JSONException e) {
e.printStackTrace();
}
}
if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_EXIT)) {
if (isClose==false)
start();
}
if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
if (params != null && params.contains("\"nlu_result\"")) {
if (length > 0 && data.length > 0) {
logTxt += ", 语义解析结果:" + new String(data, offset, length);
}
}
} else if (data != null) {
logTxt += " ;data length=" + data.length;
}
// printLog(logTxt);
Log.e("message1", logTxt);
}
5.注销
@Override
protected void onDestroy() {
super.onDestroy();
// 基于SDK集成5.2 退出事件管理器
// 必须与registerListener成对出现,否则可能造成内存泄露
asr.unregisterListener(this);
}
这样基本在线识别的功能是完成了,但是会发现很多的语句的识别度不是很高,这边的话,百度官方提供了语音识别词库,你可以在你的应用管理中心的应用详情里面设置你的语音识别词库
下面是示例,这样的话,就通过语音会优先识别你所想要的语句了
源码链接
下一篇会写一个关于离线识别的代码