天天看點

使用科大訊飛的語音技術實作語音識别

目前,越來越多的app已經使用到了語音技術,無論是語音合成,語音識别,還是語義等,有時,為app增加語音技術,就可能為自己多增加一份市場使用者,這裡就科大訊飛的語音識别的代碼調用做個介紹。 

科大訊飛的語音服務是以SDK的形式提供的,就android平台來說,有三個SDK,現在以其中的彈出dialog的SDK為例。SDK在官網( http://open.voicecloud.cn/ )下載下傳,解壓之後有幾個檔案夾,分别如下: 

使用科大訊飛的語音技術實作語音識别

1 bin檔案夾下面的是SpeechDemo.apk,可以直接安裝到手機上體驗 

2 doc檔案夾下面是開發文檔,有主要的接口描述和參數介紹 

3 自己開發的話,需要引入一個jar包和一個so庫,lib檔案夾下面就是你的appid對應的so庫和jar包 

4 sample裡面是一個工程,可以直接導入到eclipse裡面,裡面是主要接口的使用示例,run之後,也就是bin下面的SpeechDemo了

好了,廢話不多說,直接建一個自己的工程,開始試一下使用這個服務吧!

建立一個工程,裡面本身就有一個MainActivity和activity_main.xml,修改一下布局檔案,添加一個按鈕:

<Button 
  android:id="@+id/startRecognizer"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="startRecognizer"/>

<TextView
  android:id="@+id/result"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="result:"
  android:layout_below="@id/startRecognizer" />      

android上有三個sdk,分别有三個功能,三個sdk的差別參見 http://club.voicecloud.cn/forum.php?mod=viewthread&tid=6843 

現在就以有界面的SDk為例,使用時,需要用到的是開發包中的msc.jar和libmsc.so,将libms.so放到工程中的libsarmeabi檔案夾下(根據cpu型号選擇放哪個庫),将msc.jar放到工程中的libs檔案夾下。

在MainActivity中添加按鈕的點選事件,具體代碼如下:

package com.personal.iflytekdemo;

import com.iflytek.cloud.speech.RecognizerResult; 

import com.iflytek.cloud.speech.SpeechConstant; 

import com.iflytek.cloud.speech.SpeechError; 

import com.iflytek.cloud.speech.SpeechListener; 

import com.iflytek.cloud.speech.SpeechUser; 

import com.iflytek.cloud.ui.RecognizerDialog; 

import com.iflytek.cloud.ui.RecognizerDialogListener;

import android.os.Bundle; 

import android.app.Activity; 

import android.view.Menu; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.widget.TextView; 

import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

private RecognizerDialog myDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  findViewById(R.id.startRecognizer).setOnClickListener(this);
  SpeechUser.getUser().login(MainActivity.this, null, null, "appid=xxxxxxxx", loginListener);
}

@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;
}

@Override
public void onClick(View v) {
  // TODO Auto-generated method stub
  switch(v.getId())
  {
  case R.id.startRecognizer:
    myRecognize();
    break;
  default :
    break;

  }
}

private SpeechListener loginListener = new SpeechListener(){

  @Override
  public void onCompleted(SpeechError error) {
    // TODO Auto-generated method stub
    if(error!=null)
      Toast.makeText(MainActivity.this,"login failed", Toast.LENGTH_SHORT).show();
    else
      Toast.makeText(MainActivity.this,"login success", Toast.LENGTH_SHORT).show();
  }

  @Override
  public void onData(byte[] arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public void onEvent(int arg0, Bundle arg1) {
    // TODO Auto-generated method stub

  }

};

private void myRecognize()
{
  myDialog =new RecognizerDialog(this);
  //設定引擎為轉寫
  myDialog.setParameter(SpeechConstant.DOMAIN, "iat");
  //設定識别語言為中文
  myDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
  //設定方言為國語
  myDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
  //設定錄音采樣率為
  myDialog.setParameter(SpeechConstant.SAMPLE_RATE, "16000");
  //設定監聽對象
  myDialog.setListener(recognizerDialogListener);
  //開始識别
  myDialog.show();
}

private RecognizerDialogListener recognizerDialogListener = new RecognizerDialogListener(){

  @Override
  public void onError(SpeechError error) {
    // TODO Auto-generated method stub

  }

  @Override
  public void onResult(RecognizerResult result, boolean isLast) {
    // TODO Auto-generated method stub
    ((TextView)findViewById(R.id.result)).append(result.getResultString());
  }

};
           

}

然後,在AndroidManifest.xml中添加以下權限:

使用科大訊飛的語音技術實作語音識别

好了,最後就開始運作吧,一下是筆者運作結果截圖: 

使用科大訊飛的語音技術實作語音識别
使用科大訊飛的語音技術實作語音識别

傳回的結果是json格式的,接下來就是需要你來解析傳回的json結果了,具體的解析方法,在sample裡面的demo工程中也有,可以參見官網上下載下傳的開發包中demo工程中的com.iflytek.mscdemo.util.JsonParser.java 

到此為止,就哦了,開始體驗你的語音之旅吧!

繼續閱讀