写个应用给娃玩

编程入门 行业动态 更新时间:2024-10-25 02:20:28

写个应用给娃玩

写个应用给娃玩

版本0.1
需求1可以通过唤醒词“瓦力瓦力 ”进行语音唤醒并回答:“我在呢” ,进入语音识别模式
需求 2语音识别模式 下识别麦克风接收到的信息,识别为文本后,播放一次识别到的语音,然后等待下一次唤醒

第一章:集成百度语音AI

主要是有免费额度,所以就直接选择了百度语音AI来做demo
参考官方文档:

demo测试

百度AI官网有提供对应版本的demo:SDK demo下载

下载解压后用Android Studio打开,以下引用了代码中的集成参考文档,放在这里也方便小白直接 查阅。

(一)简介:

本文将集成ActivityMyMiniRecog(精简版识别)及ActivityMyMiniWakeUp(精简版唤醒)至一个新建的helloworld项目。
参考文档:官网文档

前提: 将官方demo的源代码通过android studio在android真机上运行起来并且测试成功。Demo暂不支持模拟器。
测试机型

| Android Studio | 3.5.0| |–|--| | 官方Demo | 3.1.1 | | Gradle |
3.4.0| | 测试机型| One plus 5 Android 9.0|

(二)准备一个helloworld项目及官网注册应用

1.点击New project

