ubuntu编译kaldi和vosk

news2024/11/26 0:56:50

文章目录

  • 前言
  • 一、开源框架的选取
  • 二、kaldi编译
  • 三、编译vosk
    • 方案一
    • 方案二


前言

由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源框架,选中了vosk这个开源库,但是依赖kaldi,网上对于kaldi介绍的很多,但是没有结合vosk的,这里记录一下。

|版本声明:山河君,未经博主允许,禁止转载

一、开源框架的选取

  1. Kaldi
    简介: Kaldi 是一个广泛使用的开源语音识别库,支持深度学习,性能非常强大。适用于研究和工业应用。
    特点:
    提供丰富的语音识别工具集。
    支持多种模型格式,包括基于时间延迟神经网络(TDNN)和 LSTM 的模型。
    支持多平台,兼容 ARM64,但需要编译和调整。
    链接: Kaldi

  2. Vosk
    简介: Vosk 是基于 Kaldi 的语音识别引擎,提供了更简单的 API,并且支持多种语言。Vosk 还适用于资源有限的设备。
    特点:
    提供流式语音识别。
    占用内存较小,适合在 ARM64 平台上使用。
    支持多语言模型。
    链接: Vosk

  3. PocketSphinx
    简介: 这是 CMU Sphinx 项目的轻量级版本,针对嵌入式系统和移动设备进行了优化。
    特点:
    适合资源受限的环境,如 ARM64。
    提供了基础语音识别功能,支持自定义语言模型。
    占用资源少,安装简单。
    链接: PocketSphinx

  4. DeepSpeech
    简介: Mozilla 的 DeepSpeech 是一个基于深度学习的语音识别引擎,使用卷积神经网络来提供语音识别能力。
    特点:
    开源的 STT(语音转文本)引擎,基于百度的 DeepSpeech 研究。
    性能较好,但资源消耗相对较高,需要较强的硬件资源。
    可以在 ARM64 上编译和运行,但要确保计算能力足够。
    链接: DeepSpeech

  5. Julius
    简介: Julius 是一个开源的大词汇量语音识别引擎,主要面向研究用途,但也支持嵌入式设备。
    特点:
    支持连续语音识别。
    占用资源少,适合 ARM64 平台。
    提供 C++ 接口,支持定制模型。
    链接: Julius

二、kaldi编译

  1. 安装依赖
sudo apt-get update
sudo apt-get install git make automake autoconf sox libatlas-base-dev gfortran subversion python3
  1. 下载
git clone https://github.com/kaldi-asr/kaldi.git
cd kaldi
  1. 编译工具
cd tools
make
  1. 编译源码
cd ../src
./configure
make

到这里就该注意了,如果是在ubuntu上编译,会出现找不到算法库的情况

Configuring KALDI to use MKL.
Backing up kaldi.mk to kaldi.mk.bak ...
Checking compiler c++ ...
Checking OpenFst library in /home/aaron/workplace/audioread/kaldi/tools/openfst-1.8.3 ...
Performing OS specific configuration ...
On Linux: Checking for linear algebra header files ...
Configuring MKL library directory: ***configure failed: Could not find the MKL library directory.
Please use the switch --mkl-root and/or --mkl-libdir if you have MKL installed,
or try another math library, e.g. --mathlib=OPENBLAS (Kaldi may be slower). ***

这里有两种解决方案,一种使用intel的算法库,另外一种是使用OpenBLAS库作为替代,但是后者如果是在虚拟机中编译,会需要提供cpu型号,这个地方比较麻烦,所以笔者采用的是前者来编译的

  1. 下载intel算法库
sudo apt-get install intel-mkl

这里需要注意默认安装路径一般是/opt/intel/,但是笔者的是在/usr/lib下,貌似是这个

  1. 设置intel-mkl环境
export MKLROOT=/opt/intel/oneapi/mkl/latest
export LD_LIBRARY_PATH=$MKLROOT/lib/intel64:$LD_LIBRARY_PATH

这里填刚刚下载安装的路径

  1. 开始编译
    时间会比较长
./configure --shared --use-cuda=no --mathlib=MKL --mkl-libdir=/opt/intel/mkl/lib/intel64
make -j8

在这里插入图片描述

如果是只使用kaldi到这里就结束了,但是如果要使用vosk还需要指定kaldi某些库的的步骤

三、编译vosk

如果想编译vosk,个人建议使用官方推荐的kaldi,因为kaldi更新后的版本vosk有些时候还没有满足,所以想要快速编译就按照方案一。如果希望使用kaldi特定版本可以参考方案二,但是截至当前版本,是存在一些比较大的坑的,方案二中会介绍,但是如果后面更新版本后,可能会存在其他坑

方案一

cd <KALDI_ROOT>
git clone -b vosk --single-branch --depth=1 https://github.com/alphacep/kaldi /opt/kaldi
cd kaldi/tools
make openfst cub
./extras/install_openblas_clapack.sh
cd ../src
./configure --mathlib=OPENBLAS_CLAPACK --shared
make -j 10 online2 lm rnnlm
cd ../..
git clone https://github.com/alphacep/vosk-api --depth=1
cd vosk-api/src
KALDI_ROOT=<KALDI_ROOT> make

