图灵机器人快速接入教程

图灵机器人快速接入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();
    }
}
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值