![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NzE3MA==,size_16,color_FFFFFF,t_70
2.选择Empty Activity 后点击next



注意,红框画出的是包名。 在项目测试成功后,您可以将您自己的包名填写在官网申请的应用里。并且该应用开通了语音识别能力。

目前您可以“暂时”用demo的示例的应用信息。 |APP_ID |10674398 | |–|--| | API_KEY |
a8aZUvtoQjsrsVKy7UolPtUe | | SECRET_KEY |
d14094ef8273855e1736f6ddc7b487c0|
包名ApplicationId:com.baidu.speech.recognizerdemo
上面的appId等信息您可以在demo的core\src\main\AndroidManifest.xml下找到。
包名ApplicationId在app\build.gradle中找到

(三)导入core 模块 导入demo的core module

选择demo的core目录

此时查看项目目录下的settings.gradle, 可以看见core module已经被加载 同时可以看见core目录的图标

配置app依赖core 右击app目录选择Open Module Settings

在打开的界面选择Dependencies.然后选择app----+号-----选择3 Module Dependency


在弹出的界面勾选core后点击OK

此时观察build.gradle(module :app)文件,发现自动添加了如下一行 implementation
project(path: ‘:core’)

并根据core/build.gradle(module :core)更改app/build.gradle(module :app)部分版本号

(四)测试精简版在线识别功能(唤醒请忽略)
修改app/java/com.baidu.speech.recognizerdemo/MainActivity.java:

import com.baidu.aip.asrwakeup3.core.mini.ActivityMiniRecog; public
class MainActivity extends ActivityMiniRecog {
}

集成完毕,直接启动app即可测试。

(五)测试精简版离线命令词功能(唤醒请忽略) 修改ActivityMiniRecog.java 修改文件core\src\main\java\com\baidu\aip\asrwakeup3\core\mini\ActivityMiniRecog.java

public class ActivityMiniRecog 中, protected boolean enableOffline =
true; // // 测试离线命令词,需要改成true 如下图

断网,启动后看见name: asr.ready,表示离线引擎加载成功。 此时大声说出“打电话给张三”

其中预加载离线资源文件保存在core\src\main\assets\baidu_speech_grammar.bsg

(六)测试精简版唤醒功能(识别请忽略)

修改MainActivity.java:

public class MainActivity extends ActivityMiniWakeUp {} ```![在这里插入图片描述](.png)
启动后,首次使用需要在线,之后可以断网测试 说:“小度你好”
![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NzE3MA==,size_16,color_FFFFFF,t_70)
#### (七)修改demo的应用信息 到这里,集成和测试完毕。之后上线时需要把demo中的应用信息替换成您自己。 您在网页中需要找到如下信息
![在这里插入图片描述](.png)如您的Android包名自己填写的是aaa
![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NzE3MA==,size_16,color_FFFFFF,t_70)在您的core\src\main\AndroidManifest.xml文件里 替换您的appId appKey secretKey:
![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NzE3MA==,size_16,color_FFFFFF,t_70)在app\build.gradle,替换成您的包名
![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NzE3MA==,size_16,color_FFFFFF,t_70)
#### (八)完整项目下载链接:  提取码:k92p  账号和应用注册 
  自定义唤醒词: 

第二章:修改语音唤醒词

获取唤醒词的bin文件


![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODQ4NzE3MA==,size_16,color_FFFFFF,t_70

点击评估

勾选要用的唤醒词并点击导出(注意每个月只有3次机会),确定后会下载WakeUp.bin

替换WakeUp.bin

替换xxx_project\core\src\main\assets路径下的WakeUp.bin,重新编译运行apk可测试验证新的唤醒词是否生效。

第三章:导入语音合成功能

注意测试前确保账号的应用详情里有开通语音合成服务并且有获取额度
同上参考第一章:先测试官网的语音合成的demo然后再照猫画虎

第四章: HelloWali

唤醒的代码参考
 // 基于SDK唤醒词集成1.1 初始化EventManagerwakeup = EventManagerFactory.create(this, "wp");// 基于SDK唤醒词集成1.3 注册输出事件wakeup.registerListener(this); //  EventListener 中 onEvent方法startWakeUp();private void startWakeUp() {txtLog.setText("等待唤醒...");// 基于SDK唤醒词集成第2.1 设置唤醒的输入参数Map<String, Object> params = new TreeMap<String, Object>();params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, true);params.put(SpeechConstant.WP_WORDS_FILE, "assets:///WakeUp.bin");// "assets:///WakeUp.bin" 表示WakeUp.bin文件定义在assets目录下InFileStream.setContext(this);String json = null; // 这里可以替换成你需要测试的jsonjson = new JSONObject(params).toString();wakeup.send(SpeechConstant.WAKEUP_START, json, null, 0, 0);printLog("输入参数:" + json);}
语音识别参考:
IRecogListener listener = new MyTtsRecogListener(handler, synthesizer);
myRecognizer = new MyRecognizer(this, listener);protected void startRec() {// DEMO集成步骤2.1 拼接识别参数: 此处params可以打印出来,直接写到你的代码里去,最终的json一致即可。final Map<String, Object> params = new HashMap<>();params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);// params 也可以根据文档此处手动修改,参数会以json的格式在界面和logcat日志中打印Log.i(TAG, "设置的start输入参数:" + params);// 复制此段可以自动检测常规错误(new AutoCheck(getApplicationContext(), new Handler() {public void handleMessage(Message msg) {if (msg.what == 100) {AutoCheck autoCheck = (AutoCheck) msg.obj;synchronized (autoCheck) {String message = autoCheck.obtainErrorMessage(); // autoCheck.obtainAllMessage();; // 可以用下面一行替代,在logcat中查看代码// Log.w("AutoCheckMessage", message);}}}}, false)).checkAsr(params);// 这里打印出params, 填写至您自己的app中,直接调用下面这行代码即可。// DEMO集成步骤2.2 开始识别myRecognizer.start(params);}
    public class MyRecognizer {public void start(Map<String, Object> params) {if (!isInited) {throw new RuntimeException("release() was called");}// SDK集成步骤 拼接识别参数String json = new JSONObject(params).toString();MyLogger.info(TAG + ".Debug", "识别参数(反馈请带上此行日志)" + json);asr.send(SpeechConstant.ASR_START, json, null, 0, 0);}}

TTS语音合成代码参考

代码有点多,完整代码请参考:git@github:chenyifen/hellowali.git

第五章: 踩过的坑

获取语音合成的请求时总是提示 Wakeup engine has no license,检查了鉴权的app_id, app_key和包名都确认无误,最后发现是创建应用的时候我虽然选择了语音合成服务,但是没有点获取额度所以导致拿不到有效的license。
所以有鉴权的问题注意检查以下三点:

  1. app_id, app_key和包名配置
  2. 应用是否有选择对应的语音服务
  3. 语音服务是否有额度可以使用
D/BDSHttpRequestMaker: Begin request, url is .php &55165ee, 
D/BDSHttpRequestMaker: Receive response, data: Failed to pass auth, err_no:-1. httpStatus: 200 &55165ee, 
W/System.err: org.json.JSONException: Value Failed of type java.lang.String cannot be converted to JSONObjectat org.json.JSON.typeMismatch(JSON.java:111)
W/System.err:     at org.json.JSONObject.(JSONObject.java:163)at org.json.JSONObject.(JSONObject.java:176)at com.baidu.speech.core.BDSHttpRequestMaker.makeRequest(Unknown Source:465)
I/System.out: {"error":11,"desc":"Wakeup engine has no license","sub_error":11002

第六章: 完整代码

git@github:chenyifen/hellowali.git

更多推荐

写个应用给娃玩

本文发布于:2024-02-17 14:02:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1694249.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!