Building of Kaldi VS2015 Project on Windows
来源:互联网 发布:淘宝怎么买看片的账号 编辑:程序博客网 时间:2024/06/05 20:36
[本文地址:http://http://blog.csdn.net/bluepuma/article/details/78264778]
本文在Kaldi已有的Windows VS工程及其编译流程说明的基础上,更新有问题的子模块,并添加对VS工程的适配代码,确保Kaldi VS工程在windows平台上编译通过及online-wave-gmm-decode-faster 解码程序的正常运行。
- Note:
- 1) 本文撰写时间为:2017.Oct.17, 相关代码的版本以此时间点为基准。
- 2) 感谢 “工 - Kaldi新手” (279295537) QQ群 @10号同学 (1004018924)的鼎力协助。
- 3) 如有问题,请留言,或者在QQ群 (279295537) 里Ping我(@L-SAE)
1. 相关背景
Kaldi的相关工程和示例 (https://github.com/kaldi-asr/kaldi ),可以在Ubuntu Linux Server上借助GPU的Power几近完美的编译和运行起来。
但是,工程上,还是存在相关的需求,需要在windows平台上,借助于Visual Studio的强大能力,对定制的VS工程进行Debugging或动态流程调用分析。
幸运的是,Kaldi本身已经包含了一个针对Windows平台的VS工程 (见 https://github.com/kaldi-asr/kaldi/tree/master/windows )。
不幸的是,该工程最近的更新也在2年之前, 编译的时候会有问题。涉及到的第三方的依赖子模块的版本也很低,使用最新的kaldi代码训练出来的模型进行解码时,会出现参数不匹配的问题。
因此,需要对相关的子模块进行版本更新和病添加对windows平台的适配。
2. 准备工作
进行相关VS工程的更新和修改前,请确认你已经完成了以下列表所述工作,以保证后续更新的正确进行:
已在Ubuntu Server上成功安装并运行Kaldi;
请自行搜索相关Kaldi在Ubuntu上install/building的相关资源,这里不是重点,不再赘述。
[Code Link] https://github.com/kaldi-asr/kaldi已在Ubuntu Server上下载THCHS30语料库,并成功运行至少 tri2b的步骤;
[Example Code Dir] TRUNK_ROOT/egs/thchs30/s5/
[Corpus Link] http://www.openslr.org/18/在Windows平台上已安装Cygwin,并可以运行Unzip,Git, Wget, Patch命令,及Perl脚本;
- 如果没有,请使用Cygwin Setup重新添加一下package:
- [x] unzip : Info-ZIP
- [x] git : Distributed version control system
- [x] wget : Utility to retrieve filts from the WWW via HTTP and FTP
- [x] patch : Applies diff files
在Windows平台上下载相同版本Kaldi代码,并依据相关Guide生成VS工程,并可编译(尽管编译有错误);
[Guide] https://github.com/kaldi-asr/kaldi/blob/master/windows/INSTALL.md
Note:- VS工程选择VS2015(v140), 配置选择 x64 Debug/Release
- 请fellow步骤 1,2,3,4,6,8,9,10,11,12,13,15,16
- 步骤15使用选项: (kaldi)/windows$ generate_solution.pl –vsver vs2015 –enable-openblas
- 如果无法使用wget下载代码,请使用浏览器打开相关网址直接下载,注意版本;
- pthreads-w32-2-9-1-release.zip
- OpenBLAS-v0.2.14-Win64-int32.zip
- mingw64_dll.zip
- 如果无法 patch /pthread-2.9.1.patch, 请修改pthreads\Pre-built.2\include\pthread.h的ending type为UNIX模式;
3. 问题及解决方案
Kaldi自带的VS工程的编译问题,主要是由PortAudio模块的缺失和openfst版本过低一起的。下面我们来逐一解决。
Note: 以下步骤的验证,可以只编译/运行 (kaldi)\kaldiwin_vs2015_OPENBLAS\kaldiwin_vs2015.sln 中的 oneline-wave-gmm-decode-faster工程。 编译整个Solution 600多个Project太耗时。
3.1 PortAudio的更新及编译
> —————-
在
<PropertyGroup Label="UserMacros">
子项下添加:<PORTAUDIO>D:\Local\_Work\Proj_DL\kaldi_win_valid\tools\portaudio</PORTAUDIO>
<PORTAUDIOLIB>D:\Local\_Work\Proj_DL\kaldi_win_valid\tools\portaudio\build\msvc\x64</PORTAUDIOLIB>
在
<ItemGroup>
子项下添加:<BuildMacro Include="PORTAUDIO">
<Value>$(PORTAUDIO)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="PORTAUDIOLIB">
<Value>$(PORTAUDIOLIB)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
. 8) 打开(kaldi)\kaldiwin_vs2015_OPENBLAS\kaldiwin\kaldiwin.props, 添加PortAudio相关信息.
> —————-
在
<AdditionalIncludeDirectories>
子项下添加:$(PORTAUDIO)\include;$(PORTAUDIO)\src\common;
在
<AdditionalLibraryDirectories>
子项下添加:$(PORTAUDIOLIB)\Debug;
在
<AdditionalDependencies>
子项下添加:portaudio_x64.lib;pa_ringbuffer.obj;
. 9) Rebuild kaldiwin_vs2015.sln 的 oneline-wave-gmm-decode-faster工程.3.2 Openfst的更新及编译
table-matcher.h(289): error C2143: syntax error: missing ‘;’ before ‘<’
trivial-factor-weight.h(112): error C2143: syntax error: missing ‘;’ before ‘<’
… 原因 openfst版本不匹配, 当前使用为1.6.2, VS工程中使用的是1.3.4 方法 更新openfst版本,添加/修改相关windows平台适配代码 步骤 1) 下载 openfst-1.6.2.tar.gz 和 openfst-1.6.2.patch, 拷贝到 (kaldi)/tools/ 目录 . 2) cd (kaldi)/tools/ . 3) rm -rf openfst . 4) tar -xvf openfst-1.6.2.tar.gz . 5) patch -b -p1 < openfst-1.6.2.patch . 6) 在VS2015中打开 (kaldi)\tools\openfst-1.6.2\openfst.sln,选择x64/Release & Debug配置进行编译. . 7) 打开(kaldi)\kaldiwin_vs2015_OPENBLAS\kaldiwin\variables.props, 修改openfst相关信息.
> —————-
将
<PropertyGroup Label="UserMacros">
子项下的<OPENFST><OPENFSTLIB>
内容修改为:<OPENFST>(KALDI_ROOT)\tools\openfst-1.6.2</OPENFST>
<OPENFSTLIB>(KALDI_ROOT)\tools\openfst-1.6.2\x64</OPENFSTLIB>
. 8) 打开(kaldi)\kaldiwin_vs2015_OPENBLAS\kaldiwin\openfstwin_debug.props, 修改openfst相关信息. > —————-
将
<AdditionalDependencies>
子项下的openfstx64-gd.lib
内容修改为:<AdditionalDependencies>libfst.lib;%(AdditionalDependencies)</AdditionalDependencies>
. 9) 打开(kaldi)\kaldiwin_vs2015_OPENBLAS\kaldiwin\openfstwin_release.props, 修改openfst相关信息. > —————-
将
<AdditionalDependencies>
子项下的openfstx64.lib
内容修改为:<AdditionalDependencies>libfst.lib;%(AdditionalDependencies)</AdditionalDependencies>
3.3 pthread-win的路径错误
> —————-
将
<PropertyGroup Label="UserMacros">
子项下的<PTHREADW>
内容修改为:<PTHREADW>(KALDI_ROOT)\pthreads\Pre-built.2</PTHREADW>
3.4 dll files missing的错误
> —————-
libopenblas.dll
(KALDI_ROOT)\tools\OpenBLAS-v0.2.14-Win64-int32\bin\libopenblas.dll
portaudio_x64.dll
(KALDI_ROOT)\tools\portaudio\build\msvc\x64\Debug\portaudio_x64.dll
libgcc_s_seh-1.dll
(KALDI_ROOT)\tools\mingw64_dll\libgcc_s_seh-1.dll
libgfortran-3.dll
(KALDI_ROOT)\tools\mingw64_dll\libgfortran-3.dll
libquadmath-0.dll
(KALDI_ROOT)\tools\mingw64_dll\libquadmath-0.dll
. 2) 请将其拷贝到工程生成的执行文件目录(kaldi)\kaldiwin_vs2015_OPENBLAS\x64\Debug
下3.5 控制台中文输出乱码
- - . 2) 将控制台输出的编码格式更改为UTF-8
添加
system("chcp 65001");
到oneline-wave-gmm-decode-faster.cc的main()函数中。- -
4. Reference Link
- Kaldi Source Code on Github
- PortAudio Download Page
- ASIO SDK Download Page
- openfst Download Page
- PortAudio(v19) 在vs2010上的环境搭建
- Building PortAudio for Windows using Microsoft Visual Studio
- openfstwin Reference code
- 让VS调试器正确显示UTF-8字符串
- 基于kaldi的在线中文识别,online的操作介绍
- kaldi中的在线识别—-Online Recognizers
- Building of Kaldi VS2015 Project on Windows
- Building GDAL On Windows
- Building PWLib on Windows
- SOAR系统 Building on Windows
- Building Mapnik dependencies on Windows
- Building MySQLdb for Python on Windows
- Building glew on windows with mingw.txt
- Memo of Wireshark building under Windows
- The 2 ways of building for Windows
- Building online HBase cluster of Zhihu based on Kubernetes
- Installation of Theano on Windows
- KALDI学习笔记(一)——About the Kaldi project
- Windows下Android Studio长时间停留在Building "Project Name" Gradle project info画面的解决方法
- Windows下Android Studio长时间停留在Building "Project Name" Gradle project info画面的解决方法
- Windows下Android Studio长时间停留在Building "Project Name" Gradle project info画面的解决方法
- Building Project Gradle project info
- Building GTK apps for MS Windows on Linux
- (翻译)Building WebKit on Windows 7 with VS2010
- SSL协议详解
- java设计模式:工厂方法模式
- 数据库SQL优化大总结之 百万级数据库优化方案
- JavaWeb学习
- node.js url模块
- Building of Kaldi VS2015 Project on Windows
- Unity3d项目截图
- Kotlin从入门到放弃之基础篇(六)——泛型、嵌套类、枚举类、对象表达式
- 数组总结及其实例详解
- 服务端与PC端
- PHPCMS V9单页面添加组图字段
- Week4Day2
- C语言——甲说乙在说谎
- BZOJ 4349: 最小树形图(最小树形图->朱刘算法)