名词 解释
语音合成 将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。
语音听写
将一段语音转换成文本,把语音中包含文字信息提取出来,并可以优先识别用户手机特有的联系人和个性化数据。
语法识别 判断用户所说的内容是否与预定义的语法相符合,主要用于识别用户是否下达某项指令,使用语法识别前,需要先定义语法。
语义理解
在语音听写基础上,分析理解用户的说话意图,返回结构化的指令信息。开发者可在语义开放平台定义专属的问答格式。
语音评测 通过智能语音技术自动对发音水平进行评价,给出用户综合得分和发音信息。
声纹密码
据语音波形反映说话人生理和行为特征的语音参数,自动识别说话人身份,声纹识别所提供的安全性可与其他生物识别技术(指纹、掌形和虹膜)相媲美。
人脸识别
基于人的脸部特征信息进行身份识别的一种生物识别技术,可以自动在图像中检测和跟踪人脸,进而对检测到的人脸进行检测和验证。系统同时支持人脸关键点检出、视频流人脸检测等功能,识别率高达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();
}
};
}