离线语音输入法_离线文字转语音工具「建议收藏」

离线语音输入法_离线文字转语音工具「建议收藏」是否正无奈离线语音昂贵?请安心,基于开源kaldi封装好的安卓离线语音识别组件,速来取用!lib-share-asr组件”持续更编“_kaldiandroid

基于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. 等待完成

四、组件集成

封装后,离线语音识别功能以三种形式对外提供:

  1. Activity(依赖界面,已实现)
  2. Service(后台运行,已实现)
  3. 普通类(封装度最高,仍在进一步测试)

下面主要讲解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.运行效果

在这里插入图片描述
在这里插入图片描述

  1. 唤醒词:小菲(连着呼唤”小菲小菲”可提高识别率)

  2. 智能家居设备控制测试:

    打开房间灯
    打开客厅空调
    关闭客厅电视
    设备回应”操作成功”

    语音识别结果示例:
    在这里插入图片描述

2. 唤醒词识别

演示视频待更新

3. 家居设备操作技能识别

演示视频在哔哩哔哩审核中

4. 音视频通话技能识别

演示视频在哔哩哔哩审核中

想要真正操控,可以在设备USB端接智能家居ZigBee模块等其它局域型家居网络。即可实现离线语音控制设备。

在这里插入图片描述

六、附录

1.添加技能

在这里插入图片描述

模块中已集成部分的智能家居控制控制语句,以及唤醒词“小菲”。

2.ShareScreen智屏安卓项目架构

在这里插入图片描述

3. 计划

计划优化:

  • 多麦优化
  • 稍模匹配

计划撰写:

  • 基于Kaldi开发安卓离线语音识别项目(二)语音技能探讨
  • 基于Kaldi开发安卓离线语音识别项目(三)语音识别流程
  • 基于Kaldi开发安卓离线语音识别项目(四)实现中文语音识别
  • 基于Kaldi开发安卓离线语音识别项目(五)实现唤醒词识别及唤醒回应
  • 基于Kaldi开发安卓离线语音识别项目(六)识别效果优化探讨
  • 数据结构算法复习笔记
  • 高数、线代、离散、概率论与数理统计复习笔记
  • 计组、计网、计操复习笔记
  • 自然语言处理学习笔记

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

今天的文章离线语音输入法_离线文字转语音工具「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83084.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注