打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

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


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

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

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

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


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

MainActivity.java

  1. package com.turing.demo;  
  2.   
  3. import org.json.JSONException;  
  4. import org.json.JSONObject;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.os.Handler;  
  9. import android.util.Log;  
  10. import android.widget.TextView;  
  11.   
  12. import com.turing.androidsdk.HttpRequestListener;  
  13. import com.turing.androidsdk.RecognizeListener;  
  14. import com.turing.androidsdk.RecognizeManager;  
  15. import com.turing.androidsdk.TTSListener;  
  16. import com.turing.androidsdk.TTSManager;  
  17. import com.turing.androidsdk.TuringManager;  
  18.   
  19. public class MainActivity extends Activity {  
  20.   
  21.     private final String TAG = MainActivity.class.getSimpleName();  
  22.     private TTSManager mTtsManager;  
  23.     private RecognizeManager mRecognizerManager;  
  24.     private TuringManager mTuringManager;  
  25.     private TextView mStatus;  
  26.     /** 返回结果,开始说话 */  
  27.     public static final int MSG_SPEECH_START = 0;  
  28.     /** 开始识别 */  
  29.     public static final int MSG_RECOGNIZE_RESULT = 1;  
  30.     /** 开始识别 */  
  31.     public static final int MSG_RECOGNIZE_START = 2;  
  32.   
  33.     /** 
  34.      * 申请的turing的apikey(测试使用) 
  35.      * **/  
  36.     private final String TURING_APIKEY = "d975f8141aa550cea27b7f48dd50c48d";  
  37.     /** 
  38.      * 申请的secret(测试使用) 
  39.      * **/  
  40.     private final String TURING_SECRET = "4145a1cb5f92901b";  
  41.     // 百度key(测试使用)  
  42.     private final String BD_APIKEY = "ZC2NNfFUkg8rxgmVkfBC6ycX";  
  43.     // 百度screte(测试使用)  
  44.     private final String BD_SECRET = "9a98e53b2ef7339bf03793f0b53fc7e4";  
  45.   
  46.     private Handler mHandler = new Handler() {  
  47.         public void handleMessage(android.os.Message msg) {  
  48.             switch (msg.what) {  
  49.             case MSG_SPEECH_START:  
  50.                 mStatus.setText("开始讲话:" + (String) msg.obj);  
  51.                 mTtsManager.startTTS((String) msg.obj);  
  52.                 break;  
  53.             case MSG_RECOGNIZE_RESULT:  
  54.                 mStatus.setText("识别结果:" + msg.obj);  
  55.                 mTuringManager.requestTuring((String) msg.obj);  
  56.                 break;  
  57.             case MSG_RECOGNIZE_START:  
  58.                 mStatus.setText("开始识别");  
  59.                 mRecognizerManager.startRecognize();  
  60.                 break;  
  61.             }  
  62.         };  
  63.     };  
  64.   
  65.     @Override  
  66.     protected void onCreate(Bundle savedInstanceState) {  
  67.         super.onCreate(savedInstanceState);  
  68.         setContentView(R.layout.activity_main);  
  69.         mStatus = (TextView) findViewById(R.id.tv_status);  
  70.   
  71.         init();  
  72.   
  73.     }  
  74.   
  75.     /** 
  76.      * 初始化turingSDK、识别和tts 
  77.      *  
  78.      */  
  79.     private void init() {  
  80.          
  81.         mRecognizerManager = new RecognizeManager(this, BD_APIKEY, BD_SECRET);  
  82.         mTtsManager = new TTSManager(this, BD_APIKEY, BD_SECRET);  
  83.         mRecognizerManager.setVoiceRecognizeListener(myVoiceRecognizeListener);  
  84.         mTtsManager.setTTSListener(myTTSListener);  
  85.         mTuringManager = new TuringManager(this, TURING_APIKEY,  
  86.                 TURING_SECRET);  
  87.         mTuringManager.setHttpRequestListener(myHttpConnectionListener);  
  88.         mTtsManager.startTTS("你好啊");  
  89.     }  
  90.   
  91.     /** 
  92.      * 网络请求回调 
  93.      */  
  94.     HttpRequestListener myHttpConnectionListener = new HttpRequestListener() {  
  95.   
  96.         @Override  
  97.         public void onSuccess(String result) {  
  98.             if (result != null) {  
  99.                 try {  
  100.                     Log.d(TAG, "result" + result);  
  101.                     JSONObject result_obj = new JSONObject(result);  
  102.                     if (result_obj.has("text")) {  
  103.                         Log.d(TAG, result_obj.get("text").toString());  
  104.                         mHandler.obtainMessage(MSG_SPEECH_START,  
  105.                                 result_obj.get("text")).sendToTarget();  
  106.                     }  
  107.                 } catch (JSONException e) {  
  108.                     Log.d(TAG, "JSONException:" + e.getMessage());  
  109.                 }  
  110.             }  
  111.         }  
  112.   
  113.         @Override  
  114.         public void onFail(int code, String error) {  
  115.             Log.d(TAG, "onFail code:" + code + "|error:" + error);  
  116.             mHandler.obtainMessage(MSG_SPEECH_START, "网络慢脑袋不灵了").sendToTarget();  
  117.         }  
  118.     };  
  119.   
  120.     /** 
  121.      * 语音识别回调 
  122.      */  
  123.     RecognizeListener myVoiceRecognizeListener = new RecognizeListener() {  
  124.   
  125.          
  126.   
  127.         @Override  
  128.         public void onStartRecognize() {  
  129.             // 仅针对百度回调  
  130.         }  
  131.   
  132.         @Override  
  133.         public void onRecordStart() {  
  134.   
  135.         }  
  136.   
  137.         @Override  
  138.         public void onRecordEnd() {  
  139.   
  140.         }  
  141.   
  142.         @Override  
  143.         public void onRecognizeResult(String result) {  
  144.             Log.d(TAG, "识别结果:" + result);  
  145.             if (result == null) {  
  146.                 mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);  
  147.                 return;  
  148.             }  
  149.             mHandler.obtainMessage(MSG_RECOGNIZE_RESULT, result).sendToTarget();  
  150.         }  
  151.   
  152.         @Override  
  153.         public void onRecognizeError(String error) {  
  154.             Log.e(TAG, "识别错误:" + error);  
  155.             mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);  
  156.         }  
  157.     };  
  158.   
  159.     /** 
  160.      * TTS回调 
  161.      */  
  162.     TTSListener myTTSListener = new TTSListener() {  
  163.   
  164.         @Override  
  165.         public void onSpeechStart() {  
  166.             Log.d(TAG, "onSpeechStart");  
  167.         }  
  168.   
  169.         @Override  
  170.         public void onSpeechProgressChanged() {  
  171.   
  172.         }  
  173.   
  174.         @Override  
  175.         public void onSpeechPause() {  
  176.             Log.d(TAG, "onSpeechPause");  
  177.         }  
  178.   
  179.         @Override  
  180.         public void onSpeechFinish() {  
  181.             Log.d(TAG, "onSpeechFinish");  
  182.             mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);  
  183.         }  
  184.   
  185.         @Override  
  186.         public void onSpeechError(int errorCode) {  
  187.             Log.d(TAG, "onSpeechError:" + errorCode);  
  188.             mHandler.sendEmptyMessage(MSG_RECOGNIZE_START);  
  189.         }  
  190.   
  191.         @Override  
  192.         public void onSpeechCancel() {  
  193.             Log.d(TAG, "TTS Cancle!");  
  194.         }  
  195.     };  
  196. }  

