[Android]百度语音识别集成过程记录

集成说明:

在百度AI控制台建立好自己的应用之后,下载SDK包,解压之后把core作为一个module直接导入,参照以下流程即可,需要权限申请,完整代码参考demo或者百度的文档

demo:

https://git.dev.tencent.com/zhoulei26/android-scarlet.git
百度原文档

1 初始化

1.1 初始化EventManager对象

注意识别事件管理器只能维持一个,请勿同时使用多个实例

    private val asr: EventManager by lazy{
        // 基于sdk集成1.1 初始化EventManager对象
        // 第一个参数是Activity或其它Context类
      EventManagerFactory.create(activity, "asr")
    }

1.2 自定义输出事件类

需要实现EventListener的输出事件回调接口。该类需要处理SDK在识别过程中的回调事件。

class BaiduyuyinFragment : BaseFragment(), EventListener

1.3 注册自己的输出事件类

就是把1.1 和 1.2 两个关联起来

asr.registerListener(yourListener)

2.1 设置识别输入参数

val params = LinkedHashMap()
params[SpeechConstant.ACCEPT_AUDIO_VOLUME] = false
val json = JSONObject(params).toString()

离线模式额外设置

params[SpeechConstant.DECODER] = 2
params[SpeechConstant.ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH] ="assets://baidu_speech_grammar.bsg"
asr.send(SpeechConstant.ASR_KWS_LOAD_ENGINE, JSONObject(params).toString(), null, 0, 0)

离线命令词: 断网时激活,只能识别预定义的短语。联网时,强制使用在线识别。固定短语的语法需要从控制台“离线词&本地语义”模块预定义并下载为baidu_speech_grammar.bsg文件

2.2 发送start开始事件

asr.send(SpeechConstant.ASR_START , json, null, 0, 0)

3 收到回调事件

3.1开始回调事件

即在1.2环节EventListener接口中处理回调事件
完整参数说明参见文章开头百度原文档
我们重点关注name==“CALLBACK_EVENT_ASR_PARTIAL”时的params
将params转换成对象

val param=GsonUtils.fromJson(params, AsrPartial::class.java)

param.best_result //best_result即为我们需要的最佳结果

data class AsrPartial(
    val best_result: String,
    val error: Int,
    val origin_result: OriginResult,
    val result_type: String,
    val results_recognition: List
)


data class OriginResult(
    val corpus_no: Long,
    val err_no: Int,
    val result: Result,
    val sn: String,
    val voice_energy: Double
)

data class Result(
    val word: List
)

4控制识别

//发送停止录音事件,提前结束录音等待识别结果
asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); 
//取消本次识别,取消后将立即停止不会返回识别结果
asr.send(SpeechConstant.ASR_CANCE, null, null, 0, 0);

离线语音识别注意点:

  1. 官网申请应用时的包名与build.gradle里一致,这步没做会导致离线命令词或者唤醒报“no licence” 错误.

  2. 离线引擎识别失败 。离线识别引擎只能识别grammar文件中约定好的固定的话术,即使支持的话术,识别率也不如在线。请确保说的话清晰,是grammar中文件定义的,测试成功一次后,可以保存录音,便于测试。实测识别率非常低!

  3. 离线识别文件在官网--控制台--语音技术--离线词&语义设置中,设置下载,之后替换掉assets中的同名文件即可.

你可能感兴趣的:([Android]百度语音识别集成过程记录)