ASR项目实战-从源码开始构建Kaldi

准备工作

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

软件清单如下:

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

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

下载开源软件

软件清单如下:

  • Libunwind
  • glog
  • OpenFST
  • OpenBLAS
  • Kaldi

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

opensrcglogglog-0.4.0.zipLibunwindlibunwind-1.3.1-src.zipKaldikaldi-master.zipOpenFSTopenfst-1.6.7.tar.gzOpenBLASOpenBLAS-0.3.6.tar.gz
installusrlocalbinsbinincludeliblib64
scriptbuild.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}/opensrcINSTALL_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.outrm -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.outrm -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.outrm -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.outrm -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.outrm -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项目实战-从源码开始构建Kaldi相关推荐

  1. java web网上商城项目实战与源码

    java web网上商城项目实战与源码 点击这里,轻松完成毕设https://x-x.fun/i/AAbf595445aBT

  2. android项目实战博学谷源码_阿里爆款SpringBoot项目实战PDF+源码+视频分享

    前言 关于SpringBoot网络上有太多的博客跟资料,其影响力想必不用我多说了.它作为当前最流行的微服务框架,不但使用更加简单,而且功能更加丰富.性能更加稳定和健壮.其"约定大于配置&qu ...

  3. 【首次分享】企业级车载系统开发指南+项目实战(附源码)

    前言 Android 现在已经拥有十分成熟的开发体系,成熟也说明了这个系统的带来的开发红利消退了,说通俗点就是可以跳槽岗位少了,随着最近几年小程序和公众号崛起,让app应用需求量断崖式下降.所以现在更 ...

  4. python网络爬虫技术 江吉彬下载 pdf_精通Python网络爬虫:核心技术、框架与项目实战 附源码 中文pdf完整版[108MB]...

    精通Python网络爬虫这是一本实战性的网络爬虫秘笈,不仅讲解了如何编写爬虫,而且还讲解了流行的网络爬虫的使用. 全书分为4个部分:第壹部分对网络爬虫做了概要性的介绍,主要介绍了网络爬虫的常识和所涉及 ...

  5. Django项目实战(附源码免费下载)

    制作图书管理系统(末尾附源码) 第一步先更改settings.py里面的必要配置,更改或附件项如下 INSTALLED_APPS = ['django.contrib.admin','django.c ...

  6. 最全16套vue.js入门和项目实战+素材+源码

    vue.js实战项目17个 包括 电商实战 音乐播放器 团购网 新闻客户端 图书管理 移动端APP 点餐系统 小米阅读开发 商城 vue+Python前后端分离打造电商系统 vue+node构建大型商 ...

  7. Vue.js快速入门+项目实战(源码)

    Vue.js电影网站项目 github 链接(如果觉得有用记得start哦~): 项目源代码链接 目录 前言 安装 Vue.js 1.Vue.js主要特性 2.Vue.js实例 3.Vue.js路由 ...

  8. python精彩编程200例-200G的Python初高级教程+项目实战案例源码,让你做有钱途的人才...

    2018年1月16日上午,教育部正式将人工智能.物联网.大数据处理正式划入高中新课标,这就意味着现在的学生16岁就要开始学习编程了! 据统计,在所有专业级别的 39000 名开发人员中,有超过四分之一 ...

  9. java cms视频_领航致远JAVA CMS系统项目实战 视频+源码精品实战项目

    [课程内容] 01 CMS系统功能需求简介 02 如何采用用例分析方法来理解需求 03 后台管理系统用例 04 实现验证码的初步思路 05 生成验证码 06 判断验证码是否正确 07 返回登录页面时, ...

最新文章

  1. 如何在算法交易中使用AI?摩根大通发布新版指南
  2. [J2ME]手机看交通监视器实时录像 实现说明
  3. ffmpeg常用转换命令,支持WAV转AMR
  4. 【Python基础】Python之collections库-Counter
  5. php处理文档流,html的文档流是什么?html文档流简介
  6. java 短路判断_java中和的区别(|和|同理)
  7. 将一个列表的奇数列赋值到另外一个列表
  8. mysqldump 导出数据库出错
  9. 检查oracle安装必须包,Linux安装oracle11gR2官方步骤
  10. 基于51单片机的pid算法温度控制系统protues仿真
  11. 理解 BLS 签名算法
  12. CSAPP实验记录(二)Bomb Lab
  13. JVAV面试常考基础概念
  14. 创蓝253短信平台代码实现
  15. 海报与Banner的区别
  16. 西门子PC ADAPTER USB A2无法连接PLC的坑
  17. jrtplib收发实例
  18. 学生网站模板:旅游出行网站设计——旅游网设计(15页) HTML+CSS+JavaScript 学生DW网页设计作业成品 学生旅游网站模板
  19. jira是干什么_JIRA简介及基本概念
  20. Accessible only as active check

热门文章

  1. 【vue,SpringBoot,Mybatis】 关于多条件搜索表单
  2. HP暗影精灵7笔记本OMEN16.1inch Gaming Laptop PC16-b0000原装出厂Win11系统恢复原厂OEM系统
  3. 【优化】共轭函数(Conjugate Function)超简说明
  4. MAC库乐队、APP残留清理
  5. 【接口自动化】3.写接口自动化case要注意的点
  6. antv G6 + react umi(vue,ng) 实现节点红点(badges)
  7. MindSpore如何实现自定义训练
  8. 进程间通讯(IPC)(有信号捕捉函数)
  9. 已成功与服务器建立连接,但是在登录前的握手期间发生错误
  10. FFMPEG保存视频流数据至本地(rtsp转mp4)