1. 程式人生 > >中國移動靈犀雲語音識別SDK(android)使用指南

中國移動靈犀雲語音識別SDK(android)使用指南

隨著智慧家居概念的火熱,語音互動這一新時代的人機互動方式再度掀起了熱潮。移動網際網路應用在設計開發時也紛紛考慮加入語音識別功能,帶給使用者除傳統鍵盤或觸控互動方式外的更便捷互動體驗。中國移動近日推出的“靈犀雲”,作為新一代的智慧語音雲平臺,正致力於為應用提供全方位的智慧語音能力服務,帶給使用者高效、準確、智慧的互動體驗。

基於中移動與語音行業領軍者科大訊飛的深度戰略合作背景,靈犀雲的核心技術源自科大訊飛。憑藉電信級網路及4G服務的優勢,靈犀雲在語音服務質量上具備領先優勢。這也是繼雙方此前面向廣大使用者推出靈犀語音助手APP後,中移動向廣大應用開發者們呈獻的一大利器,助力應用進入智慧互動時代。

這篇文章主要介紹利用靈犀雲SDK實現語音識別(包括語音轉換為文字的“語音聽寫”,及語音”命令詞識別“)的方法:

1、註冊並登入中國移動開發者社群 http://dev.10086.cn(建議使用IE或IE核心瀏覽器)

2、登入成功後,點選下圖紅框指示的“申請能力應用”


3、點選“申請能力應用”按鈕


4、填寫您應用的基本資訊


5、語音服務AppID申請成功,之後點選下方按鈕下載SDK。


6、讓你下載的SDK用起來:

Step 1 匯入SDK

[1]在Eclipse中建立你的Android工程。

[2] 將開發工具包中libs目錄下的Msc.jar複製到新建工程的libs目錄中(如下圖所示)。


[3]將開發工具包中armeabi(armeabi-v7a,mips,x86)目錄下的libmsc.so複製到新建工程的armeabi目錄中(如下圖所示)。


[4]在你需要使用MSC服務的檔案中匯入相應的類。

例如新增聽寫功能:importcom.iflytek.cloud.SpeechRecognizer;

Step 2 新增使用者許可權

在工程AndroidManifest.xml檔案中新增如下許可權
<!--連線網路許可權,用於執行雲端語音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--獲取手機錄音機使用許可權,聽寫、識別、語義理解需要用到此許可權 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--讀取網路資訊狀態 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--獲取當前wifi狀態 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允許程式改變網路連線狀態 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!--讀取手機資訊許可權 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--讀取聯絡人許可權,上傳聯絡人需要用到此許可權 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>

注:如需打包或者生成APK的時候進行混淆,在proguard.cfg中新增如下程式碼

-keep class com.iflytek.**{*;}


Step 3 功能新增

[1] 初始化

建立使用者語音配置物件後才可以使用語音服務,建議在程式入口處呼叫。
// 將“12345678”替換成您申請的APPID,申請地址:http://dev.10086.cn/
SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");

[2] 語音聽寫

主要指將連續語音快速識別為文字的過程,能識別通用常見的語句、詞彙,不限制說法。

1.語音聽寫

