簡介
AI時代,智者當先,判斷一個終端設備是否智能,語音能力是必不可缺的。智能家居、智慧廚房、智能汽車等等,一切衣食住行都在往智能方向發展,那我們該如何在OpenAtom OpenHarmony(簡稱“OpenHarmony”)系統現有的能力下,搭建一套完整的語音子系統呢?
本文介紹了博泰車聯網的研發同學如何搭建一套屬于OpenHarmony的語音子系統CarVoiceAssistant,并以車載交互的形態研發語音助理項目的過程。
效果展示
開發環境
硬件平臺:DAYU200
系統版本:OpenHarmony 3.1 Release
開發語言:C++,JS,eTS
IDE:VS Code、DevEco Studio
功能介紹
交互流程介紹
本樣例包含兩個關鍵能力庫:QGWebRTCVAD,用作有效音頻檢測和截取;QGPocketSphinx,用作喚醒詞訓練和識別,主要流程如下:
設備喚醒之后,需要持續采集用戶音頻數據,并傳輸給博泰QingAI云端,做持續識別和最終語義識別,識別之后客戶端根據語義做具體動作執行 。
兩步帶你實現語義助理集成
1.語音子系統集成
(1)下載語音助理項目代碼
(2)解壓【data.zip】文件(…/…/dev/team_x/PATEO_CarVoiceAssistant/data.zip)
(3)使用hdc工具將data中的文件發送到OpenHarmony系統中
#1. 將動態庫和資源文件發送到OpenHarmony系統中# 如果提示Read only system;進入OH系統后執行:"mount -o rw,remount /"命令后再發送文件hdc_std.exe file send voice_assistant_service.xml /system/profile/hdc_std.exe file send libcarvoiceassistant.z.so /system/lib/module/libcarvoiceassistant.z.sohdc_std.exe file send libvoiceassistant_service.z.so /system/lib/libvoiceassistant_service.z.sohdc_std.exe file send libpocketsphinx.z.so /system/lib/module/libpocketsphinx.z.sohdc_std.exe file send libps_vad.z.so /system/lib/module/libps_vad.z.sohdc_std.exe file send libvoicecloud.z.so /system/lib/libvoicecloud.z.sohdc_std.exe file send voice_assistant_service.cfg /system/etc/init/#在系統/system/etc/下,創建目錄pocketsphinx; 創建目錄命令: mkdir /system/etc/pocketsphinxhdc_std.exe file send voice_tip.mp3 /system/etc/pocketsphinx/hdc_std.exe file send zh.tar /system/etc/pocketsphinx/#在OpenHarmony系統中解壓zh.tartar xvf zh.tar#確保/system/etc/pocketsphinx/下文件目錄結構如下:├── zh│ ├── zh│ │ ├── feat.params│ │ ├── feature_transform│ │ ├── mdef│ │ ├── means│ │ ├── mixture_weights│ │ ├── noisedict│ │ ├── transition_matrices│ │ └── variances│ ├── zh_cn.dic│ └── zh_cn.lm.bin├── voice_tip.mp3#重啟系統
2.語音助理App集成
(1)引入語音助理聲明文件
import carvoiceassistant from '@ohos.carvoiceassistant'
// 獲取語音助理管理類
let voiceManager = carvoiceassistant.getManager();
(2)開啟喚醒
voiceManager.enableWakeUp()
(3)注冊熱詞
voiceManager.registerHotwords(JSON.stringify(hotwords))
(4)經緯度設置,用于云語音定位地理位置;例如“今天天氣怎么樣?”語義可以返回設置的經緯度地區的天氣信息
voiceManager.setCoord(23.025978, 113.754969)
(5)監聽回調,可以監聽識別狀態、語義解析回調、TTS播報狀態
voiceManager.on(carvoiceassistant.EventType.VoiceAssistantEventTypeRecognizeStateChanged, (err, data) => {this.isRecognizing = data['isRecognizing']if (this.isRecognizing) {this.voiceText = "我正在聽..."} else if (this.voiceText == "我正在聽...") {this.voiceText = ''}})voiceManager.on(carvoiceassistant.EventType.VoiceAssistantEventTypeAsrResult, (err, data) => {let json: AsrModel = JSON.parse(data['result'])...})voiceManager.on(carvoiceassistant.EventType.VoiceAssistantEventTypeTTSPlayStateChanged, (err, data) => {let isPlaying = data["isPlaying"]if (isPlaying == false) {if (this.needDeclare) {this.isUserStopRecognizing = false;this.needDeclare = false;voiceManager.startRecognize();}this.voiceText = '';}})}
(6)識別接口
voiceManager.startRecognize(); //開始識別
voiceManager.stopRecognize(); //停止識別
以上步驟完成后,你也就完成了OpenHarmony系統下語義能力集成。
總結
通過本篇文章介紹,您對OpenHarmony系統下CarVoiceAssistant項目功能應該有了初步的了解。
為了幫助到大家能夠更有效的學習OpenHarmony 開發的內容,下面特別準備了一些相關的參考學習資料:
OpenHarmony 開發環境搭建:https://qr18.cn/CgxrRy
《OpenHarmony源碼解析》:https://qr18.cn/CgxrRy
- 搭建開發環境
- Windows 開發環境的搭建
- Ubuntu 開發環境搭建
- Linux 與 Windows 之間的文件共享
- ……
系統架構分析:https://qr18.cn/CgxrRy
- 構建子系統
- 啟動流程
- 子系統
- 分布式任務調度子系統
- 分布式通信子系統
- 驅動子系統
- ……