Android語音識別-阿里語音識別

實例代碼先行 AutomaticSpeechRecognition

一、申請語音識別API(可忽略,代碼中有我自己的)

阿里智能語音識別網頁申請自己的AccessKey,secret。

二、用Android Studio創建項目

可以從git clone下載用下我的

git clone https://github.com/zzuwenjie/AutomaticSpeechRecognition

1、在build.gradle(module:app)文件的android中添加

    sourceSets {
        main {
            jniLibs.srcDirs = ["libs"]
        }
    }

2、將在阿里雲智能語音識別上下載的android sdk解壓

將下圖中的包複製到自己項目的app/libs文件夾中

3、修改代碼

3.1 在manifest.xml文件夾中添加所需權限,記得申請下這些權限。(實例代碼中有)

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在主進程(UI)申請下權限

        ActivityCompat.requestPermissions(this, new String[]{
                Manifest.permission.RECORD_AUDIO,
                Manifest.permission.INTERNET,
                Manifest.permission.ACCESS_NETWORK_STATE,
        }, 1);

3.2 添加語音識別類 AutoSpeechRecognizer .可自命名

/**
 * Created by wjsay on 2018/10/30
 * Describe: 阿里雲,一句話識別。
 * 其中id、secret是我自己實名認證申請的。請換成自己的
 */

public class AutoSpeechRecognizer {
    private static final String TAG = "AutoSpeechRecognizer";

    private static final String appKey = "nls-service";
    private static final String id = "LTAILtpaW9KOS53M";
    private static final String secret = "iL8LEpKJAGjCsA93sGgc0TD005yovA";

    private boolean recognizing;
    private NlsClient mNlsClient;
    private NlsRequest mNlsRequest;

    /**
     * 實例化語音識別
     *
     * @param listener      異步語音服務結果的回調類,回調參數:
     *                      NlsClient.ErrorCode.SUCCESS:
     *                      NlsClient.ErrorCode.RECOGNIZE_ERROR:
     *                      NlsClient.ErrorCode.RECORDING_ERROR:
     *                      NlsClient.ErrorCode.NOTHING:
     * @param stageListener 語音服務引擎狀態變更回調接口,服務狀態的改變
     *                      音量大小的回調、語音文件的生成通過本接口獲取。
     */
    public AutoSpeechRecognizer(Context context, NlsListener listener, StageListener stageListener) {
        NlsClient.openLog(true);
        NlsClient.configure(context.getApplicationContext());

        mNlsRequest = new NlsRequest(new NlsRequestProto(context));
        mNlsRequest.setApp_key(appKey);
        mNlsRequest.setAsr_sc("opu");

        //實例化NlsClient
        mNlsClient = NlsClient.newInstance(context, listener, stageListener, mNlsRequest);
        mNlsClient.setMaxRecordTime(60000);         //設置最長語音
        mNlsClient.setMaxStallTime(1000);           //設置最短語音
        mNlsClient.setMinRecordTime(500);           //設置最大錄音中斷時間
        mNlsClient.setRecordAutoStop(false);        //設置VAD
        mNlsClient.setMinVoiceValueInterval(100);   //設置音量回調時長
    }

    /**
     * 開始識別
     */
    public void startRecognize() {
        recognizing = true;
        mNlsRequest.authorize(id, secret);
        if (!mNlsClient.start()){
            Log.e(TAG, "startRecognize: can not start recognize");
        }
    }

    /**
     * 停止識別
     */
    public void stopRecognize() {
        if (recognizing)
            mNlsClient.stop();
        recognizing = false;
    }

    /**
     *
     * @return 是否正在錄音識別的布爾值
     */
    public boolean isRecognizing() {
        return recognizing;
    }
}

3.3 使用樣例

點擊按鈕開始語音識別,再次點擊識別結束。併發量不大於10.。

AutoSpeechRecognize的實例有幾個方法需要注意,

isRecognizing 判斷是否在識別   stopRecognize 停止識別,處理結果   startRecognize開始識別

實例代碼比較簡潔,容易化爲適合自己使用的,嘿嘿。

————————————————————————————————————————————————————

感謝我室友BoldEric的幫助

——by wjsay 2018-10-30 23:53:41

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章