//1.建立SpeechRecognizer物件
SpeechRecognizer mIat= SpeechRecognizer.createRecognizer(context, null);
//2.設定聽寫引數,詳見《CMCC MSC Reference Manual》SpeechConstant類
mIat.setParameter(SpeechConstant.DOMAIN, "iat");
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");
//3.開始聽寫
mIat.startListening(mRecoListener);
//聽寫監聽器
private RecognizerListener mRecoListener = new RecognizerListener(){
//聽寫結果回撥介面(返回Json格式結果,使用者可參見文件末尾的附錄表);
//一般情況下會通過onResults介面多次返回結果,完整的識別內容是多次結果的累加;
//關於解析Json的程式碼可參見MscDemo中JsonParser類;
//isLast等於true時會話結束。
public void onResult(RecognizerResult results, boolean isLast) {
			Log.d("Result:",results.getResultString ());
	}
//會話發生錯誤回撥介面
	public void onError(SpeechError error) {error.getPlainDescription(true) //獲取錯誤碼描述}
	//開始錄音
	public void onBeginOfSpeech() {}
	//音量值0~30
	public void onVolumeChanged(int volume){}
	//結束錄音
	public void onEndOfSpeech() {}
	//擴充套件用介面
	public void onEvent(int eventType,int arg1,int arg2,String msg) {}
};

2.上傳聯絡人

上傳聯絡人可以提高聯絡人名稱識別率,也可以提高語義的效果,每個使用者終端裝置對應一個聯絡人列表,聯絡人格式詳見《CMCC MSC Reference Manual》ContactManager
//獲取ContactManager例項化物件
ContactManager mgr = ContactManager.createManager(context, mContactListener);	
//非同步查詢聯絡人介面,通過onContactQueryFinish介面回撥
mgr.asyncQueryAllContactsName();

//獲取聯絡人監聽器。
private ContactListener mContactListener = new ContactListener() {
	@Override
	public void onContactQueryFinish(String contactInfos, boolean changeFlag) {
		//指定引擎型別
mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
		mIat.setParameter(SpeechConstant.TEXT_ENCODING,"utf-8");		
		ret = mIat.updateLexicon("contact", contactInfos, lexiconListener);
		if(ret != ErrorCode.SUCCESS){
			Log.d(TAG,"上傳聯絡人失敗:" + ret);
}
	}
};
//上傳聯絡人監聽器。
private LexiconListener lexiconListener = new LexiconListener() {
	@Override
	public void onLexiconUpdated(String lexiconId, SpeechError error) {
		if(error != null){
			Log.d(TAG,error.toString());
		}else{
			Log.d(TAG,"上傳成功!");
		}
	}
};


3.上傳使用者詞表

上傳使用者詞表可以提高詞表內詞彙的識別率,也可以提高語義的效果,每個使用者終端裝置對應一個詞表,使用者詞表的格式及構造方法詳見《CMCC MSC Reference Manual》UserWords
//上傳使用者詞表,userwords為使用者詞表檔案。
String contents = "您所定義的使用者詞表內容";
mIat.setParameter(SpeechConstant.TEXT_ENCODING,"utf-8");	
//指定引擎型別
mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
ret = mIat.updateLexicon("userword", contents, lexiconListener);
if(ret != ErrorCode.SUCCESS){
	Log.d(TAG,"上傳使用者詞表失敗:" + ret);
}
//上傳使用者詞表監聽器。
private LexiconListener lexiconListener = new LexiconListener() {
	@Override
	public void onLexiconUpdated(String lexiconId, SpeechError error) {
		if(error != null){
			Log.d(TAG,error.toString());
		}else{
			Log.d(TAG,"上傳成功!");
		}
	}
};

//下載使用者詞表
DataDownloader dataDownloader = new DataDownloader(context);
dataDownloader.setParameter(SpeechConstant.SUBJECT, "spp");
dataDownloader.setParameter(SpeechConstant.DATA_TYPE, "userword");
dataDownloader.downloadData(downloadlistener);
//使用者詞表下載監聽器。
private SpeechListener downloadlistener = new SpeechListener(){
	//使用者詞表結果回撥
	public void onData(byte[] data) {}
	//使用者詞表完成回撥
	public void onCompleted(SpeechError error) {}
	//使用者詞表事件回撥


[3] 語法識別

主要指基於命令詞的識別,識別指定關鍵詞組合的詞彙,或者固定說法的短句。語法識別採用ABNF語法格式進行識別。
//1.建立SpeechRecognizer物件
SpeechRecognizer mAsr = SpeechRecognizer.createRecognizer(context, null);
// ABNF語法示例,可以說”北京到上海”
String mCloudGrammar = "#ABNF 1.0 UTF-8;
languagezh-CN; 
mode voice;
root $main;
$main = $place1 到$place2 ;
$place1 = 北京 | 武漢 | 南京 | 天津 | 天京 | 東京;
$place2 = 上海 | 合肥; ";
//2.構建語法檔案
mAsr.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");
ret = mAsr.buildGrammar("abnf", mCloudGrammar ,	grammarListener);
if (ret != ErrorCode.SUCCESS){
	Log.d(TAG,"語法構建失敗,錯誤碼:" + ret);
}else{
	Log.d(TAG,"語法構建成功");
}
//3.開始識別,設定引擎型別為雲端
mAsr.setParameter(SpeechConstant.ENGINE_TYPE, "cloud");
//設定grammarId
mAsr.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarId);
ret = mAsr.startListening(mRecognizerListener);
if (ret != ErrorCode.SUCCESS) {
	Log.d(TAG,"識別失敗,錯誤碼: " + ret);
}
//構建語法監聽器
private GrammarListener grammarListener = new GrammarListener() {
	@Override
	public void onBuildFinish(String grammarId, SpeechError error) {
		if(error == null){
			if(!TextUtils.isEmpty(grammarId)){
//構建語法成功,請儲存grammarId用於識別
			}else{
				Log.d(TAG,"語法構建失敗,錯誤碼:" + error.getErrorCode());
			}			
		}};


相關推薦

中國移動靈犀語音識別SDKandroid使用指南

隨著智慧家居概念的火熱,語音互動這一新時代的人機互動方式再度掀起了熱潮。移動網際網路應用在設計開發時也紛紛考慮加入語音識別功能,帶給使用者除傳統鍵盤或觸控互動方式外的更便捷互動體驗。中國移動近日推出的“靈犀雲”,作為新一代的智慧語音雲平臺,正致力於為應用提供全方位的智慧語音

中國移動靈犀語音識別及合成SDKiOS使用指南

隨著智慧家居概念的火熱,語音互動這一新時代的人機互動方式再度掀起了熱潮。移動網際網路應用在設計開發時也紛紛考慮加入語音識別功能,帶給使用者除傳統鍵盤或觸控互動方式外的更便捷互動體驗。中國移動近日推出的“靈犀雲”,作為新一代的智慧語音雲平臺,正致力於為應用提供全方位的智慧語

SeetaFace編譯使用 中科院人臉識別SDK

中科院人臉識別平臺:  1:編譯face_detector——dll工程  步驟: 1:檔案——新建——專案——win32控制檯程式——dll——空工程。  2:新增cpp檔案,除了TEST檔案下  3:屬性C/C++——附加包含目錄——新增include中的檔案  4:

自頂向下分析一個簡單的語音識別系統

上回分析了run_model函式的configuration過程,其中load_placeholder_into_network函式用於構建該語音識別系統中RNN網路的基本結構,本回將分析以下該網路。 1.RNN簡介 人們並不是從每秒鐘他接收到的資訊開始

中國移動規範學習——4A技術要求綜述

4A:賬號管理、認證、授權、審計 這個安全管理框架包括使用者的賬號(Account)管理、認證(Authentication)管理、授權 (Authorization)管理和安全審計(Audit),簡稱4A框架。 賬號管理是將自然人與其擁有的所有系統賬號關聯,集中進行管理,

自頂向下分析一個簡單的語音識別系統

接著上回結束的地方,本回我們來分析sparse_tuple_to_texts函式和ndarray_to_text函式。首先分析sparse_tuple_to_texts函式。 1.sparse_tuple_to_texts函式 給出程式碼如下: def s

自頂向下分析一個簡單的語音識別系統

上回我們說到了get_audio_and_transcript函式、pad_sequences函式和sparse_tuple_from函式等3個函式,本回我們分析這3個函式分別實現了哪些功能。 1.get_audio_and_transcript函式 該

自頂向下分析一個簡單的語音識別系統

本回我們主要分析run_model中的configuration過程的相關函式。 1.run_model函式 第二回我們簡單介紹了run_model函式的結構,現在我們貼出程式碼如下所示: def run_model(self):

自頂向下分析一個簡單的語音識別系統

上回我們分析了模型的初始化,花開兩朵各表一枝,本回我們說一下上回提到的set_dirs.py。該檔案結構如下圖所示: Created with Raphaël 2.1.0get_home_dirget_data_dir/get_conf_dir/get_mod

自頂向下分析一個簡單的語音識別系統

RNN處理帶有時間序列的資料時具有很大的優勢,接下來幾篇文章將介紹如何使用RNN訓練一個簡單的語音識別系統。 主要參考該GitHub專案,https://github.com/silicon-vall

如何使用百度人臉識別服務V3版介面python語言初識SDK

上次我們講到了如何新建一個面部識別的應用,現在我們就可以開始使用這個服務了 下載SDK有多種方法,我就不多說,提供一種最簡單的方法:直接使用pip安裝 開啟Windows的cmd(命令提示符) 輸入 pip ins

可以嵌入移動開發的名片識別SDK

雲脈名片識別軟件是一款擁有名片錄入管理功能的ocr識別軟件。具有識別率世界領先、高精度、高速度等優勢,通過拍攝名片可以自動識別名片上的內容信息,將識別後的內容分組歸類,存入軟件系統或手機端的電話本,並可以同步聯系人信息至雲端服務器。 雲脈名片識別SDK,就是利用OCR(光學字符識別)技術,將

移動端VIN碼識別sdk

平臺 二手 測試 技術支持 app 參數 等等 采集 軟件測試 一、車架號識別系統開發包簡介 車架號識別,是北京文通科技有限公司結合VIN碼主機廠數據庫及自身多年文字識別經驗,針對機動車配置參數等信息的查詢及采集業務推出的一款VIN碼自動識別產品。 車架號識別,主要應用

離線移動車牌識別技術android,ios

當今,移動端車牌識別在我國移動警務通、智慧停車場、手持收費POS機等移動終端PDA的使用比較普及下,如果能在這些終端上能夠整合車牌識別功能,那麼對於維護交通安全和城市治安,實現交通自動化管理有著現實的意義。而其中大部分終端的作業系統都為Android平臺,下面我們就要介紹一下Android平臺車牌識

訊飛語音識別SDK整合 語音識別 語音合成 訊飛英語識別

最近專案集成了訊飛語音識別功能,由此記錄簡單的整合流程 demo效果(logcat) 資源下載 1、首先用as建一個model (這個不用介紹) 2、登入訊飛開發者平臺,進入控制檯,建立應用生成appid 1、 建立應用

中國移動規範學習——4A技術要求賬號管理

【集中賬號管理的目的】 隨著資訊系統複雜性的增加,對中國移動企業內部使用者許可權的管理要求,將大大超過手工管理跨異構系統的能力。管理上的複雜性還會導致出錯機會和安全風險的增加。比如,人員的快速流轉導致系統中大量存在孤立的賬號,並且這些孤立的賬號具有有效的許可權,使企業暴露在

C#接訊飛實現語音識別功能windows平臺

首先在訊飛官網下載語音識別的SDK,這些網上教程很多。(下載window平臺語音聽寫SDK) 1、建立一個C#工程 2、因為訊飛只有C/C++的介面,bi並沒有C#,需要將介面轉換為C#介面,自己先在工程中建立一個DLL類 在自己的dll中將C/C++的介面

Android開發學習之使用百度語音識別SDK實現語音識別(上)

        作為移動網際網路殺手級的互動方式,語音識別從問世以來就一直備受人們的關注,從IOS的Siri到國內的訊飛語音,語音識別技術在移動開發領域是最為充滿前景和希望的技術。Android作為一個移動作業系統,其本身就繼承了Google天生的搜尋基因,因此Androi

unity接訊飛語音識別SDK(windows平臺)

上一篇只是shi'實現C#接訊飛語音識別SDK,這一篇在unity中實現語音識別 1、在unitygong工yin'音訊資源 2、匯入SDK中的msc: 3、建立指令碼,封裝dll,步驟就不重複了 4、做一個處理音訊的介面,傳入appid,會話資訊、音訊路

Arcface人臉識別SDKjava+linux/window 初試

是不是 報錯 argument lib 再次 測試 sof exception .cn 虹軟官網:http://www.arcsoft.com.cn/ 登錄後要實名認證才可以使用sdk。 下圖這兩個是我選擇的,window版本地開發測試,linux版是生產環境使用。