图灵+百度语音 聊天机器人 移植小结

第一次接触语音识别还是2010年的时候,我帮一个靠语音算法创业的同学移植了他的语音引擎到一款嵌入式产品上去。

当时他做的引擎识别率还可以,但不够智能还需要找一些人来录音学习,也是那个时候知道了科大讯飞;


总结下刚刚移植的这个语音机器人(android平台)

因为用到了图灵的知识库,百度的语音识别和语音合成,所以需要去申请相应的key和下载相应的SDK库代码

1)去图灵注册申请一个key和secret

2) 去百度注册申请一个key和secret


同时只要在图灵上下载SDK包就可以,第一次移植不用去下载更新百度的库,不然可能会带来一些其他问题,代码也非常简单,有相应注释一看基本上都明白大概意思。

MainActivity.java

package com.turing.demo;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;

import com.turing.androidsdk.HttpRequestListener;
import com.turing.androidsdk.RecognizeListener;
import com.turing.androidsdk.RecognizeManager;
import com.turing.androidsdk.TTSListener;
import com.turing.androidsdk.TTSManager;
import com.turing.androidsdk.TuringManager;

public class MainActivity extends Activity {

    private final String TAG = MainActivity.class.getSimpleName();
    private TTSManager mTtsManager;
    private RecognizeManager mRecognizerManager;
    private TuringManager mTuringManager;
    private TextView mStatus;
    /** 返回结果,开始说话 */
    public static final int MSG_SPEECH_START = 0;
    /** 开始识别 */
    public static final int MSG_RECOGNIZE_RESULT = 1;
    /** 开始识别 */
    public static final int MSG_RECOGNIZE_START = 2;

    /**
     * 申请的turing的apikey(测试使用)
     * **/
    private final String TURING_APIKEY = "d975f8141aa550cea27b7f48dd50c48d";
    /**
     * 申请的secret(测试使用)
     * **/
    private final String TURING_SECRET = "4145a1cb5f92901b";
    // 百度key(测试使用)
    private final String BD_APIKEY = "ZC2NNfFUkg8rxgmVkfBC6ycX";
    // 百度screte(测试使用)
    private final String BD_SECRET = "9a98e53b2ef7339bf03793f0b53fc7e4";

    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case MSG_SPEECH_START:
                mStatus.setText("开始讲话:" + (String) msg.obj);
                mTtsManager.startTTS((String) msg.obj);
                break;
            case MSG_RECOGNIZE_RESULT:
                mStatus.setText("识别结果:" + msg.obj);
                mTuringManager.requestTuring((String) msg.obj);
                break;
            case MSG_RECOGNIZE_START:
                mStatus.setText("开始识别");
                mRecognizerManager.startRecognize();
                break;
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mStatus = (TextView) findViewById(R.id.tv_status);

        init();

    }

    /**
     * 初始化turingSDK、识别和tts
     * 
     */
    private void init() {
       
        mRecognizerManager = new RecognizeManager(this, BD_APIKEY, BD_SECRET);
        mTtsManager = new TTSManager(this, BD_APIKEY, BD_SECRET);
        mRecognizerManager.setVoiceRecognizeListener(myVoiceRecognizeListener);
        mTtsManager.setTTSListener(myTTSListener);
        mTuringManager = new TuringManager(this, TURING_APIKEY,
                TURING_SECRET);
        mTuringManager.setHttpRequestListener(myHttpConnectionListener);
        mTtsManager.startTTS("你好啊");
    }

    /**
     * 网络请求回调
     */
    HttpRequestListener myHttpConnectionListener = new HttpRequestListener() {

        @Override
        public void onSuccess(String result) {
            if (result != null) {
                try {
                    Log.d(TAG, "result" + result);
                    JSONObject result_obj = new JSONObject(result);
                    if (result_obj.has("text")) {
                        Log.d(TAG, result_obj.get("text").toString());
                        mHandler.obtainMessage(MSG_SPEECH_START,
                                result_obj.get("text")).sendToTarget();
                    }
                } catch (JSONException e) {
                    Log.d(TAG, "JSONException:" + e.getMessage());
                }
            }
        }

        @Override
        public void onFail(int code, String error) {
            Log.d(TAG, "onFail code:" + code + "|error:" + error);
            mHandler.obtainMessage(MSG_SPEECH_START, "网络慢脑袋不灵了").sendToTarget();
        }
    };

    /**
     * 语音识别回调
     */
    RecognizeListener myVoiceRecognizeListener = new RecognizeListener() {

       

        @Override
        public void onStartRecognize() {
            // 仅针对百度回调
        }

        @Override
        public void onRecordStart() {

        }

        @Override
        public void onRecordEnd() {

        }

        @Override
        public void onRecognizeResult(String result) {
            Log.d(TAG, "识别结果:" + result);
            if (result == null) {
                mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);
                return;
            }
            mHandler.obtainMessage(MSG_RECOGNIZE_RESULT, result).sendToTarget();
        }

        @Override
        public void onRecognizeError(String error) {
            Log.e(TAG, "识别错误:" + error);
            mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);
        }
    };

    /**
     * TTS回调
     */
    TTSListener myTTSListener = new TTSListener() {

        @Override
        public void onSpeechStart() {
            Log.d(TAG, "onSpeechStart");
        }

        @Override
        public void onSpeechProgressChanged() {

        }

        @Override
        public void onSpeechPause() {
            Log.d(TAG, "onSpeechPause");
        }

        @Override
        public void onSpeechFinish() {
            Log.d(TAG, "onSpeechFinish");
            mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);
        }

        @Override
        public void onSpeechError(int errorCode) {
            Log.d(TAG, "onSpeechError:" + errorCode);
            mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);
        }

        @Override
        public void onSpeechCancel() {
            Log.d(TAG, "TTS Cancle!");
        }
    };
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.turing.demo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />
    <!-- SDK必须 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 语音识别、合成 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>






但是提供的文档里面有两个接口函数如下的定义描述实际上是搞反了

需要注意下

//停止语音识别操作,代表手动触发用户发音结束事件

- (void)stopRecognize;

//取消正在进行的语音识别操作

- (void)cancleRecognize;








Unity是一款强大的跨平台游戏引擎,它可以用于开发各种类型的游戏和交互式应用程序。Baidu语音识别是百度提供的一种技术,它能够通过分析用户的语音输入,将其转化为文字。这种功能可以在Unity中使用,使得开发者可以为他们的游戏和应用程序添加语音识别的功能。这样,用户可以通过语音与游戏或应用程序进行交互,使得体验更加丰富和便捷。 另外,Unity还可以与图灵聊天机器人API进行集成。图灵聊天机器人是一种人工智能软件,它可以模拟人类的对话,回答用户提出的问题或者进行对话交流。通过在Unity中集成图灵聊天机器人,开发者可以为他们的游戏或应用程序实现自动对话的功能。这样,用户可以与虚拟角色进行对话,获取相关的信息或者进行娱乐。 最后,Baidu语音合成是一种将文字转化为语音的技术。它可以将开发者提供的文字转化为生动自然的语音。在Unity中集成Baidu语音合成,可以让开发者为游戏或应用程序的角色添加语音,使得角色可以进行语音对话或者朗读相关的文字。这样,用户可以通过听到角色的语音来获得更加真实和沉浸式的体验。 综上所述,Unity可以与Baidu语音识别、图灵聊天机器人以及Baidu语音合成进行集成,提供语音识别、自动对话和语音合成的功能。通过这些功能的应用,开发者可以为他们的游戏和应用程序创建更加交互和丰富的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值