帶你玩轉OpenHarmony AI:打造智慧語音子系統

OpenHarmony開發者發表於2022-12-23

簡介

AI時代,智者當先,判斷一個終端裝置是否智慧,語音能力是必不可缺的。智慧家居、智慧廚房、智慧汽車等等,一切衣食住行都在往智慧方向發展,那我們該如何在OpenAtom OpenHarmony(簡稱“OpenHarmony”)系統現有的能力下,搭建一套完整的語音子系統呢?

本文介紹了博泰車聯網的研發同學如何搭建一套屬於OpenHarmony的語音子系統CarVoiceAssistant,並以車載互動的形態研發語音助理專案的過程。

效果展示

undefined

開發環境

硬體平臺:DAYU200

系統版本:OpenHarmony 3.1 Release

開發語言:C++,JS,eTS

IDE:VS Code、DevEco Studio

功能介紹

undefined

互動流程介紹

本樣例包含兩個關鍵能力庫:QGWebRTCVAD,用作有效音訊檢測和擷取;QGPocketSphinx,用作喚醒詞訓練和識別,主要流程如下:

undefined

裝置喚醒之後,需要持續採集使用者音訊資料,並傳輸給博泰QingAI雲端,做持續識別和最終語義識別,識別之後客戶端根據語義做具體動作執行 。

undefined

兩步帶你實現語義助理整合

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.so
   hdc_std.exe file send libvoiceassistant_service.z.so /system/lib/libvoiceassistant_service.z.so
   hdc_std.exe file send libpocketsphinx.z.so /system/lib/module/libpocketsphinx.z.so
   hdc_std.exe file send libps_vad.z.so /system/lib/module/libps_vad.z.so
   hdc_std.exe file send libvoicecloud.z.so /system/lib/libvoicecloud.z.so
   hdc_std.exe file send voice_assistant_service.cfg /system/etc/init/
   
   #在系統/system/etc/下,建立目錄pocketsphinx; 建立目錄命令: mkdir /system/etc/pocketsphinx
   hdc_std.exe file send voice_tip.mp3 /system/etc/pocketsphinx/
   hdc_std.exe file send zh.tar /system/etc/pocketsphinx/
   
   #在OpenHarmony系統中解壓zh.tar
   tar 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專案功能應該有了初步的瞭解。如果您對本篇文章內容以及所實現的Demo感興趣,可以根據本篇文章介紹自行下載CarVoiceAssistant原始碼進行研究和使用。同時也歡迎更多開發者與我們共享開發成果,分享技術解讀與經驗心得。

OpenHarmony PATEO_CarVoiceAssistant倉庫地址

參考連結

博泰OpenHarmony語音助理

OpenHarmony知識體系工作組

undefined


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011554/viewspace-2929221/,如需轉載,請註明出處,否則將追究法律責任。

相關文章