集成說明:
在百度AI控制臺建立好自己的應(yīng)用之后跌前,下載SDK包聊替,解壓之后把core作為一個module直接導(dǎo)入每篷,參照以下流程即可正驻,需要權(quán)限申請陪腌,完整代碼參考demo或者百度的文檔
demo:
https://git.dev.tencent.com/zhoulei26/android-scarlet.git
百度原文檔
1 初始化
1.1 初始化EventManager對象
注意識別事件管理器只能維持一個梗逮,請勿同時使用多個實(shí)例
private val asr: EventManager by lazy{
// 基于sdk集成1.1 初始化EventManager對象
// 第一個參數(shù)是Activity或其它Context類
EventManagerFactory.create(activity, "asr")
}
1.2 自定義輸出事件類
需要實(shí)現(xiàn)EventListener的輸出事件回調(diào)接口骇钦。該類需要處理SDK在識別過程中的回調(diào)事件所禀。
class BaiduyuyinFragment : BaseFragment(), EventListener
1.3 注冊自己的輸出事件類
就是把1.1 和 1.2 兩個關(guān)聯(lián)起來
asr.registerListener(yourListener)
2.1 設(shè)置識別輸入?yún)?shù)
val params = LinkedHashMap<String, Any>()
params[SpeechConstant.ACCEPT_AUDIO_VOLUME] = false
val json = JSONObject(params).toString()
離線模式額外設(shè)置
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)
離線命令詞: 斷網(wǎng)時激活蛹屿,只能識別預(yù)定義的短語屁奏。聯(lián)網(wǎng)時,強(qiáng)制使用在線識別错负。固定短語的語法需要從控制臺“離線詞&本地語義”模塊預(yù)定義并下載為baidu_speech_grammar.bsg文件
2.2 發(fā)送start開始事件
asr.send(SpeechConstant.ASR_START , json, null, 0, 0)
3 收到回調(diào)事件
3.1開始回調(diào)事件
即在1.2環(huán)節(jié)EventListener接口中處理回調(diào)事件
完整參數(shù)說明參見文章開頭百度原文檔
我們重點(diǎn)關(guān)注name==“CALLBACK_EVENT_ASR_PARTIAL”時的params
將params轉(zhuǎn)換成對象
val param=GsonUtils.fromJson(params, AsrPartial::class.java)
param.best_result //best_result即為我們需要的最佳結(jié)果
data class AsrPartial(
val best_result: String,
val error: Int,
val origin_result: OriginResult,
val result_type: String,
val results_recognition: List<String>
)
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<String>
)
4控制識別
//發(fā)送停止錄音事件坟瓢,提前結(jié)束錄音等待識別結(jié)果
asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
//取消本次識別,取消后將立即停止不會返回識別結(jié)果
asr.send(SpeechConstant.ASR_CANCE, null, null, 0, 0);
離線語音識別注意點(diǎn):
官網(wǎng)申請應(yīng)用時的包名與build.gradle里一致犹撒,這步?jīng)]做會導(dǎo)致離線命令詞或者喚醒報“no licence” 錯誤.
離線引擎識別失敗 折联。離線識別引擎只能識別grammar文件中約定好的固定的話術(shù),即使支持的話術(shù)识颊,識別率也不如在線诚镰。請確保說的話清晰,是grammar中文件定義的祥款,測試成功一次后清笨,可以保存錄音,便于測試刃跛。
實(shí)測識別率非常低!
離線識別文件在官網(wǎng)--控制臺--語音技術(shù)--離線詞&語義設(shè)置中,設(shè)置下載,之后替換掉assets中的同名文件即可.