准备工作

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

软件清单如下:

  • 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项目实战-构建Kaldi的更多相关文章

  1. Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面

    制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开 ...

  2. Vue2+VueRouter2+webpack 构建项目实战(二):目录以及文件结构

    通过上一篇博文<Vue2+VueRouter2+webpack 构建项目实战(一):准备工作>,我们已经新建好了一个基于vue+webpack的项目.本篇文章详细介绍下项目的结构. 项目目 ...

  3. 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战

    "使用ctkPluginFramework插件系统构建项目实战",这篇文章是写博客以来最纠结的一篇文章. 倒不是由于技术都多么困难,而是想去描写叙述一个项目架构採用ctkPlugi ...

  4. Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表

    Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表:  Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

  5. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  6. K8S实战-构建Django项目-03-使用共享存储

    上篇博文,发布之后,正好跟着双十一,不知道大家剁手了没~~.好啦,言归正传先声明一下,每周1,3,5更新教程,大家如果想要了解更多的教程可以重温一下之前的教程或者,关注崔格拉斯 公众号,大家想要源码的 ...

  7. SpringBoot+Maven 多模块项目的构建、运行、打包实战

    前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...

  8. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  9. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...

  10. webpack 教程 那些事儿04-webpack项目实战分析

    这节主要讲解真正项目用用到的 webpack配置问题,项目实战篇 就像我们不会完全做一个项目,不用别人的轮子一样.这个配置我们借用 vue-cli 搭建的配置来研究,因为它已经足够优秀. 有了前面的基 ...

随机推荐

  1. 用一个示例来学习DockerFile

    在Docker的世界里,我们经常会听到Dockerfile这个词.那么,什么是Dockerfile?它如何工作?本文将简要介绍Dockerfile的基本概念,原理以及一些常用的Dockerfile命令 ...

  2. SpringBoot + Redis + Token 解决接口幂等性问题

    前言 SpringBoot实现接口幂等性的方案有很多,其中最常用的一种就是 token + redis 方式来实现. 下面我就通过一个案例代码,帮大家理解这种实现逻辑. 原理 前端获取服务端getTo ...

  3. 3 分钟把高质量 AI 知识库 FastGPT 装进企业微信

    FastGPT V4 已经上线,直接冲上 GitHub Trending. 如果你还不知道 FastGPT 是什么,可以先去看看作者的介绍 使用 FastGPT 构建高质量 AI 知识库 非常多的企业 ...

  4. mysql 管理员常用命令

    1.创建用户 create user admin@localhost identified by 'password'; 2.赋权 grant privileges ON database.table ...

  5. 将Python程序打包成Linux可执行文件

    将Python程序打包成Linux可执行文件 安装环境 首先我们要安装pip,命令如下: sudo apt install python3-pip 使用的工具是pyinstaller,打开终端输入su ...

  6. PostgreSQL学习笔记-4.基础知识:空值NULL、别名AS

    NULL 值代表遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. 语法 当创建表时,NULL 的基本语法如下: CREATE T ...

  7. 第七单元《中国传统文化与管理》单元测试 mooc

    第七单元<中国传统文化与管理>单元测试 返回 本次得分为:8.00/10.00, 本次测试的提交时间为:2020-08-30, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 ...

  8. P8679 [蓝桥杯 2019 省 B] 填空问题 题解

    P8679 [蓝桥杯 2019 省 B] 填空问题 题解 题目传送门 欢迎大家指出错误并联系这个蒟蒻 更新日志 2023-05-25 21:02 文章完成 2023-05-27 11:34 文章通过审 ...

  9. VLAN虚拟网络

    VLAN 名称:vlan 虚拟局域网(virtual LAN) 用途 由于交换机所有的端口都在同一广播域,只要发送广播会产生大量的垃圾信息,同时会有病毒的安全隐患(病毒). 为了解决上述问题 1.物理 ...

  10. Flask后端开发(一)-基础知识和前期准备

    目录 1.背景介绍 1.1. 项目背景 1.2. 项目难点 1.3. 项目环境 2. flask后端开发实现的功能 3. flask部署和前后端对接 3.1. flask运行配置和服务器部署 3.2. ...