教你用 Android 做二次開發,識別率達到科大訊飛語音輸入水平

教你用 Android 做二次開發,識別率達到科大訊飛語音輸入水平 | 原力計劃

作者 | Pek_KuaiJia

頭圖 | CSDN 下載自視覺中國

出品 | CSDN(ID:CSDNnews)

隨著目前用戶需求的精細化和智能化,很多時候我們需要在App內集成語音輸入模塊,為用戶提供語音輸入的功能。而科大訊飛語音作為行業內翹楚,識別結果相對準確,且訊飛自帶一套識別動畫,適合快速搭建模塊,廢話不多說,先看下效果圖。

教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划
教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

下面開始具體步驟

教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

申請key

百度搜索訊飛開放平臺,註冊賬號並實名認證,然後在產品中找到語音聽寫,可以領取90天試用包,商用需付費。接著打開控制檯,添加你需要使用訊飛SDK的應用,注意保存這裡的APPID,這個就是之後需要配置到APP中。

教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划
教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

下載SDK

在官網中找到資料庫,選擇你剛才添加的應用,下載在線語音識別SDK

教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

將加壓所得文件夾中libs下的Msc.jar文件複製到項目中的libs下

如果沒有就新建一個,複製完成後,右擊Msc.jar文件,選擇add as library,這裡後面獲取語音識別結果需要解析json,由於我使用的是gson,所以一併導入了;接著將下載下來的文件夾libs下兩個文件夾複製到你項目目錄的src/main/jniLibs,如果沒有該文件夾就新建一個;最後在你項目app目錄下新建assets文件夾,將下載下來的文件夾中assets中文件夾複製進去,至此,文件全部導入完成,放個整體項目文件結構圖。

教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

為語音聽寫添加權限

在mainfest.xml添加即可,注意Android6.0以上,讀取麥克風和獲取手機識別碼權限需要動態申請。

<code> 1 <uses-permission>
2
3 <uses-permission>
4
5 <uses-permission>
6
7 <uses-permission>
8
9 <uses-permission>
10
11 <uses-permission>/<code>
教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

配置APPID

在APP的Application的onCreate配置如下代碼,如果沒有application,也可以在需要用到這個功能的Activity的onCreate添加,注意“=”不能少

<code> 1public class MyApplication extends Application{
2
3 @Override
4 public void onCreate {
5 super.onCreate;
6 //注意這裡的“=”不能少
7 SpeechUtility.createUtility(getApplicationContext;, SpeechConstant.APPID + "=你的APPID");
8
9 }
10
11}
/<code>
教你用 Android 做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

在啟動語音識別模塊添加代碼

這裡的result就是語音轉換的結果字符串,可以通過iatDialog.setParameter配置語言,間隔時間(即多長時間不說話時視為結束)等,具體可參考官網文檔。

<code> 1private void changeIntoText {
2
3 // ②初始化有交互動畫的語音識別器
4 iatDialog = new RecognizerDialog(SearchMusicActivity.this, mInitListener);
5 //③設置監聽,實現聽寫結果的回調
6 int a = 1+2;
7
8 iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
9 iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
10
11 iatDialog.setListener(new RecognizerDialogListener {
12 String resultJson = "[";//放置在外邊做類的變量則報錯,會造成json格式不對(?)
13
14 @Override
15 public void onResult(RecognizerResult recognizerResult, boolean isLast) {
16 System.out.println("----------------- onResult -----------------");
17 if (!isLast) {
18 resultJson += recognizerResult.getResultString() + ",";
19 } else {
20 resultJson += recognizerResult.getResultString() + "]";
21 }
22
23 if (isLast) {
24 //解析語音識別後返回的json格式的結果
25 Gson gson = new Gson;
26 List<dictationresult> resultList = gson.fromJson(resultJson,
27 new TypeToken<list>> {
28 }.getType);
29 String result = "";
30 for (int i = 0; i < resultList.size - 1; i++) {
31 result += resultList.get(i).toString;

32 }
33
34 et_content.setText(result);
35 //獲取焦點
36 et_content.requestFocus;
37 //將光標定位到文字最後,以便修改
38 et_content.setSelection(result.length);
39 }
40 }
41
42 @Override
43 public void onError(SpeechError speechError) {
44 //自動生成的方法存根
45 speechError.getPlainDescription(true);
46 }
47 });
48 //開始聽寫,需將sdk中的assets文件下的文件夾拷入項目的assets文件夾下(沒有的話自己新建)
49 iatDialog.show;
50 }
51
52 private InitListener mInitListener = new InitListener {
53 @Override
54 public void onInit(int code) {
55 Log.d(TAG, "SpeechRecognizer init code = " + code);
56 if (code != ErrorCode.SUCCESS) {
57 Toast.makeText(SearchMusicActivity.this, "初始化失敗,錯誤碼:" + code, Toast.LENGTH_SHORT).show;
58 }
59 }
60 };
/<list>/<dictationresult>/<code>


分享到:


相關文章: