ASR项目实战-构建Kaldi

这篇具有很好参考价值的文章主要介绍了ASR项目实战-构建Kaldi。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作

安装构建时依赖的基础软件

软件清单如下:

  • bzip2
  • python3
  • automake
  • libtool
  • cmake
  • gcc
  • g++
  • gfortran
  • git
  • subversion

不同平台安装软件的方式不同,比如可以使用yum或者apt-get等。

下载开源软件

软件清单如下:

  • Libunwind
  • glog
  • OpenFST
  • OpenBLAS
  • Kaldi

按照一定的规则,将下载后的文件放在指定目录,如下是样例

opensrc
    glog
        glog-0.4.0.zip
    Libunwind
        libunwind-1.3.1-src.zip
    Kaldi
        kaldi-master.zip
    OpenFST
        openfst-1.6.7.tar.gz
    OpenBLAS
        OpenBLAS-0.3.6.tar.gz
install
    usr
        local
            bin
            sbin
            include
            lib
            lib64
script
    build.sh

构建脚本

build.sh的内容,如下为样例:


BUILD_CORE_NUM=8
SCRIPT_FILE=`readlink -f $0`
SCRIPT_ROOT=`dir ${SCRIPT_FILE}`
BUILD_ROOT=`dir ${SCRIPT_ROOT}`
SOURCE_ROOT=${BUILD_ROOT}/opensrc

INSTALL_ROOT=${BUILD_ROOT}/install/usr/local
export INSTALL_ROOT
PATH=${INSTALL_ROOT}/bin:${INSTALL_ROOT}/sbin:${PATH}
export PATH
LD_LIBRARY_PATH=${INSTALL_ROOT}/lib:${INSTALL_ROOT}/lib64:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

# Libunwind
VERSION=1.3.1
BUILD_LOG=${SCRIPT_ROOT}/Libunwind.out

rm -f ${BUILD_LOG}
touch ${BUILD_LOG}
cd ${SOURCE_ROOT}/Libunwind
rm -rf libunwind-${VERSION}
unzip -o libunwind-${VERSION}-src.zip
tar vxfz libunwind-${VERSION}.tar.gz
cd libunwind-${VERSION}
./autogen.sh
CFLAGS="-fPIC -I${INSTALL_ROOT}/include" \
    ./configure \
      >> ${BUILD_LOG} 2>&1
make -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1
make install prefix=${INSTALL_ROOT} >> ${BUILD_LOG} 2>&1

# glog
VERSION=0.4.0
BUILD_LOG=${SCRIPT_ROOT}/glog.out

rm -f ${BUILD_LOG}
touch ${BUILD_LOG}
cd ${SOURCE_ROOT}/glog
rm -rf glog-${VERSION}
tar vxfz glog-${VERSION}.tar.gz
cd glog-${VERSION}
./autogen.sh
CXXFLAGS="-fPIC -I${INSTALL_ROOT}/include" \
    LDFLAGS="-L${INSTALL_ROOT}/lib -L${INSTALL_ROOT}/lib64" \
    ./configure \
    --prefix=${INSTALL_ROOT} \
    >> ${BUILD_LOG} 2>&1
make -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1
make install >> ${BUILD_LOG} 2>&1

# OpenBLAS
VERSION=0.3.6
BUILD_LOG=${SCRIPT_ROOT}/OpenBLAS.out

rm -f ${BUILD_LOG}
touch ${BUILD_LOG}
cd ${SOURCE_ROOT}/OpenBLAS
rm -rf OpenBLAS-${VERSION}
rm -f OpenBLAS
tar vxfz OpenBLAS-${VERSION}.tar.gz
ln -s OpenBLAS-${VERSION} OpenBLAS
cd OpenBLAS-${VERSION}
make -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1
make PREFIX=${INSTALL_ROOT} install >> ${BUILD_LOG} 2>&1

# OpenFST
VERSION=1.6.7
BUILD_LOG=${SCRIPT_ROOT}/OpenFST.out

rm -f ${BUILD_LOG}
touch ${BUILD_LOG}
cd ${SOURCE_ROOT}/OpenFST
rm -rf openfst-${VERSION}
tar vxzf openfst-${VERSION}.tar.gz
cd openfst-${VERSION}
CXXFLAGS="-fPIC -I${INSTALL_ROOT}/include" \
    CFLAGS="-fPIC -I${INSTALL_ROOT}/include" \
    LDFLAGS="-L${INSTALL_ROOT}/lib -L${INSTALL_ROOT}/lib64" \
    LIBS="${INSTALL_ROOT}/lib/libglog.a -pthread -lunwind" \
    ./configure \
    --enable-static \
    --enable-shared \
    --enable-far \
    --enable-ngram-fsts \
    --prefix=${INSTALL_ROOT} \
    >> ${BUILD_LOG} 2>&1
make -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1
make install >> ${BUILD_LOG} 2>&1

# Kaldi
VERSION=master
BUILD_LOG=${SCRIPT_ROOT}/Kaldi.out

rm -f ${BUILD_LOG}
touch ${BUILD_LOG}
cd ${SOURCE_ROOT}/Kaldi
rm -rf kaldi-${VERSION}.zip
rm -f kaldi
unzip kaldi-${VERSION}.zip
cd kaldi-${VERSION}/src
CXXFLAGS="-fPIC -I${INSTALL_ROOT}/include" \
    ./configure \
    --static \
    --openblas-root=${INSTALL_ROOT} \
    --static-math=yes \
    --threaded-math=yes \
    --static-fst=yes \
    --fst-version=1.6.7 \
    --fst-root=${INSTALL_ROOT} \
    --use-cuda=no \
    >> ${BUILD_LOG} 2>&1
make clean -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1
make depend -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1
make -j${BUILD_CORE_NUM} >> ${BUILD_LOG} 2>&1

注意事项

OpenFST自身实现一套日志系统,与glog集成时会报符号冲突。当前有用户在官网上提出类似的问题,但没有官方的答复。为了完整利用glog的能力,需要对OpenFST的实现做一定的修改。
修改点主要涉及如下几个文件:

  • src/include/log.h,删除代码中相关的类和变量的定义。

    #include <fst/types.h>
    #include <fst/lock.h>
    
    using std::string;
    // 删除中间出现的代码
    #define ATTRIBUTE_DEPRECATED __attribute__((deprecated))
    
    #endif
    
  • src/include/flags.h,在头部引入glog的头文件,增加如下代码:

    #include <fst/types.h>
    #include <fst/lock.h>
    #include "glog/logging.h"  // 引入glog的头文件
    using std::string;
    
  • src/lib/flags.cc,删除同名的变量。文章来源地址https://www.toymoban.com/news/detail-762904.html

    // DEFINE_int32(v, 0, "verbosity level");
    

到了这里,关于ASR项目实战-构建Kaldi的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASR项目实战-语音识别

    本文深入探讨语音识别处理环节。 本阶段的重点特性为语音识别、VAD、热词、文本的时间偏移、讲话人的识别等。 业界流派众多,比如Kaldi、端到端等,具体选择哪一种,需要综合考虑人员能力、训练数据量和质量、硬件设施、交付周期等,作出相对合理的交付规划。 基于

    2024年02月04日
    浏览(49)
  • ASR项目实战-产品分析

    分析Google、讯飞、百度、阿里、QQ、搜狗等大厂的ASR服务,可以罗列出一款ASR服务所需要具备的能力。 ASR云服务产品,从用户体验、时效性、音频时长,可以划分为如下几类: 实时短音频转写,可以用于支撑输入法、搜索、导航等场景。 实时长音频转写,可以用于支撑视频

    2024年02月04日
    浏览(47)
  • ASR项目实战-架构设计

    一般而言,业务诉求作为架构设计的输入。 对于语音识别产品而言,需满足的需求,举例如下: 功能需求 文件转写。 长文件转写,时长大于60秒,小于X小时,X可以指定为5。 短文件转写,时长小于60秒。 实时语音识别。 长语音识别,时长大于60秒,小于Y小时,Y可以指定为

    2024年02月04日
    浏览(45)
  • ASR项目实战-数据

    使用机器学习方法来训练模型,使用训练得到的模型来预测语音数据,进而得到识别的结果文本,这是实现语音识别产品的一般思路。 本文着重介绍通用语音识别产品对于数据的诉求。 相关要求,如下: 地域,需要覆盖使用人群所在的地域,且数据的比例适中。 口音,需要

    2024年02月04日
    浏览(43)
  • ASR项目实战-决策点

    针对语音识别的产品,分别记录设计、开发过程中的决策点。 对于实时语音识别来说,客户端和服务端之间实时交换语音数据和识别的结果。 客户端在启动识别时,即开始发送语音数据,期望在等待较短的时间后,即收到最初的识别结果。第一段语音数据和第一个识别结果

    2024年02月04日
    浏览(54)
  • ASR项目实战-后处理

    本文深入探讨后处理环节。 在本环节要处理的重要特性有分词、断句、标点符号、大小写、数字等的格式归一等。 和NLP、搜索等场景下的分词含义不同。对于拼音类的语言,比如英语、法语等,句子由多个单词组成,语音输出的结果,需要按需在各个单词之间补充或者去掉

    2024年02月04日
    浏览(39)
  • ASR项目实战-方案设计

    对于语音识别产品的实施方案,给出简易的业务流程,仅供参考。 如下流程图,可以使用如下两个站点查看。 web chart Web Sequence Diagrams 创建文件转写任务 执行文件转写任务 获取转写结果 有两个方案,分别如下。二者差别,比如: 在语音识别的过程中,语音数据是否需要经

    2024年02月04日
    浏览(42)
  • ASR项目实战-前处理

    本文深入探讨前处理环节。 首先介绍一些基本的名词,比如 文件名后缀 文件格式 音频格式 采样率和位深 常见的音频文件,比如 .wav 、 .mp3 、 .m4a 、 .wma 等,这些都代表什么? 仅仅是这类音频文件的后缀而已,不一定和音频文件的编码、音频数据的编码相关。 举例说明:

    2024年02月04日
    浏览(47)
  • ASR项目实战-交付团队的分工

    对于通常的软件项目,参与角色,比如可以有用户,消费者,产品团队,研发团队(研发团队包括开发和测试),运营团队,运维团队,管理团队。 通常认为,用户,负责购买服务的群体,而消费者,负责使用业务的群体。这两个群体,不在本文的讨论范围之内,因此后续的

    2024年02月04日
    浏览(36)
  • quarkus实战之一:准备工作

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《quarkus实战》系列是欣宸在2022年春季推出的又一个精品原创系列,作者将自己对java的热爱渗透到每段文字和每行代码中,全系列秉承欣宸一贯的知识+实战风格,既有知识普及、更有实际操作,在涉

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包