android开发-百度语音识别Android SDK的简单使用 汽车喷漆房 • 2022-12-17 • 随笔 • 阅读 18 android开发-百度语音识别Android SDK的简单使用 android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:hint=“请点击开始录音” app:layout_constraintEnd_toEndOf=“parent” app:layout_constraintStart_toStartOf=“parent” app:layout_constraintTop_toTopOf=“parent” /> android:id="@+id/btn_start" android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:text=“开始录音” app:layout_constraintEnd_toStartOf="@+id/edittext" app:layout_constraintTop_toTopOf="@+id/btn_stop" /> android:id="@+id/btn_stop" android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:layout_marginTop=“116dp” android:text=“停止录音” app:layout_constraintStart_toEndOf="@+id/edittext" app:layout_constraintTop_toTopOf=“parent” /> 试运行看看实际效果 ②android 6.0 以上版本权限申请。语音识别要用到麦克风,这个使用权限是需要动态申请的。 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); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 此处为android 6.0以上动态授权的回调,用户自行实现。 } ③初始化控件与语音识别的核心SDK protected EditText txtResult;//识别结果 protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开 protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容 private EventManager asr;//语音识别核心库 private void initView() { txtResult = (EditText) findViewById(R.id.edittext); startBtn = (Button) findViewById(R.id.btn_start); stopBtn = (Button) findViewById(R.id.btn_stop); startBtn.setonClickListener(new View.onClickListener() {//点击开始按钮 @Override public void onClick(View v) { asr.send(SpeechConstant.ASR_START, null, null, 0, 0); } }); stopBtn.setonClickListener(new View.onClickListener() {//点击停止按钮 @Override public void onClick(View v) { asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); } }); } ④在onCreate方法中调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initPermission(); //初始化EventManager对象 asr = EventManagerFactory.create(this, “asr”); //注册自己的输出事件类 asr.registerListener(this); // EventListener 中 onEvent方法 } 此时会有错误提示,因为我们还没有实现EventListener这个借口,接下来我们就实现这个接口 ⑤实现EventListener接口,要注意这个接口是百度的这个 实现接口的onEvent方法 @Override public void onEvent(String name, String params, byte[] data, int offset, int length) { if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) { // 识别相关的结果都在这里 if (params == null || params.isEmpty()) { return; } if (params.contains("“final_result”")) { // 一句话的最终识别结果 String regrex = “[(.*?),”; //使用正则表达式抽取我们需要的内容 Pattern pattern = Pattern.compile(regrex); Matcher matcher = pattern.matcher(params); if (matcher.find()) { int a = matcher.group(0).indexOf("["); int b = matcher.group(0).indexOf(","); txtResult.setText(matcher.group(0).substring(a+2,b-3)); } } } } 因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果 ⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试与USB安装,不同手机的开启方法不同,自己上网查一下就好。 将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可 运行测试 大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。 参考文档: csdn:Android百度语音识别 百度官方技术文档:语音技术 欢迎分享,转载请注明来源:内存溢出原文地址: http://outofmemory.cn/zaji/5693036.html 识别 停止 内容 抽取 接口 赞 (0) 打赏 微信扫一扫 支付宝扫一扫 汽车喷漆房 一级用户组 0 0 生成海报 Netty接收超过1024字节 上一篇 2022-12-17 排序算法的稳定性 下一篇 2022-12-17 发表评论 请登录后评论... 登录后才能评论 提交 评论列表(0条)
评论列表(0条)