当前位置:   article > 正文

Android studio 将语音识别接入AI_android ai语音助手开发

android ai语音助手开发

介绍

        本文章主要实现的功能和作用,实现将AI接入语音助手,即模拟实现一个简单的类似与小艺(华为语音助手)一样的语音助手,当然此小艺非彼小艺(低配)。

SDK下载

        步骤1.打开该链接https://aiui.xfyun.cn/solution/mobile  进入后注册账号,下载语音AI的sdk,

        步骤2.移植demo中的程序到自身程序

程序移植

        具体操作只讲程序移植部分,sdk的下载官方有具体指导。

步骤1.创建自己的项目活动

步骤2.解压sdk包,了解需要的资源,解压后的文件如下图,其中的assets中有我们的配置资源的内容

其中cfg和vad是我们用到的资源(assets)

其中arm64-v8a armeabi-7va是so库,AIUI.jar是jar包(libs)

步骤3.将下载好的demo中的文件进行移植,我箭头所指示的是需要添加的资源,没有箭头指示的不用添加,按照对应的位置和目录结构添加。

其中的两个so包尽量放在和java同级目录下,创建一个jniLibs目录,将包添加,完成上面的步骤后,便可以编写我们自己的代码。

程序编写

        该部分讲解,如何使用代码进行程序的编写。代码编写的思路,创建一个AI对象,设置AI对象监听,唤醒AI对象。

首先,创建AI助手

  1. //创建AIUIAgent
  2. AIUIAgent mAIUIAgent = AIUIAgent.createAgent(context,getAIUIParams(),mAIUIListener);

其次,监听AI对象

  1. private final AIUIListener mAIUIListener = new AIUIListener() {
  2. @Override
  3. public void onEvent(AIUIEvent event) {
  4. switch (event.eventType) {
  5. //唤醒事件
  6. case AIUIConstant.EVENT_WAKEUP:
  7. {
  8. break;
  9. }
  10. //结果事件(包含听写,语义,离线语法结果)
  11. case AIUIConstant.EVENT_RESULT:
  12. {
  13. break;
  14. }
  15. //休眠事件
  16. case AIUIConstant.EVENT_SLEEP:
  17. {
  18. break;
  19. }
  20. // 状态事件
  21. case AIUIConstant.EVENT_STATE: {
  22. mAIUIState = event.arg1;
  23. if (AIUIConstant.STATE_IDLE == mAIUIState) {
  24. // 闲置状态,AIUI未开启
  25. } else if (AIUIConstant.STATE_READY == mAIUIState) {
  26. // AIUI已就绪,等待唤醒
  27. } else if (AIUIConstant.STATE_WORKING == mAIUIState) {
  28. // AIUI工作中,可进行交互
  29. }
  30. } break;
  31. //错误事件
  32. case AIUIConstant.EVENT_ERROR:
  33. {
  34. break;
  35. }
  36. }
  37. }
  38. }

最后,唤醒AI助手

  1. //唤醒aiui请求
  2. private void wakeup_request() {
  3. System.out.println("进入唤醒请求");
  4. if (null == mAIUIAgent) {
  5. Show_Toast.Mesg(VoiceInteraction.this,"AIUIAgent为空,请先创建");
  6. return;
  7. }
  8. if (checkCallingOrSelfPermission(Manifest.permission.RECORD_AUDIO)
  9. != PackageManager.PERMISSION_GRANTED) {
  10. requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO});
  11. return;
  12. }
  13. // 先发送唤醒消息,改变AIUI内部状态,只有唤醒状态才能接收语音输入
  14. // 默认为oneshot模式,即一次唤醒后就进入休眠。可以修改aiui_phone.cfg中speech参数的interact_mode为continuous以支持持续交互
  15. if (!mIsWakeupEnable) {
  16. AIUIMessage wakeupMsg = new AIUIMessage(AIUIConstant.CMD_WAKEUP, 0, 0, "", null);
  17. mAIUIAgent.sendMessage(wakeupMsg);
  18. }
  19. // 打开AIUI内部录音机,开始录音。若要使用上传的个性化资源增强识别效果,则在参数中添加pers_param设置
  20. // 个性化资源使用方法可参见http://doc.xfyun.cn/aiui_mobile/的用户个性化章节
  21. // 在输入参数中设置tag,则对应结果中也将携带该tag,可用于关联输入输出
  22. String params = "sample_rate=16000,data_type=audio,pers_param={\"uid\":\"\"},tag=audio-tag";
  23. AIUIMessage startRecord = new AIUIMessage(AIUIConstant.CMD_START_RECORD, 0, 0, params,
  24. null);
  25. mAIUIAgent.sendMessage(startRecord);
  26. Show_Toast.Mesg(VoiceInteraction.this,"huanxing");
  27. System.out.println("唤醒需求已经fasong");
  28. }

在监听中获取对应的AI数据处理结果

其中的创建部分具体代码如下

  1. private void CreateAIHelper() {
  2. if (checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
  3. != PackageManager.PERMISSION_GRANTED) {
  4. requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE});
  5. return;
  6. }
  7. //设备信息设置
  8. String deviceId = DeviceUtils.getDeviceId(this);
  9. AIUISetting.setNetLogLevel(AIUISetting.LogLevel.debug);
  10. AIUISetting.setSystemInfo(AIUIConstant.KEY_SERIAL_NUM, deviceId);
  11. // 检查是否具有写外部存储的权限
  12. if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
  13. != PackageManager.PERMISSION_GRANTED) {
  14. // Permission is not granted
  15. // Request the permission
  16. ActivityCompat.requestPermissions(this,
  17. new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
  18. MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
  19. } else {
  20. // Permission has already been granted
  21. // Perform the operation that requires this permission
  22. System.out.println("程序具有写外部存储权限");
  23. }
  24. // 创建AIUIAgent
  25. mAIUIAgent = AIUIAgent.createAgent(this, getAIUIParams(), mAIUIListener);
  26. if (mAIUIAgent != null) {
  27. // AIUIAgent创建成功,执行您的操作
  28. // ...
  29. System.out.println("创建成功");
  30. } else {
  31. // 创建失败,进行错误处理
  32. // ...
  33. System.out.println("创建失败");
  34. }
  35. }
  1. private String getAIUIParams(){
  2. String params = FucUtil.readAssetFile(this, "cfg/aiui_phone.cfg", "utf-8");
  3. try {
  4. JSONObject paramsJson = new JSONObject(params);
  5. params = paramsJson.toString();
  6. } catch (JSONException e) {
  7. e.printStackTrace();
  8. }
  9. return params;
  10. }

其中的FucUtil等工具类的代码可以在demo中找寻到,将这些需要的类复制即可。

经上述部分即可使用一个AI语音助手。


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/275349
推荐阅读
相关标签
  

闽ICP备14008679号