AndroidManifest.xml


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.turing.demo"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="14"  
  9.         android:targetSdkVersion="21" />  
  10.     <!-- SDK必须 -->  
  11.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  12.     <uses-permission android:name="android.permission.INTERNET" />  
  13.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  14.     <!-- 语音识别、合成 -->  
  15.     <uses-permission android:name="android.permission.RECORD_AUDIO" />  
  16.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  17.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  18.     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />  
  19.     <uses-permission android:name="android.permission.READ_CONTACTS" />  
  20.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  21.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  22.   
  23.     <application  
  24.         android:allowBackup="true"  
  25.         android:icon="@drawable/ic_launcher"  
  26.         android:label="@string/app_name"  
  27.         android:theme="@style/AppTheme" >  
  28.         <activity  
  29.             android:name=".MainActivity"  
  30.             android:label="@string/app_name" >  
  31.             <intent-filter>  
  32.                 <action android:name="android.intent.action.MAIN" />  
  33.   
  34.                 <category android:name="android.intent.category.LAUNCHER" />  
  35.             </intent-filter>  
  36.         </activity>  
  37.     </application>  
  38.   
  39. </manifest>  

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

需要注意下

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

- (void)stopRecognize;

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

- (void)cancleRecognize;








本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android开发之监听或获取手机短信内容
Android-银联支付
Android中handler的用法总结
Android位置服务开发
Android 获取GPS定位信息
android 短信接受学习 - 熊猫眼 - JavaEye技术网站
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服