基於android的語音識別


1.注冊賬戶,添加應用

 

2.針對android平台的選擇應用,下載SDK

 

3.將SDK的libs下文件拷貝到工程的libs目錄下

4.添加用戶權限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <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"/>
    <uses-permission android:name="android.permission.CAMERA"/>

5.初始化語音配置對象

        //初始化語音配置對象,必須,這樣才能使用MSC語音服務
        SpeechUtility.createUtility(this, SpeechConstant.APPID+"=59454d78");

6.拷貝assets目錄下資源文件到android工程的assets目錄

 

7.識別代碼

       //創建語音識別對話框
        RecognizerDialog rd = new RecognizerDialog(this,null);
        //設置參數accent,language等參數
        rd.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//中文
        rd.setParameter(SpeechConstant.ACCENT,"mandarin");//普通話
        //設置回調接口
        rd.setListener(new RecognizerDialogListener() {
            @Override
            public void onResult(RecognizerResult recognizerResult, boolean b) {
                //獲取返回結果
                String  result = recognizerResult.getResultString();
                Log.e("result",result);
                Log.e("b",b+"");
            }

            @Override
            public void onError(SpeechError speechError) {

            }
        });
        //顯示對話框
        rd.show();

8.由於返回的是json字符串所以還得解析出來才能使用

result:{"sn":2,"ls":true,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0.00,"w":"?"}]}]}

9.解析Json字符串

        /**
         * 解析json串
         * @param result
         */
        protected String parseJsonData(String json) {
        // 使用Gson來解析Json串
            Gson gson = new Gson();
            VoiceBean bean = gson.fromJson(json, VoiceBean.class);
            ArrayList<WS> ws = bean.ws;
            StringBuffer sb = new StringBuffer();
            for (WS ws2 : ws) {
                String info = ws2.cw.get(0).w;
                sb.append(info);
            }
            return sb.toString();
    }


10.完整代碼

package com.example.chat;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.example.chat.VoiceBean.WS;
import com.google.gson.Gson;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;

public class MainActivity extends Activity {
    
    StringBuffer strbuf;
    ListView mlv;
    private List<TalkBean> lists;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化語音配置對象,必須,這樣才能使用MSC語音服務
        SpeechUtility.createUtility(this, SpeechConstant.APPID+"=59454d78");
        mlv = (ListView) findViewById(R.id.lv);
        lists = new ArrayList<TalkBean>();
        
    }
    
       public void click(View view){
            //創建語音識別對話框
            RecognizerDialog rd = new RecognizerDialog(this,null);
            //設置參數accent,language等參數
            rd.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//中文
            rd.setParameter(SpeechConstant.ACCENT,"mandarin");//普通話
            strbuf = new StringBuffer();
            //設置回調接口
            rd.setListener(new RecognizerDialogListener() {
                
                @Override
                public void onResult(RecognizerResult arg0, boolean arg1) {
                    // TODO Auto-generated method stub
                    String  result = arg0.getResultString();
                    String data = parseJsonData(result);
                    Log.e("data",data);
                  
                    strbuf.append(data);
                    if(arg1){//回話結束
                        String voice = strbuf.toString();
                        Log.e("result",voice);
                    }
                    
                    Log.e("b",arg1+"");
                }
                
                @Override
                public void onError(SpeechError arg0) {
                    // TODO Auto-generated method stub
                    
                }
            });
            //顯示對話框
            rd.show();
        }
        /**
         * 解析json串
         * @param result
         */
        protected String parseJsonData(String json) {
        // 使用Gson來解析Json串
            Gson gson = new Gson();
            VoiceBean bean = gson.fromJson(json, VoiceBean.class);
            ArrayList<WS> ws = bean.ws;
            StringBuffer sb = new StringBuffer();
            for (WS ws2 : ws) {
                String info = ws2.cw.get(0).w;
                sb.append(info);
            }
            return sb.toString();
    }

 

 

11.運行結果展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM