一、实验目的
本次实验通过 AIUI 的配置及调用,开发一个关于语音识别的场景应用, 让学生了解语音识别技术如何在机器人上使用,同时对语音识别技术的使用途 径和步骤进行详细讲解,让学生理解起来更加轻松,了解 AIUI 开放平台账号申请、应用创建及配置掌握使用开发套件完成机器人智能应用的开发与调试及调用开发等内容。
二、实验内容
1、了解 AIUI 开放平台账号申请、应用创建及配置;
2、 掌握使用开发套件完成机器人智能应用的开发与调试;
3、 掌握语音识别能力接口的调用开发
三、实验步骤
步骤 1:AIUI 账号申请及平台设置
步骤 2:项目工程搭建及能力包导入
等等。。。。。。
步骤 3:项目 AIUI 能力导入及配置
完成了工程项目的搭建后,我们需要在项目工程中集成 AIUI 能力,具体步骤如下:
💥💥1、 首先
导入配置文件,将 aiui.cfg 文件导入到应用工程目录: src/main/assets/cfg/
💥💥2、 其次
修改 aiui.cfg 文件中的配置信息,具体如下图所示:
步骤 4:功能代码开发
首先,在我们的应用工程的入口 MyApp.java 文件的 onCreate 中进行机器人 硬件能力的初始化,只有完成了硬件能力的注册后,才能使用机器人的六麦的麦 克风阵列进行录音,具体代码如下所示:
package com.iflytek.environment.speechrecognition; import android.app.Application; import android.content.Context; import com.starway.starrobot.commonability.RobotType; import com.starway.starrobot.commonability.StarCommonAbility; import com.starway.starrobot.commonability.hardware.CenterLightHelper; import com.starway.starrobot.commonability.hardware.EmojiHelper; import com.starway.starrobot.commonability.hardware.GPIOHelper; import com.starway.starrobot.logability.StarLogAbility; import com.starway.starrobot.logability.log.PartCode; /** * @package: com.iflytek.environment.speechrecognition * @fileName: MyAPP * @author: admin * @email: admin@iflytek.com * @describe: TODO */ public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); init(); } private void init() { StarLogAbility.getInstance().initAbility(this); //基础能力初始化 StarCommonAbility.getInstance().initAbility(this, RobotType.TYPE_TEACHING, new StarCommonAbility.onResultCallback() { @Override public void onResult(boolean isSuccess, String hardCode) { if (isSuccess) { // todo 硬件和业务状态初始化 switch (hardCode) { case PartCode.HARDWARE_PARTCODE.CODE_EMOJI: // todo 设置初始表情 EmojiHelper.doEmojiBase(); break; case PartCode.HARDWARE_PARTCODE.CODE_GPIO: // todo 默认加载的时候,将拾音方向设置为默认正前方的0度。 GPIOHelper.getInstance().setMainMic(0); break; case PartCode.HARDWARE_PARTCODE.CODE_CENTER_LIGHT: // todo 关闭腹部灯带 CenterLightHelper.takeCenterLightOff(); break; default: break; } } } }); } }
完成了硬件能力的初始化,在我们的应用工程 MainActivity.java 文件的 onCreate 中进行机器人 AIUI 的能力初始化,同时启动 AIUI 服务,主要代码如下所示:
package com.iflytek.environment.speechrecognition; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.widget.TextView; import com.iflytek.aiui.AIUIEvent; import com.starway.starrobot.aiuiability.AIUIAbility; import com.starway.starrobot.aiuiability.NLPListener; import org.json.JSONObject; public class MainActivity extends AppCompatActivity implements NLPListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化AIUI能力 AIUIAbility.getInstance().initAIUIAbility(this); //设置AIUI监听 AIUIAbility.getInstance().addNLPListener(this); //启动AIUI AIUIAbility.getInstance().start(); } @Override public void onAiuiResponse(String bean) { if (TextUtils.isEmpty(bean)) { return; } try { JSONObject object = new JSONObject(bean); if (null == object) { return; } JSONObject intentObject = object.optJSONObject("intent"); if (null == intentObject) { return; } if (intentObject.has("text")) { TextView txtView = (TextView) findViewById(R.id.txtArea); txtView.setText(intentObject.getString("text")); } } catch (Exception e) { e.printStackTrace(); } } @Override public void onAiuiWakeUp() { } @Override public void onAiuiSleep() { } @Override public void onAiuiEvent(AIUIEvent aiuiEvent) { } @Override public void onError(int i) { } @Override protected void onPause() { super.onPause(); //停止AIUI服务 AIUIAbility.getInstance().release(); } }
步骤 5:应用权限申请
跟以前在安装 APP 的是就申请了权限不同,Google 在 API 23,也就 Android6.0 之后加入了动态权限。对于一些敏感的权限,决定权交还给了用户, 不再是强制申请了。因为这个原因,如果 APP 需要支持 Android6.0 以上的系 统,就需要进行一下适配,否则 APP 就会崩溃。
就是添加一个jks文件,里面的权限都申请好了。在在 AndroidManifest.xml 中添加 android:sharedUserId="android.uid.system"
步骤6 : 结果展示
实验完成,让电脑连接配件,配件能get到你的声音并在屏幕上显示出来。
步骤 7: 小结: 错误小集合,我竟然把雷全踩了.
1. 程序运行错误
◼ 错误信息:程序出现崩溃异常
◼ 解决方法:出现该问题可能是因为程序录音没有权限,机器人的系统 Android7.1.2 需要动态申请权限,代码中如果没有动态进行麦克风权限的申 请,需要手动到系统设置页面打开录音的权限,进入系统设置可以使用 adb 命令:adb shell am start -n com.android.settings/com.android.settings.Settings
2. 代码错误
◼ 错误信息:在添加应用代码的过程中,出现“cannot resolve symbol ‘xxxxx’ ” 的提示信息,如下图所示:
◼ 解决方法:出现该问题是因为当前文件中没有导入相应的类,只需要将光标 置于需要导入的类对象名称位置,然后同时按下键 盘上的 Alt + Enter 键即可自动导入该类。
3 .编译错误
◼ 错误信息:应用编译运行时,没有播放合成的语音,并且调试信息里有报错: errorCode:10147
◼ 解决方法:检查 AIUI 配置文件中的 appid 和 appkey 的设置是否正确,是否 跟 AIUI 平台创建的应用 appid 和 appkey 一致。