ubuntu编译kaldi和vosk

文章目录

  • 前言
  • 一、开源框架的选取
  • 二、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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java控制台打印乘法口诀表

目录 前言具体代码完整代码 前言 背乘法口诀表我没记错话&#xff0c;应该是我们在上小学二年级的时候&#xff0c;相信大家对乘法表相当熟悉&#xff0c;那你知道如何用java打印这个漂亮的表吗&#xff1f;下面咱们一起来学习学习。 具体代码 数字乘法表 关键代码&#xf…

ffmpeg视频滤镜:腐蚀滤镜

滤镜简述 erosion 官网链接> FFmpeg Filters Documentation 这个滤镜会在视频上应用腐蚀操作&#xff0c;腐蚀操作是形态学中一种操作&#xff0c;接触过opencv的同学应该很熟悉。滤镜主要有如下作用&#xff1a; 去除噪声&#xff1a;腐蚀可以帮助去除图像中的小颗粒噪…

大尺寸反射式液晶显示模块行业分析:预计2030年全球市场规模将达到2,020.21百万美元

大尺寸反射式液晶显示模块&#xff08;Large-Size Reflective LCD Module&#xff09;是指采用反射显示技术的液晶显示屏&#xff0c;主要依赖自然光或环境光反射来显示内容&#xff0c;减少了对背光的依赖。这类显示屏常用于户外显示、公共信息系统、可穿戴设备及低能耗电子设…

GANDALF: 基于图的Transformer与数据增强主动学习框架,具有可解释特征的多标签胸部X光分类|文献速递-基于生成模型的数据增强与疾病监测应用

Title 题目 GANDALF: Graph-based transformer and Data Augmentation Active Learning Framework with interpretable features for multi-label chest Xrayclassification GANDALF: 基于图的Transformer与数据增强主动学习框架&#xff0c;具有可解释特征的多标签胸部X光分…

【Unity 安装教程】

Unity 中国官网地址链接 Unity - 实时内容开发平台 | 3D、2D、VR & AR可视化https://unity.cn/首先我们想要安装Unity之前&#xff0c;需要安装Unity Hub&#xff1a; Unity Hub 是 Unity Technologies 开发的一个集成软件&#xff0c;它为使用 Unity 引擎的开发者提供了一…

Linux巡检利器xsos的安装和使用

一、 一般项目基本完成的时候&#xff0c;后期运维工作的重点就是及时的&#xff0c;合理的频率巡检了&#xff0c;巡检的目的主要是及时发现各种各样的问题 那么&#xff0c;自己编写shell脚本是大部分人的第一选择&#xff0c;这里有个比较麻烦的地方&#xff0c;shell脚本…

ctfshow(259->261)--反序列化漏洞--原生类与更多魔术方法

Web259 进入界面&#xff0c;回显如下&#xff1a; highlight_file(__FILE__);$vip unserialize($_GET[vip]); //vip can get flag one key $vip->getFlag();题干里还提示了网站有一个flag.php界面&#xff0c;源代码如下&#xff1a; $xff explode(,, $_SERVER[HTTP_X…

开源限流组件分析(三):golang-time/rate

文章目录 本系列前言提供获取令牌的API数据结构基础方法tokensFromDurationdurationFromTokensadvance 获取令牌方法reverseN其他系列API 令人费解的CancelAt是bug吗 取消后无法唤醒其他请求 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit开源…

Apache Paimon Catalog

Paimon Catalog可以持久化元数据&#xff0c;当前支持两种类型的metastore&#xff1a; 文件系统&#xff08;默认&#xff09;&#xff1a;将元数据和表文件存储在文件系统中。hive&#xff1a;在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。 2.2.1 文件系统…

分布式IO模拟量模块:多领域应用的高效能解决方案

分布式IO模拟量模块是分布式IO系统中的重要组件&#xff0c;用于实现现场设备或过程的模拟量信号的采集、监视和控制。该模块通常与现场总线耦合器配合使用&#xff0c;能够接收来自现场设备的模拟量信号&#xff08;如电流、电压等&#xff09;&#xff0c;并将其转换为数字信…

