Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 開發基於百度語音識別技術的小程序

Android 開發基於百度語音識別技術的小程序

編輯:關於Android編程

Android 開發基於百度語音識別技術的小程序

百度開發者平台為開發者提供了很多工具,雖然我對百度無感,但是因為有了這些工具,使我們開發程序更加快捷、便利。本文將會簡單介紹如何使用百度語音識別技術豐富我們自己的程序。

背景介紹

隨著大家對Siri 的認知,語音識別技術被應用的越來越廣泛。對於一個普通開發者而言,是沒有精力去開發一個語音識別的模塊的,所以利用現有的技術來實現是最好的選擇。
在下面,我們將會介紹如將百度提供的語音識別技術應用到我們自己的項目中。

准備工作

首先需要在百度的網站上注冊成為一個名開發者。無論是用使用微信提供的接口,還是百度提供的,首先都去官網注冊成為一名開發者。

然後新建自己的應用,並且給自己的應用添加語音識別的功能,這個時候百度會按照你的ID給你生成兩個Key,一個是API Key,一個是Secret Key,這兩個Key 是需要用在你自己的應用程序中的。

這裡寫圖片描述

然後去下載頁面去下載響應的Android SDK 和一些文檔。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="利用sdk-進行開發">利用SDK 進行開發

首先新建一個項目,然後將開發包中的 Libs 目錄整體 Copy 到工程目錄, Libs 目錄包括了各平台的 SO 庫, 開發者視應用需要可以進行刪減。

然後在工程中添加權限:











因為百度將語音識別技術集成在BaiduASRDigitalDialog 中,然後通過調用這個Dialog 來做處理。並且通過DialogRecognitionListener 來做消息的響應。所以我們需要新建這兩個對象:

private BaiduASRDigitalDialog mDialog = null;
private DialogRecognitionListener mRecognitionListener;

我的程序是通過點擊一個按鈕後,調出語音識別對話框的,代碼如下:

public void ClickButton(View v){
    //Toast.makeText(getApplicationContext(), "測試",  Toast.LENGTH_SHORT).show();
    mCurrentTheme = Config.DIALOG_THEME;
    if (mDialog != null) {
        mDialog.dismiss();
    }
    Bundle params = new Bundle();
    params.putString(BaiduASRDigitalDialog.PARAM_API_KEY,          "QRrYgx7bcO11NWUFFG61jtBN");
    params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, "iRNUTBM9Tli0px1HqqyYLtdMdy95ChGz");
    params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);
    mDialog = new BaiduASRDigitalDialog(this, params);
    mDialog.setDialogRecognitionListener(mRecognitionListener);
    mDialog.show();
}

當進行完識別後,還需要對識別後的結果作出響應。可以看到上面的代碼有一個setDialogRecognitionListener這個函數來做對響應的監聽。

下面是我首先的相應監聽函數:

mRecognitionListener = new DialogRecognitionListener() {
    @Override
    public void onResults(Bundle results) {
      ArrayList rs = results != null ? results
                    .getStringArrayList(RESULTS_RECOGNITION) : null;
            if (rs != null && rs.size() > 0) {
               //setBackgroundColor(rs.get(0));
                setPicture(rs.get(0));
            }

        }
    };

當做完對語音的識別後,百度服務器會返回一個對應的字符串組rs,取出rs的第一個詞,來作為結果。

百度對這個語音識別Dialog 分裝的很好,非常利於開發者使用,過程就是:
調出BaiduASRDigitalDialog 對象,該對象負責了錄音已經上傳到服務器中去做處理,得到的結果在DialogRecognitionListener 中予以響應。

我的例子

我做了個簡單的例子,你說“蘋果”、“梨”、“草莓”、“香蕉”後會將ImageView 設置成對應的圖片。首先打開程序後是圖一:
這裡寫圖片描述

點擊按鈕後,彈出對話框,說“香蕉”,畫面會改變為香蕉的圖片。
這裡寫圖片描述

下面是MainActivity的代碼:

package com.example.voicecontrol;
import java.util.ArrayList;
import android.R.drawable;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog;
import com.baidu.voicerecognition.android.ui.DialogRecognitionListener;

public class MainActivity extends Activity {

private BaiduASRDigitalDialog mDialog = null;

private DialogRecognitionListener mRecognitionListener;

private int mCurrentTheme = Config.DIALOG_THEME;

private Button button;
private ImageView iw;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button)findViewById(R.id.VoiceControl);
    iw = (ImageView)findViewById(R.id.Iv);

    mRecognitionListener = new DialogRecognitionListener() {

        @Override
        public void onResults(Bundle results) {
            ArrayList rs = results != null ? results
                    .getStringArrayList(RESULTS_RECOGNITION) : null;
            if (rs != null && rs.size() > 0) {
               //setBackgroundColor(rs.get(0));
                setPicture(rs.get(0));
            }

        }
    };
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


public void ClickButton(View v){
    //Toast.makeText(getApplicationContext(), "測試",  Toast.LENGTH_SHORT).show();
    mCurrentTheme = Config.DIALOG_THEME;
    if (mDialog != null) {
        mDialog.dismiss();
    }
    Bundle params = new Bundle();
    params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, "QRrYgx7bcO11NWUFFG61jtBN");
    params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, "iRNUTBM9Tli0px1HqqyYLtdMdy95ChGz");
    params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME);
    mDialog = new BaiduASRDigitalDialog(this, params);
    mDialog.setDialogRecognitionListener(mRecognitionListener);


    mDialog.show();
}


/*
 * 做處理響應的函數,按鈕顏色的變化
 */

/*public void setBackgroundColor(String color){
    if(color.contains("藍色")){
        button.setBackgroundColor(Color.BLUE);
    }
    else if(color.contains("綠色")){
        button.setBackgroundColor(Color.GREEN);
    }
    else if(color.contains("白色")){
        button.setBackgroundColor(Color.WHITE);
    }
}*/

/*
 * 做處理響應的函數,圖片變化
 */
public void setPicture(String fruit){
    if(fruit.contains("蘋果")){
        iw.setImageDrawable(getResources().getDrawable(R.drawable.apple));
    }
    else if(fruit.contains("梨")){
        iw.setImageDrawable(getResources().getDrawable(R.drawable.pear));
    }
    else if(fruit.contains("香蕉")){
        iw.setImageDrawable(getResources().getDrawable(R.drawable.banana));
    }
    else if(fruit.contains("草莓")){
        iw.setImageDrawable(getResources().getDrawable(R.drawable.strawberry));
    }
    else {
        iw.setImageDrawable(getResources().getDrawable(R.drawable.questionmark));
    }

}    
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved