”持续更编“
前言近期在开发智能家居领域产品——带屏智能音箱,其中语音场景要求在、离线语音识别支持。由于,讯飞、百度等大厂,收费颇高。对于,穷苦大众的小生,撸起袖子,就在Github上遨游。果然,邂逅了两位梦中情人——Pocketsphinx和Kaldi。
作为老资格的Pocketsphinx已经被后生Kaldi拍在沙滩上,但还是对Pocketsphinx做了一番实践(详情可在小生的博客中浏览)。最后,还是选择使用Kaldi,较于前者,Kaldi识别率更高,误识别率更低。
但是,既然是开源,所以很多时候,还需要在手中雕琢,方能显其美。在对kaldi进行一系列封装以后,将一步步开源封装成果。将初步Kaldi封装后,加入了个人的安卓组件库。
本篇博客,着重讲解lib-share-asr组件的集成以及使用。
// 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)获取每次的识别结果。
功能测试
点击运行安装在手机上,就可以体验离线语音识别了。
唤醒词:小菲 智能家居设备控制计划优化
多麦优化 稍模匹配这段时期,开发任务完成后,将所有的成果在Github上开源。
感兴趣的朋友,15798024687,微信详谈。
计划撰写:
基于Kaldi开发安卓离线语音识别项目(二)语音技能探讨
基于Kaldi开发安卓离线语音识别项目(三)语音识别流程
基于Kaldi开发安卓离线语音识别项目(四)实现中文语音识别
基于Kaldi开发安卓离线语音识别项目(五)实现唤醒词识别及唤醒回应
基于Kaldi开发安卓离线语音识别项目(六)识别效果优化探讨
数据结构算法复习笔记
高数、线代、离散、概率论与数理统计复习笔记
计组、计网、计操复习笔记
自然语言处理学习笔记
等
欢迎感兴趣的朋友持续关注,一起探讨。感谢您的浏览。