莫愁前路无网络,离线语音正待君——Kaldi篇

Aine ·
更新时间:2024-11-15
· 780 次阅读

基于Kaldi开发安卓离线语音识别项目(一) 在安卓项目中集成lib-share-asr组件

”持续更编“

前言

近期在开发智能家居领域产品——带屏智能音箱,其中语音场景要求在、离线语音识别支持。由于,讯飞、百度等大厂,收费颇高。对于,穷苦大众的小生,撸起袖子,就在Github上遨游。果然,邂逅了两位梦中情人——Pocketsphinx和Kaldi。
作为老资格的Pocketsphinx已经被后生Kaldi拍在沙滩上,但还是对Pocketsphinx做了一番实践(详情可在小生的博客中浏览)。最后,还是选择使用Kaldi,较于前者,Kaldi识别率更高,误识别率更低。
但是,既然是开源,所以很多时候,还需要在手中雕琢,方能显其美。在对kaldi进行一系列封装以后,将一步步开源封装成果。将初步Kaldi封装后,加入了个人的安卓组件库。
本篇博客,着重讲解lib-share-asr组件的集成以及使用。

准备工作 下载lib-share-asr组件
在这里插入图片描述 AS最新版本 真机测试机(不推荐使用模拟器) 导入工程 注意事项:先按流程做完,最后再Sync Now。 解压
在这里插入图片描述 黏贴进工程

在这里插入图片描述

使用
在这里插入图片描述 // 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)获取每次的识别结果。 功能测试

点击运行安装在手机上,就可以体验离线语音识别了。

唤醒词:小菲 智能家居设备控制
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 荐言 匹配词设置
在这里插入图片描述
模块中已集成部分的智能家居控制控制语句,以及唤醒词“小菲”。计划,将语音技能功能单独剥离出来,精简ShareService,使各部分职能单一化。初步成果可见模块源码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
初步设计如图,计划将采用树或图数据结构来定义语音技能。
在这里插入图片描述
客官可以依据该部分匹配词、技能、语法规则来自定义想要识别的语句。

计划优化

多麦优化 稍模匹配

这段时期,开发任务完成后,将所有的成果在Github上开源。
感兴趣的朋友,15798024687,微信详谈。

计划撰写:

基于Kaldi开发安卓离线语音识别项目(二)语音技能探讨

基于Kaldi开发安卓离线语音识别项目(三)语音识别流程

基于Kaldi开发安卓离线语音识别项目(四)实现中文语音识别

基于Kaldi开发安卓离线语音识别项目(五)实现唤醒词识别及唤醒回应

基于Kaldi开发安卓离线语音识别项目(六)识别效果优化探讨

数据结构算法复习笔记

高数、线代、离散、概率论与数理统计复习笔记

计组、计网、计操复习笔记

自然语言处理学习笔记

欢迎感兴趣的朋友持续关注,一起探讨。感谢您的浏览。


作者:诗酒赴韶华



kaldi

需要 登录 后方可回复, 如果你还没有账号请 注册新账号