天天看點

第三方SDK:訊飛語音聽寫

名詞 解釋
 語音合成    将一段文字轉換為成語音,可根據需要合成出不同音色、語速和語調的聲音,讓機器像人一樣開口說話。
 語音聽寫
	将一段語音轉換成文本,把語音中包含文字資訊提取出來,并可以優先識别使用者手機特有的聯系人和個性化資料。
 文法識别	判斷使用者所說的内容是否與預定義的文法相符合,主要用于識别使用者是否下達某項指令,使用文法識别前,需要先定義文法。
 語義了解
	在語音聽寫基礎上,分析了解使用者的說話意圖,傳回結構化的指令資訊。開發者可在語義開放平台定義專屬的問答格式。
  語音評測 	通過智能語音技術自動對發音水準進行評價,給出使用者綜合得分和發音資訊。
 聲紋密碼	
	據語音波形反映說話人生理和行為特征的語音參數,自動識别說話人身份,聲紋識别所提供的安全性可與其他生物識别技術(指紋、掌形和虹膜)相媲美。
 人臉識别	
	基于人的臉部特征資訊進行身份識别的一種生物識别技術,可以自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行檢測和驗證。系統同時支援人臉關鍵點檢出、視訊流人臉檢測等功能,識别率高達99%。
           
1 語音聽寫:将我們說的話轉換成文字形式出來
           
先看布局顯示:
           
<img src="https://img-blog.csdn.net/20160310235136322?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
           
實作步驟:
           
 * 訊飛語音的聽寫 
 * 1 準備工作:導入jar+.so檔案 ;添權重限 ; 初始化 語音配置
 * 2 建立并初始化RecognizerDialog
 * 3 建立監聽器RecognizerDialogListener
           
1 準備工作<pre class="plain" name="code" snippet_file_name="blog_20160310_11_5003023" code_snippet_id="1605551">	 官網注冊拿到appId
           
下載下傳sdk,将Msc.jar 和armeabi檔案夾放到項目的lib檔案夾中
           
配置權限:直接copy sdk中的即可;
           
初始化 語音配置
           
見圖:
           
<img src="https://img-blog.csdn.net/20160310234258045?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
           
<img src="https://img-blog.csdn.net/20160310234315889?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
           
<pre name="code" class="html">    <!-- 科大訊飛   start-->
    <!-- 連接配接網絡權限,用于執行雲端語音能力 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 擷取手機錄音機使用權限,聽寫、識别、語義了解需要用到此權限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 讀取網絡資訊狀态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 擷取目前wifi狀态 -->
    <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" />
    <!--下面3個權限有空格導緻報錯,記得去掉空格 -->
    <!-- 外存儲寫權限,建構文法需要用到此權限 -->
    <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" />
     <!-- 科大訊飛   end-->
           
package com.baidu.speechrecognizer01;

import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechUtility;

import android.app.Application;

public class MyApplication extends Application {
	@Override
	public void onCreate() {
		SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID+"=56dfe2f2");
		super.onCreate();
	}
}
           

2 建立并初始化RecognizerDialog 3 建立監聽器RecognizerDialogListener

其中JsonParser.java是從sdk中copy過來的。
           
<pre name="code" class="java">package com.baidu.speechrecognizer01;

import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/*
 * 訊飛語音的聽寫 
 * 1 準備工作:導入jar+.so檔案 ;添權重限 ; 初始化 語音配置
 * 2 建立并初始化RecognizerDialog
 * 3 建立監聽器RecognizerDialogListener
 */
public class MainActivity extends Activity {

	public String tag = "MainActivity";
	public String text;
	public TextView textView;
	private Button btn;
	public Context context = MainActivity.this;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView = (TextView) findViewById(R.id.textView);
		btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				initRecognizerDialog();
			}
		});
	}

	private void initRecognizerDialog() {
		// 1.建立RecognizerDialog對象
		RecognizerDialog mDialog = new RecognizerDialog(context, initListener);
		// 2.設定accent、language等參數
		mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
		mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
		// 若要将UI控件用于語義了解,必須添加以下參數設定,設定之後onResult回調傳回将是語義了解//結果
		// mDialog.setParameter("asr_sch", "1");
		// mDialog.setParameter("nlp_version", "2.0");
		// 3.設定回調接口
		mDialog.setListener(mRecognizerDialogListener);
		// 4.顯示dialog,接收語音輸入
		mDialog.show();
		text = "";
	}

	InitListener initListener = new InitListener() {

		@Override
		public void onInit(int code) {
			if (code != ErrorCode.SUCCESS) {
				Toast.makeText(context, "監聽器初始化錯誤,錯誤代碼=" + code,
						Toast.LENGTH_SHORT).show();
			}
		}
	};

	RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {

		@Override
		public void onResult(RecognizerResult result, boolean isLast) {
			String json = result.getResultString();
			String content = JsonParser.parseIatResult(json);
			text += content;
			Log.d(tag, "###content=" + content);
			textView.setText(text);
		}

		@Override
		public void onError(SpeechError error) {
			Toast.makeText(context, error.getErrorDescription(),
					Toast.LENGTH_SHORT).show();
		}
	};
}
           

繼續閱讀