图灵机器人快速接入教程

时间:2022-03-27 22:14:04

图灵机器人快速接入Android APP教程

修改日期:160806,
急用的直接下项目TulingDemo

准备:

0、创建安卓或ios项目,让开发工具先编译环境,利用这段时间打开浏览器完成注册什么的
1、注册登录,创建机器人
2、在机器人昵称右侧 有个“查看详情” ,进去按电脑键盘“end”键,到页面末尾,下载安卓或者ios文档;
3、解压缩下载的文件。苹果的我不清楚,安卓的解压缩,把libs这个文件夹复制到项目中,位置自己决定,能把各种jar包添加依赖即可
4、添加好以后,让他编译,利用这段时间,进入百度语音 创建应用,把三个key值保存到项目常量类中 ;对照官方文档之后的操作请对照官方文档吧,他们说不定啥时候会更新 这是文档 ,一步一步走;添加权限,添加代码什么的(文档中有纰漏,权限没写好,直接复制我的吧
<uses-ermissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /> </br> 

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
//如果需要使用蓝牙设备作为输入源, 需要额外在AndroidManifest.xml 文件添加下列权限:-
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" /> </br> 

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
请在程序清单添加上)
5、注意:配置分为语音识别、语义理解、语音合成三大模块
6、我在application中完成了三部分的初始化,包括监听,然后懵逼的发现他们没有解耦…………

注意事项

1、如果报错:java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file “/data/data/com.czh.assistant/files/instant-run/dex/slice-volley_fb8c39d7ceaeba89900705620c454ab7fe731a84-classes.dex”, dex file “/data/data/ 以上是由于so’文件加载失败造成,解决方案:
在module级别的gradle文件,android级别标签(花括号)添加如下标签,方括号里面的路径一定要看准了,差一级菜单都没用;

 sourceSets {
main {
jniLibs.srcDirs = ['src/main/java/jniLibs']
jni.srcDirs = [] // This prevents the auto generation of Android.mk
}}

原文解决方案点击这里
识别返回码处理
{“code”:40002,”text”:”亲爱的,不明白你说的什么意思。”}
{“code”:200000,”text”:”亲,已帮你找到图片”,”url”:”http:\/\/m.image.so.com\/i?q=%E7%BE%8E%E5%A5%B3”}

近期上代码,今天没时间了
160809:添加代码,如果想免去自己写代码的麻烦,快速出效果,请复制代码:
布局文件
<?xml version="1.0" encoding="utf-8"?> <br><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.MainActivity">

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="reqVoice"
android:text="开始识别" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="stopVoice"
android:text="结束识别" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="introduce"
android:text="介绍晨之晖" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="bequiet"
android:text="一键静音" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="cover"
android:text="恢复音量" />

</LinearLayout>
activity :


/*************************************************
* @desc 改包名 com.czh.myrob
* 1 语义识别解析 :requestTuringAPI(String requestInfo)
* 2 语音合成播报:TTSManager.startTTS(String ttsContent)
* 3
* @auther LiJianfei
* @time 2016/8/6 9:41
************************************/

public class MainActivity extends BaseActivity {
private InitListener initListener;
private TuringApiManager m;
private TTSListener ttsListener;
private TTSManager ttsManager;
private VoiceRecognizeManager voiceRecognizeManager;
private String ttsString;// 将要播报的语音
private AudioManager audioManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0);
setRecognize();
}

/**
* 启动语音识别
*
* @param v
*/
public void reqVoice(View v) {
voiceRecognizeManager.startRecognize();// 开始收集语音
showSnack(v, "语音识别已启动");
}

public void stopVoice(View v) {
voiceRecognizeManager.stopRecognize();
showSnack(v, "语音识别已关闭");
}

public void introduce(View v) {
m.requestTuringAPI("晨之晖");
// showSnack(v, "语音识别已关闭");
}

public void bequiet(View v) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
// showSnack(v, "语音识别已关闭");
}

public void cover(View v) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0);
// showSnack(v, "语音识别已关闭");
}


private void initTuling() {
/**
*E 初始化图灵组件
*/
SDKInitBuilder sdkInitBuilder = new SDKInitBuilder(this);
sdkInitBuilder.context = this;
sdkInitBuilder.setTuringKey(Constant.TULING_KEY);
sdkInitBuilder.setSecret(Constant.TULING_SECRET);
sdkInitBuilder.setUniqueId(Constant.UniqueId);
SDKInit.init(sdkInitBuilder, initListener);
}