在这里插入图片描述

方案二

  1. 安装依赖
sudo apt update
sudo apt install cmake build-essential libffmpeg libasound2-dev libportaudio2
  1. 下载源码
git clone https://github.com/alphacep/vosk-api.git
cd vosk-api
  1. 修改脚本
    因为vosk依赖kaldi,所以需要吧kaldi指定一下
vi ./CMakeLists.txt

找到这一行直接注释掉,为了避免找不到kaldi模块,直接指定

#find_package(kaldi REQUIRED)

添加

set(KALDI_INCLUDE_DIR "/home/aaron/workplace/audioread/kaldi/src")
set(KALDI_LIB_DIR "/home/aaron/workplace/audioread/kaldi/src/lib")

include_directories(${KALDI_INCLUDE_DIR})
link_directories(${KALDI_LIB_DIR})

# 添加 Kaldi 库
find_library(KALDI_LIB kaldi PATHS ${KALDI_LIB_DIR})

set(KALDI_INCLUDE_DIR "/home/aaron/workplace/audioread/kaldi/src")
set(KALDI_LIB_DIR "/home/aaron/workplace/audioread/kaldi/src/lib")

include_directories(${KALDI_INCLUDE_DIR})
link_directories(${KALDI_LIB_DIR})

# 添加 Kaldi 库
find_library(KALDI_LIB kaldi PATHS ${KALDI_LIB_DIR})

  1. 编译
cd src/
mkdir build
cd build
cmake ..
make
  1. 出现错误
    在编译的时候会出现错误
home/aaron/workplace/audioread/kaldi/tools/openfst-1.8.3/include/fst 没有types.h文件

这是因为kaldi最新使用的openfst版本是1.8.3,是最新的,这边需要改为openfst-18.0之前的

  1. 回到Kaldi的tools目录,下载1.6.7版本的OpenFst
cd /home/aaron/workplace/audioread/kaldi/tools
wget http://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.8.0.tar.gz
  1. 解压编译安装
    记得一定要指定生成路径在本路径下,否则make install没有权限,而且后面kaldi寻找路径是在tools目录下寻找版本
tar -xzf openfst-1.8.0.tar.gz
cd openfst-1.8.0
--prefix=/home/aaron/workplace/audioread/kaldi/tools/openfst-1.8.0 --enable-shared --enable-static --enable-far --enable-ngram-fsts
make -j $(nproc)
make install
  1. 指定kaldi的OpenFst版本
cd /home/aaron/workplace/audioread/kaldi/src
./configure --fst-root=/home/aaron/workplace/audioread/kaldi/tools/openfst-1.8.0 --fst-version=1.8.0
  1. 重新编译
make -j clean depend
make -j8

如果对您有所帮助,请帮忙点个赞吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软:全球每天网络攻击超6亿次

《2024年微软数字防御报告》揭示了一个复杂的全球网络安全格局&#xff0c;每天发生超过6亿次网络攻击。报告强调了勒索软件、网络钓鱼和身份泄露事件的增加&#xff0c;以及网络犯罪团伙和国家行为者之间的合作。它强调了人工智能在攻击和防御中的重要作用&#xff0c;敦促组织…

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校校园点餐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页功能界面图 用户注册、登录界面图 我…

Java中的程序、进程、线程、并行和并发

程序 一段静态的代码进程 ① 正在内存中运行的“程序” ② 是操作系统调度和分配资源的最小单位线程 ① 进程可进一步细化为线程&#xff0c;是程序内部的一条执行路径&#xff0c;一个进程中至少有一个线程 ② 线程是CPU调度和执行的最小单位 ③ 多个线程共享相同的内存单元&a…

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了&#xff0c;所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…

EasyExcel_动态表头的导入导出

文章目录 前言一、EasyExcel二、使用步骤1.引入jar包2.数据准备2.1 数据库 3.方法实例3.1 无实体的导入3.1.1 Controller3.1.2 Service3.1.3 Listener3.1.4 Utils3.1.5 无实体导入数据返回说明 3.2 无实体的导出3.2.1 无实体导出数据(这里只贴出关键代码,Service代码处理)3.2.2…

凸优化学习

认为学习凸优化理论比较合适的路径是&#xff1a; 学习/复习线性代数和&#xff08;少量&#xff09;高等数学的知识。 实际上&#xff0c;凸优化理论综合使用了线性代数和微积分的相关知识&#xff0c;比如方向导数&#xff0c;雅克比矩阵&#xff0c;海森矩阵&#xff0c;KKT…

大数据-189 Elasticsearch - ELK 日志分析实战 - 环境配置启动 Nginx、ZK、Kafka、ES、Kibana

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

写出Windows操作系统内核的程序员,70多岁,还去办公室敲代码

