百度语音识别——在线识别

asr.registerListener(yourListener);

2.2.2 开始识别/唤醒

  • 1.设置识别/唤醒输入参数

SDK中,您需要根据文档或者demo确定您的输入参数。DEMO中有UI界面简化选择和测试过程。demo中,在点击“开始录音”按钮后,您可以在界面或者日志中看见ASR_START事件的json格式的参数。

在这里插入图片描述

  • 2.发送start开始事件

asr.send(SpeechConstant.ASR_START, json, null, 0, 0);

2.2.3 回调事件

  • 1.开始回调事件

回调事件在您实现的EventListener中获取。OnEvent方法中, name是输出事件名,params该事件的参数,(data,offset, length)三者一起组成额外数据。如回调的音频数据,从data[offset]开始至data[offset + length] 结束,长度为length。

public void onEvent(String name, String params, byte [] data, int offset, int length);

2.2.4. 控制识别/唤醒

  • 1.控制停止识别/唤醒,可以向SDK发送停止事件

asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);

//发送停止录音事件,提前结束录音等待识别结果

  • 2.取消本次识别,可以向SDK发送取消事件

asr.send(SpeechConstant.ASR_CANCEL null, null, 0, 0);

//发送停止录音事件,提前结束录音等待识别结果

2.2.5. 事件管理器退出

  • 1.释放资源

asr.unregisterListener(this);

2.3 SDK接入


demo 根目录下有doc_integration_DOCUMENT目录,里面有demo的测试图文教程和集成图文教程。其中 “ASR-INTEGRATION-helloworld-V3.01.docx” 中描述了如何集成Android识别SDK到新项目。

2.3.1 导入core 模块

  • 1.导入demo的core module

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

2.3.2 配置app依赖core

  • 1.右击app目录选择Open Module Settings

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

并根据core/build.gradle(module :core)更改app/build.gradle(module :app)部分版本号。至此,成功集成。

在这里插入图片描述

2.3.3 测试及解决运行问题

修改app/java/com.baidu.speech.recognizerdemo/MainActivity.java,集成完毕,直接启动app即可测试。

在这里插入图片描述

  • 运行app时可能会出现下面这个问题

Compatible side by side NDK version was not found. Default is 20.0.5594570.

  • *解决方法:tools–>sdk manager–>Android sdk–>sdk tools–>show package detail–>找到相对应NDK

在这里插入图片描述

2.3.4 集成方法对比

网上还有一种分别在新项目的 core/libs和新项目下新建一个core/src/main/jniLibs文件夹中导入jar和.so库的集成操作。但这种操作比起上述详细说明的操作,在我看来相对更为复杂,且容易出错。

2.4 基于SDK集成开发


主要是对 core模块中的 “ActivityMiniRecog类” 进行仿写。

2.4.1 配置AndroidManifest.xml 文件

a.设置权限
b.设置APP_ID, APP_KEY, SECRET_KEY及注意点

<meta-data android:name=“com.baidu.speech.APP_ID”

android:value=“15590577” />

<meta-data

android:name=“com.baidu.speech.API_KEY”

android:value=“q2uPyBe6LmWTZlvb0g1dzcHV” />

<meta-data

android:name=“com.baidu.speech.SECRET_KEY”

android:value=“y7S7hAI894BB3LF1yHYmvQEus1B6wPvj” />

  • 关于APP_ID, APP_KEY, SECRET_KEY的使用,许多网上的教程说要到百度上去注册账号,然后创建应用啥的,但如果只是简单的做个demo的话,完全没有必要。可以在demo的core\src\main\AndroidManifest.xml中找到包名ApplicationId:com.baidu.speech.recognizerdemo(官方提供)的上述信息,进行简单使用。

2.4.2 Main.java

package com.example.speechtest;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import com.baidu.speech.EventListener;

import com.baidu.speech.EventManager;

import com.baidu.speech.EventManagerFactory;

import com.baidu.speech.asr.SpeechConstant;

import org.json.JSONException;

import org.json.JSONObject;

import java.util.ArrayList;

import java.util.LinkedHashMap;

import java.util.Map;

// 继承百度内部的监听

public class Main extends AppCompatActivity implements EventListener {

protected EditText Result;

protected Button btn;

// 设置事件管理器

private EventManager asr;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 动态申请权限

initPermission();

// 基于sdk集成1.1 初始化EventManager对象 设置自定义监听

asr = EventManagerFactory.create(this, “asr”);

// 基于sdk集成1.3 注册自己的输出事件类

asr.registerListener(this);

Result = findViewById(R.id.EditView);

btn = findViewById(R.id.button);

btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast toast = Toast.makeText(getApplicationContext(),“开始识别”,Toast.LENGTH_LONG);

toast.show();

start();

}

});

}

/**

  • 基于SDK集成2.2 发送开始事件

  • 点击开始按钮

*/

private void start(){

Map<String, Object> params = new LinkedHashMap<String, Object>();

// 基于SDK集成2.1 设置识别参数

params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);

String json = null; // 可以替换成自己的json

json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json

// 基于SDK集成2.2 发送start开始事件

asr.send(SpeechConstant.ASR_START, json, null, 0, 0);

}

/*

*基于sdk集成1.2 自定义输出事件类

*EventListener 回调方法

*/

@Override

public void onEvent(String name, String params, byte[] data, int offset, int length) {

if (SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL.equals(name)){

// 识别相关的结果都在这里CALLBACK_EVENT_ASR_PARTIAL

try {

// 结果类型result_type(临时结果partial_result,最终结果final_result)

// best_result最佳结果参数

//在2.2熟悉源码的2.2.1设置识别/唤醒输入参数中可查看原始Json

JSONObject object = new JSONObject(params);

String result = object.getString(“best_result”);

String resultType = object.getString(“result_type”);

// 判断识别是否结束

if (“final_result”.equals(resultType)){

Result.setText(result);

Toast toast = Toast.makeText(getApplicationContext(),“识别已结束”,Toast.LENGTH_SHORT);

toast.show();

}

} catch (JSONException e) {

e.printStackTrace();

}

}

}

/**

  • android 6.0 以上需要动态申请权限

  • (以下可直接从ActivityMiniRecog类中复制)

*/

private void initPermission() {

String permissions[] = {Manifest.permission.RECORD_AUDIO,

Manifest.permission.ACCESS_NETWORK_STATE,

Manifest.permission.INTERNET,

Manifest.permission.WRITE_EXTERNAL_STORAGE

};

ArrayList toApplyList = new ArrayList();

for (String perm : permissions) {

if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {

toApplyList.add(perm);

// 进入到这里代表没有权限.

}

}

String tmpList[] = new String[toApplyList.size()];

if (!toApplyList.isEmpty()) {

ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

学习福利

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-g11yj7mG-1713688755968)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值