private void setRecognize() {
// A 初始化ASR语音识别状态监听
VoiceRecognizeListener listener = new VoiceRecognizeListener() {
@Override
public void onStartRecognize() {
// DebugLogUtil.getInstance().Info("onStartRecognize=");
}

@Override
public void onRecordStart() {
// DebugLogUtil.getInstance().Info("onRecordStart=");
}

@Override
public void onRecordEnd() {
DebugLogUtil.getInstance().Info("onRecordEnd=");
}

@Override
public void onRecognizeResult(String s) {
// 获取识别结果,在步骤2里listener的回调方法onRecognizeResult中获取识别结果。然后传入语义解析
m.requestTuringAPI(s);
DebugLogUtil.getInstance().Info("onRecognizeResult 获取语音识别结果=" + s);
}

@Override
public void onRecognizeError(String s) {
// TODO 这里应该做人性化判断 提醒用户说话
if (s == null || s.equals("") || s.equals("没有说话")) {
ttsManager.startTTS("亲,说两句呗");
}
DebugLogUtil.getInstance().Info("onRecognizeError=" + s);
}

@Override
public void onVolumeChange(int i) {
DebugLogUtil.getInstance().Info("onVolumeChange=" + i);
}
};
// 初始化百度语音
voiceRecognizeManager = new VoiceRecognizeManager(this, Constant.BDtuisongAPIKey, Constant.BDtuisongSecret_Key);
// 设定ASR状态监听
voiceRecognizeManager.setVoiceRecognizeListener(listener);
/*B 网络请求状态监听*/
final HttpConnectionListener httpConnectionListener = new HttpConnectionListener() {
@Override
public void onError(ErrorMessage errorMessage) {
DebugLogUtil.getInstance().Info("网络请求监听onError");
}

@Override
public void onSuccess(RequestResult requestResult) {
// TODO 在这里应该做解析和判断
ttsString = requestResult.getContent().toString();
String text;
String code;
String url;
JSONObject object = (JSONObject) requestResult.getContent();
try {
code = object.getString("code");
if (code.equals(200000)) {// 解析图片和其他生活帮助等信息返回的页面
url = object.getString("url");
}
text = object.getString("text");
ttsManager.startTTS(text);// 合成 播报
} catch (JSONException e) {
e.printStackTrace();
DebugLogUtil.getInstance().Info("objec解析失败");
}

DebugLogUtil.getInstance().Info(requestResult.getType() + "网络请求成功" + requestResult.getContent());
}
};
/*C 组件状态监听*/
initListener = new InitListener() {
@Override
public void onComplete() {

// 实例化TuringApiManager类
m = new TuringApiManager(App.getInstance());
m.setHttpListener(httpConnectionListener);
}

@Override
public void onFail(String s) {
DebugLogUtil.getInstance().Error("图灵初始化onFail");
}
};
initTTSListner();

}

/**
* 2 初始化语音识别
*/
private void initTTSListner() {
/*D 初始化语音合成监听*/
ttsListener = new TTSListener() {
@Override
public void onSpeechStart() {
DebugLogUtil.getInstance().Error("语音识别onSpeechStart");
}

@Override
public void onSpeechProgressChanged() {
// DebugLogUtil.getInstance().Error("语音识别onSpeechProgressChanged");
}

@Override
public void onSpeechPause() {
DebugLogUtil.getInstance().Error("语音识别onSpeechPause");
}

@Override
public void onSpeechFinish() {
/*语音合成后,就会触发onSpeechFinish(),这样即可在其方法中添加相应的逻辑。*/
DebugLogUtil.getInstance().Error("语音识别结束Finish");
// TODO 能在这里调用语音识别 不用再按启动语音识别吗 能!
voiceRecognizeManager.startRecognize();// 重新开始收集语音
}

@Override
public void onSpeechError(int i) {
DebugLogUtil.getInstance().Error("语音识别onSpeechError" + i);
}

@Override
public void onSpeechCancel() {
DebugLogUtil.getInstance().Error("语音识别 onSpeechCancel");
}
};
ttsManager = new TTSManager(this, Constant.BDtuisongAPIKey, Constant.BDtuisongSecret_Key);
ttsManager.setTTSListener(ttsListener);
initTuling();// 最后调用这里
}

@Override
protected void onPause() {
// 退出界面要提升系统音量 最完美的应该是进入时判断目前音量 退出app时 恢复这个音量!
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0);
super.onPause();
}
}