大家好&#xff0c;我是二哥呀。 微软前 CEO 鲍尔默曾说过一句言简意赅的话&#xff1a;“没有 Dave&#xff0c;就没有今天的微软”。 可见 Dave 在微软的分量。Dave 的全名叫 Dave Cutler&#xff0c;微软的超级程序员&#xff0c;Windows NT 操作系统内核的缔造者&#xf…

【Java】ArrayList相关操作及其案例

ArrayList相当于集合&#xff0c;作为一种容器存储数据&#xff0c;与数组类似。不同的是&#xff0c;ArrayList中长度可变&#xff0c;而数组长度不可变。 ArrayList相关API 构造器 public ArrayList() 创建一个空的集合对象 ArrayList<String>arrnew ArrayList<>…

RHCE【web服务器】

目录 一、web服务器简介 1、什么是www 2、网址及HTTP简介 3、http协议请求的工作过程&#xff1a; 二、web服务器的类型 1、仅提供用户浏览的单向静态网页 2、提供用户互动接口的动态网站 三、web服务器基本配置 四、虚拟主机配置实战 1、搭建静态网站--基于http协议…

草地杂草数据集野外草地数据集田间野草数据集YOLO格式VOC格式目标检测计算机视觉数据集

一、数据集概述 数据集名称&#xff1a;杂草图像数据集 数据集是一个包含野草种类的集合&#xff0c;其中每种野草都有详细的特征描述和标记。这些数据可以包括野草的图片、生长习性、叶片形状、颜色等特征。 1.1可能应用的领域 农业领域: 农业专家和农民可以利用这一数据集来…

Spring Boot:植物健康监测的智能先锋

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了植物健康系统的开发全过程。通过分析植物健康系统管理的不足&#xff0c;创建了一个计算机管理植物健康系统的方案。文章介绍了植物健康系统的系统分析部分&…

VScode分文件编写C++报错 | 如何进行VScode分文件编写C++ | 不懂也能轻松解决版

分文件编写遇到的问题 分文件编写例子如下所示&#xff1a; 但是直接使用 Run Code 或者 调试C/C文件 会报错如下&#xff1a; 正在执行任务: C/C: g.exe 生成活动文件 正在启动生成… cmd /c chcp 65001>nul && D:\Librarys\mingw64\bin\g.exe -fdiagnostics-col…

RabbitMQ常见问题持续汇总

文章目录 消息分发不公平分发限流-basic.qos主要功能使用场景示例代码 消费者默认concurrency数量prefetch和concurrency结合&#xff1f; spring.rabbitmq.template.retry.enabledtrue和spring.rabbitmq.listener.simple.retry.enabledtrue有什么区别1. spring.rabbitmq.templ…

中药大数据(二)中药方剂表设计与导入

中药大数据&#xff08;二&#xff09;中药方剂表设计与导入 最近在做一个中药大数据的单子&#xff0c;已经爬取到了中药和方剂的数据&#xff0c;现在根据爬取到的数据设计数据库和导入neo4j形成知识图谱。 1 中药方剂数据表设计 爬取到的字段有 方剂名 title 处方 presc…

自动化部署-01-jenkins安装

文章目录 前言一、下载安装二、启动三、问题3.1 jdk版本问题3.2 端口冲突3.3 系统字体配置问题 四、再次启动五、配置jenkins5.1 解锁5.2 安装插件5.3 创建管理员用户5.4 实例配置5.5 开始使用5.6 完成 总结 前言 spingcloud微服务等每次部署到服务器上&#xff0c;都需要本地…

【判断推理】逻辑论证之数量论证

3.1 比例类论证 看比例而不是单看分子&#xff01; 逻辑类似于抛开剂量谈毒性没有价值。不明确基数大小&#xff0c;单纯比较数量没有价值。 本题中&#xff0c;平民总数可能有1000万&#xff0c;军队综述可能就50万&#xff0c;死亡率不可能相似。 论点&#xff1a;家人吸…

利用Pixabay API获取免费图片和视频的完整指南

视觉内容在吸引受众和有效传达信息方面发挥着举足轻重的作用。然而&#xff0c;获取这些内容往往需要付出高昂的代价。 幸运的是&#xff0c;Pixabay 提供了 440 多万种免费资产&#xff0c;从令人惊叹的照片到引人入胜的视频&#xff0c;所有这些都可以通过其 API 访问。 在…

处理Hutool的Http工具上传大文件报OOM

程序环境 JDK版本&#xff1a; 1.8Hutool版本&#xff1a; 5.8.25 问题描述 客服端文件上传主要代码&#xff1a; HttpRequest httpRequest HttpUtil.createPost(FILE_UPLOAD_URL); Resource urlResource new UrlResource(url, fileName); httpRequest.form("file&q…

nrm之npm镜像源管理工具(NPMRegistryManager)

1. Whats is nrm? 1. 官网地址 https://github.com/Pana/nrm https://www.npmjs.com/package/nrm 2. 关于nrm nrm can help you easy and fast switch between different npm registries, now include: npm, cnpm, taobao, nj(nodejitsu). nrm可以帮助您在不同的 npm 注册表…