STM32-Cube定时器TIM

一、内部时钟源 1、创建项目 File → New → STM32 project选择STM32F103C8T6单片机&#xff0c;命名TIM 2、配置单片机 1.打开USART1&#xff0c;方便我们与电脑连接查看数据 开启UART1并开启中断。 2、设置时钟源 开启外部高速晶振 将时钟频率设置为72MHz 设置调试模…

利用飞腾派进行OpenCV开发

实验目标&#xff1a; 完成飞腾平台OpenCV开发。 实验大纲&#xff1a; Mat数据结构加载、显示、保存图像读写像素RGB图像分离彩色图转灰度图 Mat数据结构 Mat是一个类&#xff0c;由两个数据部分组成&#xff1a;矩阵头(大小,通道,数据类型等)和数据块(像素 值)。创建示例…

uniapp uview 上传图片,数据以formData + File 形式传输

期望 后端期望前端给的传参为 formData 形式, 同时文件的数据类型为File 形式. 解决过程 将文件处理为 File 格式 uview 中的 upload 组件点击上传之后不是标准的 File 形式,点击上传单个文件之后的控制台信息如下: [{"url": "blob:http://localhost:8081/…

华为云实战杂记

配置nginx服务器 首先我们拿到一台服务器时&#xff0c;并不知道系统是否存在Nginx我们可以在Linux命令行执行如下命令查看 find / -name nginx* find / -name nginx* 查找所有名字以nginx开头的文件或者目录&#xff0c;我们看看系统里面都有哪些文件先&#xff0c;这样可以快…

【Jenkins】解决在Jenkins Agent节点容器内无法访问物理机的docker和docker compose的问题

解决在Jenkins Agent节点容器内无法访问物理机的docker和docker compose的问题 1. 确定物理机docker和docker compose已经安装2. 编写Jenkins Agent结点docker-compose.yaml配置文件3. 修改docker运行时文件权限4. 启动容器并验证 最近接触到一个发布产物是一个 docker镜像的项…

【力扣】GO解决子序列相关问题

文章目录 一、引言二、动态规划方法论深度提炼子序列问题的通用解法模式 三、通用方法论应用示例&#xff1a;最长递增子序列&#xff08;LeetCode题目300&#xff09;Go 语言代码实现 四、最长连续递增序列&#xff08;LeetCode题目674&#xff09;Go 语言代码实现 五、最长重…

EXCELL中如何两条线画入一张图中,标记坐标轴标题?

1&#xff0c;打开excel&#xff0c;左击选中两列&#xff0c; 2&#xff0c;菜单栏>“插入”>”二维折线图”选中一个 3&#xff0c;选中出现的两条线中的一条右击>最下一行&#xff0c;“设置数据系列格式” 4&#xff0c;右测“系列选项中”>点击“次坐标轴” 5…

邮件系统SSL加密传输,保护你的电子邮件免受网络威胁

在互联网的浪潮中&#xff0c;企业数字化转型的步伐不断加快。企业邮箱作为数字化应用的重要组成部分&#xff0c;已成为员工沟通、协同工作和企业管理的关键工具。但是在公共网络安全性普遍较弱的背景下&#xff0c;黑客容易侵入企业网络&#xff0c;监控流量&#xff0c;截获…

私域朋友圈运营

今天必须给大家分享一份超棒的朋友圈运营思维导图 有了它&#xff0c;你可以逐步打造属于自己的精彩朋友圈&#x1f389;。无论是想分享生活点滴&#x1f4a7;&#xff0c;还是展示个人魅力✨&#xff0c;又或者推广自己的业务&#x1f4c8;&#xff0c;这份思维导图都能给你指…

vuetify学习笔记(v-app和v-responsive)

我最近在学习vuetify3&#xff0c;我以前是用element plus和taiwind css。vuetify的一个好处是&#xff0c;它不仅是一个向element plus一样提供好用的组件库&#xff0c;而且还提供了向taiwind css一样的原子类&#xff0c;可以通过类名方便的定义组建的样式。以前element plu…