首页 > 其他分享 >ASR项目实战-构建Kaldi

ASR项目实战-构建Kaldi

时间:2023-12-29 22:11:56浏览次数:28  
标签:实战 ASR LOG -- Kaldi VERSION BUILD INSTALL ROOT

准备工作

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

软件清单如下:

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

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

下载开源软件

软件清单如下:

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

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,删除同名的变量。

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

标签:实战,ASR,LOG,--,Kaldi,VERSION,BUILD,INSTALL,ROOT
From: https://www.cnblogs.com/jackieathome/p/17935655.html

相关文章

  • ASR项目实战-语音识别
    本文深入探讨语音识别处理环节。本阶段的重点特性为语音识别、VAD、热词、文本的时间偏移、讲话人的识别等。语音识别业界流派众多,比如Kaldi、端到端等,具体选择哪一种,需要综合考虑人员能力、训练数据量和质量、硬件设施、交付周期等,作出相对合理的交付规划。基于Kaldi的方案,优......
  • JVM-实战篇-GC调优
    1GC调优GC调优指的是对垃圾回收进行调优。GC调优的主要目标是避免由垃圾回收引起的程序性能下降。GC调优的核心分为三部分:通过JVM参数的设置;特定垃圾回收器的JVM参数的设置;解决由频繁的FULLGC引起的程序性能问题。GC调优没有唯一的标准答案,重点学习调优的工具和方法。......
  • JVM-实战篇-内存调优
    1内存溢出和内存泄漏概念:内存泄漏:在Java中如果不在使用一个对象,但是该对象依然在GCROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。内存泄漏绝大多数情况都是由堆内存泄漏引起的,所以后续没特殊说明讨论的均为堆内存泄漏。若持续发生内存泄漏,不管有......
  • 记一次对某杀猪盘站点的实战渗透
    前言昨天半夜看到一篇文章 某菠菜网站渗透实战就想着自己也练一练手,打到一半发现,大师傅们对这类站点已经狠狠的蹂躏了,所以借鉴师傅们的经验,本着锻炼一下,想到哪就记一下,所以写的比较杂乱,其中有没有解决的地方也记录下来的,然后又换了个站点接着走了下去信息收集前台这样看一下其他......
  • Amazon S3 CORS 实战
    AmazonS3(SimpleStorageService)是一项强大的对象存储服务,而跨域资源共享(CORS)是为了在Web应用中安全实现跨域数据传输而设计的标准。在本文中,我们将深入探讨如何在AmazonS3上实战配置CORS,确保安全地处理跨域请求。1.CORS概述1.1同源策略回顾同源策略是浏览器的安全机制,限......
  • Amazon API Gateway CORS 实战
    AmazonAPIGateway是构建和部署RESTfulAPI的托管服务,而跨域资源共享(CORS)是为了在Web应用中安全实现跨域数据传输而设计的标准。在本文中,我们将深入探讨如何在AmazonAPIGateway上实战配置CORS,确保安全地处理跨域请求。1.CORS概述1.1同源策略回顾同源策略是浏览器的安......
  • 程序员必知!适配器模式的实战应用与案例分析
    适配器模式是一种结构型设计模式,它允许不同接口的对象协同工作,它通过将一个类的接口转换成客户希望的另外一个接口,使得不兼容的类可以一起工作。适配器模式提高了类的复用性、系统的灵活性和可扩展性,并降低了系统间的耦合度,在实际应用中,例如电源适配器和数据转换器,以及编程中封装......
  • Amazon CloudFront CORS 实战
    AmazonCloudFront是一项强大的内容分发服务,而跨域资源共享(CORS)则是为了在Web应用中安全实现跨域数据传输而设计的标准。在本文中,我们将探讨如何在AmazonCloudFront上实战配置CORS,确保安全地处理跨域请求。1.CORS概述1.1同源策略回顾同源策略是浏览器的安全机制,限制页面......
  • 【工具篇】Kali下beef实战详细教程
    一、beef安装第一步:安装beef1.首先输入命令进行安装.apt-getinstallbeef-xss发现安装不了,但是有提示.2.根据提示进行输入命令.apt-getupdate3.再输入命令进行安装.apt-getinstallbeef-xss4.直接运行Beef-xss.beef-xss标记处的意思是叫你修改密码(密码输入时不可......
  • # yyds干货盘点 # 盘点一个Python自动化办公实战案例(四)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【钟爱一生】问了一个Python自动化办公的问题,一起来看看吧。【温馨提示】遇到表达不清的,能稍微描述下,想要达成的结果吗?在excel上,或者画图也行。最好是把你想要的结果展示在excel中,另外,你展示的这个表格最好做个小的demo发上来......