文章目录
- 前言
- 一、开源框架的选取
- 二、kaldi编译
- 三、编译vosk
- 方案一
- 方案二
前言
由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源框架,选中了vosk这个开源库,但是依赖kaldi,网上对于kaldi介绍的很多,但是没有结合vosk的,这里记录一下。
|版本声明:山河君,未经博主允许,禁止转载
一、开源框架的选取
-
Kaldi
简介: Kaldi 是一个广泛使用的开源语音识别库,支持深度学习,性能非常强大。适用于研究和工业应用。
特点:
提供丰富的语音识别工具集。
支持多种模型格式,包括基于时间延迟神经网络(TDNN)和 LSTM 的模型。
支持多平台,兼容 ARM64,但需要编译和调整。
链接: Kaldi -
Vosk
简介: Vosk 是基于 Kaldi 的语音识别引擎,提供了更简单的 API,并且支持多种语言。Vosk 还适用于资源有限的设备。
特点:
提供流式语音识别。
占用内存较小,适合在 ARM64 平台上使用。
支持多语言模型。
链接: Vosk -
PocketSphinx
简介: 这是 CMU Sphinx 项目的轻量级版本,针对嵌入式系统和移动设备进行了优化。
特点:
适合资源受限的环境,如 ARM64。
提供了基础语音识别功能,支持自定义语言模型。
占用资源少,安装简单。
链接: PocketSphinx -
DeepSpeech
简介: Mozilla 的 DeepSpeech 是一个基于深度学习的语音识别引擎,使用卷积神经网络来提供语音识别能力。
特点:
开源的 STT(语音转文本)引擎,基于百度的 DeepSpeech 研究。
性能较好,但资源消耗相对较高,需要较强的硬件资源。
可以在 ARM64 上编译和运行,但要确保计算能力足够。
链接: DeepSpeech -
Julius
简介: Julius 是一个开源的大词汇量语音识别引擎,主要面向研究用途,但也支持嵌入式设备。
特点:
支持连续语音识别。
占用资源少,适合 ARM64 平台。
提供 C++ 接口,支持定制模型。
链接: Julius
二、kaldi编译
- 安装依赖
sudo apt-get update
sudo apt-get install git make automake autoconf sox libatlas-base-dev gfortran subversion python3
- 下载
git clone https://github.com/kaldi-asr/kaldi.git
cd kaldi
- 编译工具
cd tools
make
- 编译源码
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型号,这个地方比较麻烦,所以笔者采用的是前者来编译的
- 下载intel算法库
sudo apt-get install intel-mkl
这里需要注意默认安装路径一般是/opt/intel/
,但是笔者的是在/usr/lib
下,貌似是这个
- 设置intel-mkl环境
export MKLROOT=/opt/intel/oneapi/mkl/latest
export LD_LIBRARY_PATH=$MKLROOT/lib/intel64:$LD_LIBRARY_PATH
这里填刚刚下载安装的路径
- 开始编译
时间会比较长
./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
方案二
- 安装依赖
sudo apt update
sudo apt install cmake build-essential libffmpeg libasound2-dev libportaudio2
- 下载源码
git clone https://github.com/alphacep/vosk-api.git
cd vosk-api
- 修改脚本
因为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})
- 编译
cd src/
mkdir build
cd build
cmake ..
make
- 出现错误
在编译的时候会出现错误
home/aaron/workplace/audioread/kaldi/tools/openfst-1.8.3/include/fst 没有types.h文件
这是因为kaldi最新使用的openfst版本是1.8.3,是最新的,这边需要改为openfst-18.0之前的
- 回到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
- 解压编译安装
记得一定要指定生成路径在本路径下,否则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
- 指定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
- 重新编译
make -j clean depend
make -j8
如果对您有所帮助,请帮忙点个赞吧!