ASR项目实战-构建Kaldi
准备工作
安装构建时依赖的基础软件
软件清单如下:
- 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的更多相关文章
- Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面
制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开 ...
- Vue2+VueRouter2+webpack 构建项目实战(二):目录以及文件结构
通过上一篇博文<Vue2+VueRouter2+webpack 构建项目实战(一):准备工作>,我们已经新建好了一个基于vue+webpack的项目.本篇文章详细介绍下项目的结构. 项目目 ...
- 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战
"使用ctkPluginFramework插件系统构建项目实战",这篇文章是写博客以来最纠结的一篇文章. 倒不是由于技术都多么困难,而是想去描写叙述一个项目架构採用ctkPlugi ...
- Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表
Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表: Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...
原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...
- K8S实战-构建Django项目-03-使用共享存储
上篇博文,发布之后,正好跟着双十一,不知道大家剁手了没~~.好啦,言归正传先声明一下,每周1,3,5更新教程,大家如果想要了解更多的教程可以重温一下之前的教程或者,关注崔格拉斯 公众号,大家想要源码的 ...
- SpringBoot+Maven 多模块项目的构建、运行、打包实战
前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 【腾讯Bugly干货分享】React Native项目实战总结
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
- webpack 教程 那些事儿04-webpack项目实战分析
这节主要讲解真正项目用用到的 webpack配置问题,项目实战篇 就像我们不会完全做一个项目,不用别人的轮子一样.这个配置我们借用 vue-cli 搭建的配置来研究,因为它已经足够优秀. 有了前面的基 ...
随机推荐
- 【uniapp】【微信小程序】wxml-to-canvas
真是搞吐了,研究了整整两天,困死我了 本来使用生成二维码插件好好的,插件页也支持导出二维码图片,可是领导说要带上文件的名称,那就涉及html转图片了,当然也可以改二维码插件的源码,不过源码做了混淆,看 ...
- 「coci 2021-2022 #1」Logičari
link. 断环后把断的边所连的两个点特殊标记,作为两个特殊点.这样就是一个树,树的做法很简单吧,把两个特殊点特殊处理带进状态即可. 具体一点就是,设 \(f(x,c_x,c_f,c_{rt_1},c ...
- destoon关于archiver归档的性能优化
今天在处理一个项目时候发现archiver单个模块归档超过百万数据,打开速度就特慢,所以打开archiver下index.php文件进行分析,发现有句sql作怪 1 $result = $db-> ...
- Vue2系列(lqz)——Vue生命期钩子、组件
文章目录 Vue声明期钩子 组件 1 fetch和axios 1.1 fetche使用 1.2 axios的使用 2 计算属性 2.1 通过计算属性实现名字首字母大写 2.2 通过计算属性重写过滤案例 ...
- 教学法学期末考试MOOC01
期末考试 返回 期末考试试卷为客观题,总分为100分,占课程成绩的40%.其中包含16道单选题,2道多选题.共18道题.单选题每道5分,多选题每道10分,限时90分钟完成. 倒计时: 01:13:4 ...
- 【前端小技巧】如何使用 Eolink Apilkit 调用 Mock ?
在开发过程中,进度比较赶的情况下,前端人员当页面写完时,后台的接口还没写完,等要交付的时候后端才把接口给你,这个时候就很尴尬. 这个时候 Mock 就可以很好的解决这个问题,前端团队可以在 API 还 ...
- 文心一言 VS 讯飞星火 VS chatgpt (120)-- 算法导论10.3 5题
五.用go语言,设 L 是一个长度为 n 的双向链表,存储于长度为 m 的数组key.prev 和next 中.假设这些数组由维护双链自由表 F的两个过程 ALLOCATE-OBJECT 和 FREE ...
- AT通讯总结(56K猫调制解调器Modem)型号I-56EM
1.关闭流控RTS与DTR AT&D0&K0\r\n 2.保存到非易失性存储 AT&W\r\n 3.向800001音频拨号 ATDT800001\r\n 4.接听 ATA\r\ ...
- C#_TCPClient异步连接和接收消息
//c#不愧是全能型的语言,异步连线程都省了 class State { public byte[] bufferCache; public TcpClient tcpClient; } ... pr ...
- gcd|最大公约数|欧几里得算法|欧几里得算法证明 一文说明白
gcd 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为 $ gcd(a,b) $ ,同样的,a,b,c的最大公约数记为 $ gcd(a,b,c) ...