基于Kaldi开发安卓离线语音识别项目(一) 在安卓项目中集成lib-share-asr组件
作者:诗酒赴韶华
奉言:暇腾点跃千帆,醉卧江海万澜。
转载请注明出处:【安卓离线语音识别】莫愁前路无网络,离线语音正待君——Kaldi篇
【持续更编中】
目录
一、前言
~~~~~~~ 近期在开发智能家居领域产品——带屏智能音箱,其中语音场景要求在、离线语音识别支持。由于,大厂收费颇高。对于,穷苦大众的小生,撸起袖子,就在Github上遨游。果然,邂逅了两位梦中情人——Pocketsphinx和Kaldi。
~~~~~~~ 作为老资格的Pocketsphinx已经被后生Kaldi拍在沙滩上,但还是对Pocketsphinx做了一番实践(详情可在小生的博客中浏览)。最后,还是选择使用Kaldi,较于前者,Kaldi识别率更高,误识别率更低。
(莫愁前路无网络,离线语音正待君——Pocketsphinx篇)
~~~~~~~ 但是,既然是开源,所以很多时候,还需要在手中雕琢,方能显其美。在对kaldi进行一系列封装以后,将一步步开源封装成果。
~~~~~~~ 以下,着重讲解lib-share-asr组件的集成以及基本使用。
二、准备工作
1. 下载lib-share-asr组件
lib-share-asr组件结构介绍:
- 该语音技能,也可在在线语音识别服务端程序中应用。如需自定义语音技能,请依照已实现技能进行开发。
- lib-share-asr在修改build.gradle等文件后,作为APP独立运行和开发。
- 上述为简单封装Kaldi;并在其基础上,扩展了自主开发的语音技能;
- 后期将逐步完善和丰富功能,并在博客中更新。
2. AS最新版本
3. 真机测试
- 不推荐模拟器,除非为模拟器增加了外部存储功能,否则运行组件会闪退)
三、导入工程
- 注意事项:先按流程做完,最后再Sync Now。
1. 解压
2. 黏贴进工程
3. 在主模块导入资源
4. 配置build.gradle
5. 配置工程的settings.gradle
6. 点击右上角的一行蓝色字:Sync Now
7. 等待完成
四、组件集成
封装后,离线语音识别功能以三种形式对外提供:
- Activity(依赖界面,已实现)
- Service(后台运行,已实现)
- 普通类(封装度最高,仍在进一步测试)
下面主要讲解Service形式封装的集成
虽然lib-share-core中有路由功能,但是此处为方便讲解,以主模块直接依赖lib-share-asr组件来进行讲解。
1. 添加依赖
2. 添加权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3. 编程使用
4. 示例代码
示例使用Activity与Service同进程不同线程间IBinder进行通信。还可以其它方式,请自行实现。
// MainActivity.java
/** * Copyright 2020 JiaDeng. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
package com.dengjia.share_screen_snapshot;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import com.dengjia.lib_share_asr.ShareAsrService;
import pub.devrel.easypermissions.EasyPermissions;
public class MainActivity extends AppCompatActivity implements ServiceConnection {
// private TextView tv_eventRouter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] perms = {
Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO};
if (!EasyPermissions.hasPermissions(this, perms)) {
EasyPermissions.requestPermissions(this, "Need permissions for camera & microphone", 0, perms);
}
Intent intent = new Intent(this, ShareAsrService.class);
startService(intent);
bindService(intent, this, BIND_AUTO_CREATE);
}
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
ShareAsrService.AsrResultBinder asrResultBinder = (ShareAsrService.AsrResultBinder) iBinder;
ShareAsrService shareAsrService = asrResultBinder.getService();
shareAsrService.addAsrResultListener(new ShareAsrService.AsrResultListener() {
// 此处传回的result就是识别后的结果文本
@Override
public void onGetAsrResult(String result) {
Log.e("MainActivity", "\n语音识别结果:" + result);
}
});
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
}
// 提示:从onGetAsrResult(String result)获取每次的识别结果。
五、运行效果(图片、视频)
点击运行安装在手机或者智屏上,就可以体验离线语音识别了。
1.运行效果
-
唤醒词:小菲(连着呼唤”小菲小菲”可提高识别率)
-
智能家居设备控制测试:
打开房间灯
打开客厅空调
关闭客厅电视
设备回应”操作成功”语音识别结果示例:
2. 唤醒词识别
演示视频待更新
3. 家居设备操作技能识别
演示视频在哔哩哔哩审核中
4. 音视频通话技能识别
演示视频在哔哩哔哩审核中
想要真正操控,可以在设备USB端接智能家居ZigBee模块等其它局域型家居网络。即可实现离线语音控制设备。
六、附录
1.添加技能
模块中已集成部分的智能家居控制控制语句,以及唤醒词“小菲”。
2.ShareScreen智屏安卓项目架构
3. 计划
计划优化:
- 多麦优化
- 稍模匹配
计划撰写:
- 基于Kaldi开发安卓离线语音识别项目(二)语音技能探讨
- 基于Kaldi开发安卓离线语音识别项目(三)语音识别流程
- 基于Kaldi开发安卓离线语音识别项目(四)实现中文语音识别
- 基于Kaldi开发安卓离线语音识别项目(五)实现唤醒词识别及唤醒回应
- 基于Kaldi开发安卓离线语音识别项目(六)识别效果优化探讨
- 数据结构算法复习笔记
- 高数、线代、离散、概率论与数理统计复习笔记
- 计组、计网、计操复习笔记
- 自然语言处理学习笔记
- 等
微信:15798024687
欢迎感兴趣的朋友持续关注,一起探讨。感谢您的浏览。
今天的文章离线语音输入法_离线文字转语音工具「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83084.html