Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 語音識別 研究

Android 語音識別 研究

編輯:關於Android編程

一、Android 提供了三種方式:

android語音識別方法一:使用intent調用語音識別程序

1. 說明
以下例程功能為:在應用程序中使用intent來調出語言識別界面,錄音並識別後將識別的字串返回給應用程序。注意:使用前需要安裝語音識別程序如語音搜索。

2. 本例參考自android例程:
development/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.java

3. 可從此處下載可獨立運行的代碼:
http://download.csdn.net/source/2591401

4.這種方法需要聯網,借助於雲端技術可以識別用戶的語音輸入。

5、核心代碼:new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)

6、這種方式有個回調函數可以返回音頻文件,即可實現邊錄音邊識別。

android語音識別方法二:應用程序自己調用語音識別庫

1. 說明
以下例程功能為:應用程序自身調用語言識別函數,程序以循環方式等待錄音並識別後的字串。

2. 本例參考自android代碼:
frameworks/base/core/java/android/speech/srec/Recognizer.java中注釋部分

3. 可從此處下載可獨立運行的代碼:
http://download.csdn.net/source/2591401

4. 語音識別庫是嵌入到系統裡的,系統提供的識別庫有限。

5、這個應該不需要聯網吧(未驗證)

語音識別方法三:調用語音Service識別

1. 說明
以下例程功能為:在應用程序中使用通於訪問service調用語言識別功能,錄音並識別後將識別的字串通過Listener返回給應用程序。注意:使用前需要安裝語音識別服務,如編譯安裝源碼中的development/samples/VoiceRecogitionService。

2. 本例參考自android源碼

a) 後台服務
參見development/samples/VoiceRecognitionService/*
此處實現了一個模擬的後台服務,它並未實現真的語音識別,而只是一個框架以示例,編譯並安裝它,即可在設置的語音輸入與輸出中看到它,它包含了一個設置界面,當連接這個Service時,如果設置了Letters,則直接返回abc,如果設置了Numbers,則直接返回123
你可以自己實現,用於連接android源碼自帶的識別引擎srec.

b) 前台程序
參見frameworks/base/core/java/android/speech/Recognition*
它與後台Service交互,此段代碼實現在應用程序界面中

3. 可從此處下載可獨立運行的代碼(前台程序):
http://download.csdn.net/source/2591401

二、第三方語音識別平台:

1、、科大訊飛

sdk:使用有ui的sdk需要導入jar包和動態庫,調用jar包裡面的接口,進行相關功能實現;
訊飛語音+:需要安裝訊飛語音+APK,導入訊飛語音+的開發jar包,用戶可以自定義界面,目前訊飛語音+包含本地合成功能。

語音+可以支持離線語音合成。離線語音識別的功能,但是收費。

2、百度語音識別:


有兩種方式:

(1)、調用 語音識別控件

(2)、api 方式

上一章描述了如何使用BaiduASRDigitalDialog進行語音識別,此種方式提供了統一的簡便易用

的交互,如果此種交互無法滿足開發者的需求,開發者可以直接使用語音識別 API 定制自己的語音

交互。

在使用api方式時有個重要的參數

class MyVoiceRecogListener implements VoiceClientStatusChangeListener {

@Override

public void onClientStatusChange(int status, Object obj) {

switch (status) {

case VoiceRecognitionClient.CLIENT_STATUS_START_RECORDING:

break;

case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_START:

//檢測到語音起點

break;

case VoiceRecognitionClient.CLIENT_STATUS_AUDIO_DATA:

//有音頻數據輸出

if (obj != null && obj instanceof byte[]) {

//處理數據

}

break;

case VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:

//已經檢測到語音終點,等待網絡返回

break;

case VoiceRecognitionClient.CLIENT_STATUS_FINISH:

//語音識別完成

if(currentVoiceType == VOICE_TYPE_SEARCH){

mStatusTextView.setText(R.string.finished);

//obj 是一個ArrayList,裡面有多個候選詞

}

break;

case VoiceRecognitionClient.CLIENT_STATUS_UPDATE_RESULTS:

//多句模式會有部分結果(一個分句)返回

if(currentVoiceType == VOICE_TYPE_SEARCH){

//obj 是一個ArrayList,裡面有多個候選詞

}else if(currentVoiceType == VOICE_TYPE_INPUT){

//obj 是一個List>,裡面有多個候選詞

List> result = (List>) obj;

}

break;

case VoiceRecognitionClient.CLIENT_STATUS_USER_CANCELED:

//通知用戶已取消

break;

default:

break;

}

}

可以上邊拿到音頻數據,可以實現邊識別邊錄音

三、其他:

Android平台使用PocketSphinx做離線語音識別,小范圍語音99%識別率

    最近語音識別很火,但是都是用的在線語音識別,研究了一下離線語音識別,小范圍內的語音識別率還不錯,在此記錄一下

    首先本文要說的兩個前提1.android平台離線語音識別 2.小范圍語音

    小范圍語音指的是相對固定的命令。本文的例子大概實現了20條語音命令,超出范圍的無法識別。因此本文中離線語音的使用范圍也有限,對於一些固定的輸入可能有用,比如用語音命令代替打開,播放,重啟這些簡單的固定的命令。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved