【Android】科大訊飛——語音識別

 

目錄

一、準備工作

二、項目集成

三、項目實戰

四、項目演練

五、參考文檔

六、案例源碼


因爲最近項目需要,需要集成語音識別的功能,這裏記錄下科大訊飛語音識別的集成和使用,也方便其它小夥伴參考,如果哪裏有問題,可以提出來以便改正。

一、準備工作

1、註冊一個訊飛開放平臺賬號,官網https://www.xfyun.cn/

2、登陸賬號之後,在首頁進入“控制檯”。

訊飛首頁

 

3、 進入控制檯後,選擇“創建新應用”,填寫相關信息後,提交。

訊飛-創建新應用

 訊飛-填寫應用信息

 4、應用創建成功之後,去下載你的應用需要的SDK,因爲此項目是語音識別的,所以就選擇“語音聽寫”這個SDK。

訊飛-SDK下載

 5、語音識別Android SDK下載完成之後,解壓出來如圖所示。因爲本案例只使用沒有UI的識別,所以,我們只需要libs目錄下的文件。

 

訊飛-已下載SDK

6、找到你剛剛創建的應用,保存下APP ID,這個到後面項目代碼中會用到。

訊飛-APP ID

二、項目集成

1、新建一個工程項目,將下載下來的SDK包中,libs目錄下的Msc.jar包複製到項目的libs目錄下,並添加爲項目的依賴。

訊飛-msc.jar

1

yilai

2、項目src/main/目錄下,新建  jniLibs文件夾。

jni folde

 jniLibs

3、將SDK包中,libs目錄下的arm64-v8a、armeabi-v7a兩個文件夾,複製到項目的jniLibs目錄下。

so庫

 jniLibs-so

三、項目實戰

1、添加用戶權限(官方文檔提供的權限,實際應用中根據實際項目需要進行刪減)

注意:Android 6.0以後,一些危險權限需要動態申請。

<!--連接網絡權限,用於執行雲端語音能力 -->
<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"/>
<!--外存儲寫權限,構建語法需要用到此權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--外存儲讀權限,構建語法需要用到此權限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--配置權限,用來記錄應用配置信息 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!--手機定位信息,用來爲語義等功能提供定位,提供更精準的服務-->
<!--定位信息是敏感信息,可通過Setting.setLocationEnable(false)關閉定位請求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--如需使用人臉識別,還要添加:攝相頭權限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />

2、初始化即創建語音配置對象,只有初始化後纔可以使用MSC的各項服務。建議將初始化放在程序入口處(如Application、Activity的onCreate方法)。此處將初始化工作放在新建的BaseApplication.java 中,並且在AndroidManifest.xml文件中使用該BaseApplication。

public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        // 將“12345678”替換成您申請的APPID,申請地址:http://www.xfyun.cn
        // 請勿在“=”與appid之間添加任何空字符或者轉義符
        SpeechUtility.createUtility(this, SpeechConstant.APPID +"=12345678");


        super.onCreate();
    }
}

baseApplication

3、 初始化語音識別對象SpeechRecognizer,並初始化InitListener監聽,獲取初始化狀態。

此處的setParameter()是根據自己需求加的,如果你需要添加其它參數,可以查看SDK 文檔。

 /**
     * 初始化語音識別對象
     */
    private void initVoiceRecognize() {
        //獲取系統默認語言
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            locale = LocaleList.getDefault().get(0);
        } else {
            locale = Locale.getDefault();
        }
        language = locale.getLanguage() + "-" + locale.getCountry();
        Log.d(TAG, "系統默認language:"+language);


        // 初始化識別無UI識別對象
        //使用SpeechRecognizer對象,可根據回調消息自定義界面;
        speechRecognizer = SpeechRecognizer.createRecognizer(MainActivity.this, initListener);
        if(speechRecognizer != null) {
            //設置返回結果格式,目前支持json,xml以及plain 三種格式,其中plain爲純聽寫文本內容
            speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "plain");
            // 設置語音前端點:靜音超時時間,單位ms,即用戶多長時間不說話則當做超時處理
            //取值範圍{1000~10000}
            speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "4000");
            //設置語音後端點:後端點靜音檢測時間,單位ms,即用戶停止說話多長時間內即認爲不再輸入,
            //自動停止錄音,範圍{0~10000}
            speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000");
            //設置語音輸入語言,zh_cn爲簡體中文,en_us爲美式英文
            if (language.equalsIgnoreCase("zh-CN")) {
                // 設置語言
                speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
            } else {
                // 設置語言
                speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "en_us");
            }

            Log.d(TAG, "語音識別對象完成初始化");
        }else{
            Log.d(TAG, "語音識別對象 == null");
        }
    }
//初始化對象時,通過此回調接口,獲取初始化狀態。
    private InitListener initListener = new InitListener() {
        @Override
        public void onInit(int i) {
            Log.d(TAG, "SpeechRecognizer initListener() code = " + i);
            if (i != ErrorCode.SUCCESS) {
                Log.e(TAG, "語音識別初始化失敗,錯誤碼:" + i);
            }else{
                Log.w(TAG, "語音識別初始化成功,錯誤碼:" + i);
            }
        }
    };

4、初始化識別監聽RecognizerListener,用於startListening()開啓監聽。

//設置識別監聽器,開始監聽
speechRecognizer.startListening(recognizerListener);
//初始化識別監聽器
    private RecognizerListener recognizerListener = new RecognizerListener() {
        @Override
        public void onVolumeChanged(int i, byte[] bytes) { //音量變化
        }

        @Override
        public void onBeginOfSpeech() {   //開始說話
        }

        @Override
        public void onEndOfSpeech() {  //結束說話
            //繼續識別,並設置監聽器
            speechRecognizer.startListening(recognizerListener);
        }

        @Override
        public void onResult(RecognizerResult recognizerResult, boolean b) { //返回結果 返回的結果可能爲null,請增加判斷處理。
            if(recognizerResult == null){
                Log.d(TAG, "識別出來 onResult:" + b + "  recognizerResult == null");
            }else {
                Log.d(TAG, "識別出來 onResult:" + b + "    content:" + recognizerResult.getResultString());
                tvRecognizeResult.setText(recognizerResult.getResultString());
            }
        }

        @Override
        public void onError(SpeechError speechError) {  //錯誤回調
            if(isRecognizing) {
                Log.e(TAG, "語音識別出錯 onError()");
            }
        }

        @Override
        public void onEvent(int i, int i1, int i2, Bundle bundle) {  //擴展接口
        }
    };

四、項目演練

注意:因爲是在線語音識別,所以項目需要在真機,且有網絡的情況下運行,demo代碼中沒有對網絡狀態進行判斷,小夥伴們可以自行添加。

語音識別演示

五、參考文檔

語音聽寫 Android SDK 文檔 https://www.xfyun.cn/doc/asr/voicedictation/Android-SDK.html

MSC Android API 文檔:http://mscdoc.xfyun.cn/android/api/

六、案例源碼

碼雲:https://gitee.com/lilium_foliage/XFVoiceRecognize

csdn:https://download.csdn.net/download/qq_38950819/12005144

發佈了29 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章