赞
踩
基于Kaldi开发安卓离线语音识别项目(一) 在安卓项目中集成lib-share-asr组件
作者:诗酒赴韶华
奉言:暇腾点跃千帆,醉卧江海万澜。
转载请注明出处:https://blog.csdn.net/dj2017/article/details/105657295
【持续更编中】
~~~~~~~
近期在开发智能家居领域产品——带屏智能音箱,其中语音场景要求在、离线语音识别支持。由于,大厂收费颇高。对于,穷苦大众的小生,撸起袖子,就在Github上遨游。果然,邂逅了两位梦中情人——Pocketsphinx和Kaldi。
~~~~~~~
作为老资格的Pocketsphinx已经被后生Kaldi拍在沙滩上,但还是对Pocketsphinx做了一番实践(详情可在小生的博客中浏览)。最后,还是选择使用Kaldi,较于前者,Kaldi识别率更高,误识别率更低。
(莫愁前路无网络,离线语音正待君——Pocketsphinx篇)
~~~~~~~
但是,既然是开源,所以很多时候,还需要在手中雕琢,方能显其美。在对kaldi进行一系列封装以后,将一步步开源封装成果。
~~~~~~~
以下,着重讲解lib-share-asr组件的集成以及基本使用。
lib-share-asr组件结构介绍:
封装后,离线语音识别功能以三种形式对外提供:
下面主要讲解Service形式封装的集成
虽然lib-share-core中有路由功能,但是此处为方便讲解,以主模块直接依赖lib-share-asr组件来进行讲解。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
示例使用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)获取每次的识别结果。
点击运行安装在手机或者智屏上,就可以体验离线语音识别了。
唤醒词:小菲(连着呼唤"小菲小菲"可提高识别率)
智能家居设备控制测试:
打开房间灯
打开客厅空调
关闭客厅电视
设备回应"操作成功"
语音识别结果示例:
演示视频待更新
演示视频在哔哩哔哩审核中
演示视频在哔哩哔哩审核中
想要真正操控,可以在设备USB端接智能家居ZigBee模块等其它局域型家居网络。即可实现离线语音控制设备。
模块中已集成部分的智能家居控制控制语句,以及唤醒词“小菲”。
计划优化:
- 多麦优化
- 稍模匹配
计划撰写:
- 基于Kaldi开发安卓离线语音识别项目(二)语音技能探讨
- 基于Kaldi开发安卓离线语音识别项目(三)语音识别流程
- 基于Kaldi开发安卓离线语音识别项目(四)实现中文语音识别
- 基于Kaldi开发安卓离线语音识别项目(五)实现唤醒词识别及唤醒回应
- 基于Kaldi开发安卓离线语音识别项目(六)识别效果优化探讨
- 数据结构算法复习笔记
- 高数、线代、离散、概率论与数理统计复习笔记
- 计组、计网、计操复习笔记
- 自然语言处理学习笔记
- 等
微信:15798024687
欢迎感兴趣的朋友持续关注,一起探讨。感谢您的浏览。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。