語音機器人開發


服務機器人缺少了語音交互的話,就會讓人覺得不像個機器人。在當前非常多的服務機器人上,語音交互成為一個非常大的亮點。

當然如果我們從頭做起,這樣就太麻煩,還好當前有很多公司提供了解決方案。科大訊飛、百度語音等都提供了非常好的語音識別和語音合成工具。

1.1 簡介

這里我采用圖靈機器人作為語義理解的工具,搭建一個語音機器人。

具體可以參考圖靈機器人官網http://www.tuling123.com/help/h_cent_andriodsdk.jhtml?nav=doc

大致框架如下:

1.2 概念解釋

(1)語音識別:Automatic Speech Recognition(ASR),也稱自動語音識別,其目標是將人類的語音中的詞匯內容轉換相應的文本。

(2)自然語言理解:Natural Language Understanding(NLU),俗稱人機對話,是人工智能的分支學科。本學科通過電子計算機模擬人的語言交際過程,從而使計算機能理解和運用人類社會的自然語言,實現人機之間的自然語言通信,進而代替人的部分腦力勞動,包括查詢資料、解答問題、摘錄文獻、匯編資料以及一切有關自然語言信息的加工處理。

(3)TRClient:TRClient 是一個封裝了語音采集、處理、網絡收發、語義理解等功能的語音識別和語義解析整體解決方案。

(4)應用程序:在開發中使用了 TRClient,具有語音識別功能的產品線產品。

1.3功能介紹

(1)語音識別:將語音識別成相應的文本。

(2)語義理解:將文本識別成領域相關的語義結果。

(3)語音合成 : 將文本轉化成語音讀出

1.4 環境搭建

1.4.1 添加TRClient到工程

1. 添加libs到工程

開發者需要將Demo包中的libs目錄整體Copy到工程目錄,Libs目錄包括了語音識別合成所需的so庫以及jar包

對於android studio的操作環境,配置jar包和so文件,

Jar包拷貝入app->libs文件

 

在android studio中添加 file->project structure添加jar目錄

 

在app->src->main->jniLibs新建當前目錄,copy->armeabi的so文件

 

 

1.4.2 權限聲明

名稱

用途

android.permission.RECORD_AUDIO

允許使用麥克風錄音

android.permission.INTERNET

允許聯網,發送語音數據至服務器,獲得識別結果

android.permission.ACCESS_NETWORK_STATE

允許獲取當前網絡狀態,優化錄音參數及網絡參數

android.permission.READ_PHONE_STATE

允許獲取用戶手機的電話狀態信息

android.permission.MODIFY_AUDIO_SETTINGS

允許藍牙錄音

android.permission.BROADCAST_STICKY

某些手機啟動 SCO 音頻連接需要此權限

android.permission.BLUETOOTH

允許藍牙錄音檢測耳機狀態

android.permission.WRITE_SETTINGS

允許修改和讀取系統配置信息

android.permission.WRITE_EXTERNAL_STORAGE

允許向存儲設備中寫入

需要在 AndroidManifest.xml 文件, 增加以上七個權限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    <uses-permission android:name="android.permission.BLUETOOTH" />

    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.READ_CONTACTS" />

如果需要使用藍牙設備作為輸入源, 需要額外在AndroidManifest.xml 文件添加下列權限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.BROADCAST_STICKY "/>


<uses-permission android:name="android.permission.BLUETOOTH "/>

1.4.3 Progurad配置

如果應用配置了代碼混淆, 需要在 Proguard配置文件增加以下參數:

-keep class com.baidu.android.**{*;}

-keep class com.baidu.voicerecognition.android.**{*;}           

-keep class com.turing.androidsdk.**{*;}           

1.5語音識別

語音識別部分主要包括以下四個步驟

1.5.1 實例化VoiceRecognizerManager

實例化VoiceRecognizerManager,由於目前我們使用百度ASR方式,使用百度ASR,使用構造方法:


VoiceRecognizerManager(Context context,String bdAPI_KEY,String bdSECRET_KEY)               

參數: bdAPI_KEY和bdSECRET_KEY           

這里的bdAPI_KEY和bdSECRET_KEY,需要自己到百度官方去申請,位置如圖所示:


百度語音開放平台的網址為:http://yuyin.baidu.com/


1.5.2 設定ASR狀態監聽

設定ASR狀態監聽

示例:VoiceRecognizerManager.setVoiceRecognizeListener(listener);

這個listener就是需要實現接口VoiceRecognizeListener,在不同的識別狀態下回調其不同的方法。

1.5.3 調用語音識別方法

調用語音識別方法

              VoiceRecognizerManager.startRecognize();

這個方法就是開始進行識別

1.5.4 獲取識別結果

獲取識別結果,在步驟2里listener的回調方法onRecognizeResult中獲取識別結果。

 public void onRecognizeResult(String result)    

{               

handleRecognizeResult(result);

}

   這里的result就是返回的結果

1.6 語義理解

語義理解部分主要包括以下四個步驟

1.6.1 SDKInit類

SDKInit類初始化

調用SDKInit.init

                public static void init(SDKInitBuilder builder,InitListener initListener)

          

參數:(1)SDKInitBuilder是封裝了初始化的各種參數,這個類的變量說明

         Contex為上下文

          Secret為官網上機器人詳情頁中自動生成的一個secret(默認采用非加密模式,若采用加密模式時才開啟),如下圖

         turingKey為該機器人帳號的apikey,可在“機器人詳情”頁獲取

         uniqueId為自己添加的一個標示符,如郵箱、手機號等等

(2)參數InitListener是一個初始化后回調方法的接口

         onComplete()是成功后,回調的方法

         onFail(java.lang.String error)是失敗后,回調的方法

1.6.2 實例化TuringApiManager類

實例化TuringApiManager類

這里一定要在上一步SDKInit初始化成功后,再初始化TuringApiManager,否則很多功能將無法使用

推薦的代碼:

                

onComplete()

{

TuringApiManager m = new TuringApiManager (this);

}

1.6.3 設置監聽

添加監聽:

                

public void setHttpListener(HttpConnectionListener httpConnectionListener)

參數:httpConnectionListener用於監聽聯網請求結果的回調

代碼形式如下:               

TuringApiManager m = new TuringApiManager (this);

               

m.setHttpListener(httpConnectionListener);

其中httpConnectionListener就是實現接口HttpConnectionListener

               

1.6.4 發出請求

發出請求

      public void requestTuringAPI(String requestInfo)

參數:requestInfo為傳遞的文本

比如requestInfo = “你好”,那么在上一步的public void onSuccess(RequestResult result) 中result可以得到一串json字符串,其中json字符串根據不同的類型會有不同的格式

1.7 語音合成(TTS)

語音合成部分主要包括以下四個步驟

1.7.1 實例化TTSManager類

實例化TTSManager類

該類為語音合成的管理類,要使用語音合成功能,首先要創建TTSManager的對象實例

選用百度在線TTS,其構造函數如下:               

public TTSManager(Context context, String bdAPI_KEY, String bdSECRET_KEY)     

這里的bdAPI_KEY和bdSECRET_KEY

1.7.2 設置監聽

添加監聽:

     TTSManager.setTTSListener(mTTSListener)

     mTTSListener需要實現接口TTSListener ,可以在不同的語音合成狀態下回調其不同的方法

1.7.3 開始語音合成

調用TTSManager.startTTS(String ttsContent) 方法來進行語音合成

參數:ttsContent就是需要被合成的文本,比如 ttsContent=“你好”,那么就會讀出 你好。

1.7.4 處理合成完成

語音合成后,就會觸發onSpeechFinish(),這樣即可在其方法中添加相應的邏輯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM