美文网首页
Kaldi(B1)Windows上的编译运行Debug

Kaldi(B1)Windows上的编译运行Debug

作者: Seeker_zz | 来源:发表于2018-03-13 09:58 被阅读1494次

    请首先查阅官方文档kaldi/windows/INSTALL.mdWindows下面是没办法跑例程里面的脚本的!所以学习的话仍然需要先到Linux环境!

    请注意!Windows下仅仅方便调试,正常训练模型等任务仍然需要在Linux环境下安装!

    以下仅仅记录我在安装过程中遇到的坑以及部分比较重要的笔记。


    想使用cygwin进行安装请参考../INSTALL.
    (Cygwin是一个在windows平台上运行的类UNIX模拟环境)

    Notes

    • 注意需要安装VS的2017版本,安装VS2017的时候需要安装Win10 SDK&WIn8.1 SDK 不安装8.1后续编译Kaldi的时候会有提示,安装完成之后需要重启。
      安装选项
    • 以下命令均使用Git for windows进行操作


      Git bash

    Steps

    编译OpenFST

    确认安装好了cmake https://cmake.org/download/

    安装时勾选加入路径
    git clone https://github.com/kkm000/openfst.git
    cd openfst
    mkdir build64
    cd build64
    cmake -G "Visual Studio 15 2017 Win64" ../
    

    假如这一步成功效果会如下面所示

          -- The C compiler identification is MSVC 19.11.25547.0
          -- The CXX compiler identification is MSVC 19.11.25547.0
          -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/Hostx86/x64/cl.exe
          -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/Hostx86/x64/cl.exe -- works
          -- Detecting C compiler ABI info
          -- Detecting C compiler ABI info - done
          -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/Hostx86/x64/cl.exe
          -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/Hostx86/x64/cl.exe -- works
          -- Detecting CXX compiler ABI info
          -- Detecting CXX compiler ABI info - done
          -- Detecting CXX compile features
          -- Detecting CXX compile features - done
          -- The following ICU libraries were not found:
          --   data (required)
          --   i18n (required)
          --   io (required)
          --   test (required)
          --   tu (required)
          --   uc (required)
          -- Failed to find all ICU components (missing: ICU_INCLUDE_DIR ICU_LIBRARY _ICU_REQUIRED_LIBS_FOUND)
          -- Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
          -- Configuring done
          -- Generating done
          -- Build files have been written to: C:/Users/jtrmal/Documents/openfst/build64</pre>
    

    build64目录下 用Visual Studio 17打开 openfst.sln,分别选择 debug|Win64 release|Win64并进行编译。

    编译Kaldi

    从Github上先把Kaldi给git clone下来,然后下载OpenBLAS, 注意下载的是 "Win64-int32" 而不是"Win64-int64"!kaldi/tools目录下进行如下操作

           (kaldi)/tools$ curl -L -O http://sourceforge.net/projects/openblas/files/v0.2.14/OpenBLAS-v0.2.14-Win64-int32.zip
           (kaldi)/tools$ curl -L -O http://sourceforge.net/projects/openblas/files/v0.2.14/mingw64_dll.zip
           (kaldi)/tools$ unzip OpenBLAS-v0.2.14-Win64-int32.zip
           (kaldi)/tools$ unzip mingw64_dll.zip
    

    修改配置文件

    进入 (kaldi)/windows

    variables.props.dev (这一份是备份)复制一份命名为 variables.props
    然后修改里面的路径。这里以我的路径举例,应该填写为

    <OPENBLASDIR>F:\Git_Home\kaldi\tools\OpenBLAS-v0.2.14-Win64-int32</OPENBLASDIR>
    <OPENFST>F:\Git_Home\openfst</OPENFST>
    <OPENFSTLIB>F:\Git_Home\openfst\build64\</OPENFSTLIB>
    

    PS:
    这一步比较坑,<OPENBLASDIR> <OPENFST>估计是没什么问题的,<OPENFSTLIB>和原来的variables.props.dev差异比较大,照原来的填最后编译kaldi工程时会出现找不到fst.lib的错误,于是我在kaldiwin_vs2017_OPENBLAS文件夹下搜索了fst.lib发现它在openfstwin_debug.props这个文件中被引用到了,并找到了这个<OPENBLASDIR> 是如何被引用的:
    <AdditionalLibraryDirectories>$(OPENFSTLIB)/src/lib/Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>,再看了一下自己在OpenFST阶段生成的文件夹结构,发现<OPENFSTLIB>应该填写为F:\Git_Home\openfst\build64\

    产生工程文件

    kaldiwin_openblas.props 复制一份命名为kaldiwin.props,然后运行产生VS工程文件并进行配置

    (kaldi)/windows$ ./generate_solution.pl --vsver vs2017 --enable-openblas
    (kaldi)/windows$ ./get_version.pl
    

    编译测试

    kaldi\kaldiwin_vs2017_OPENBLAS下打开这个产生好的文件,并切换到 Debug|x64 (或者 Release|x64) 注意是x64!工程打开默认是win32!
    找到online2-wav-nnet2-latgen-faster,点右键生成解决方案作为测试,可以正常通过。但是实际在F:\Git_Home\kaldi\kaldiwin_vs2017_OPENBLAS\x64\Debug运行online2-wav-nnet2-latgen-faster.exe首先会提示缺少libopenblas.dll,从OpenBLAS目录下的bin下复制一个过来就行;


    然后如果在Git Bash里面运行的话还是会提示缺少dll,这里就看不见是少什么了,在cmd下运行发现少的是libgfortran-3.dll

    百度了一下说是需要安装MingGW,但是发现mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin下的是libgfortran-4.dll,所以抱着试试看的想法直接网上下了一个libgfortran-3.dll(注意是x64版本)扔过去居然跑成功了…这样就可以愉快地在Windows下修改kaldi的源码进行调试了…

    工程搭建

    假如想要利用它的源代码新建一个自己的项目,该项目里面的函数包括Kaldi里面用到的命令该怎么办呢?

    • 新建空项目,添加源代码
      新建空项目english-score
      这里Kaldi里面别的命令的main改成一个函数复制过来就行,参数同样通过argc,argv传入
    //声明
    int my_decoder(int argc,const char *argv[]) {}
    //解码选项
    const char *decoder_opt[] = { "englist-score","--do-endpointing=true", "--online=false","--config=./nnet_a_gpu_online/conf/online_nnet2_decoding.conf","--max-active=3500","--beam=15.0", "--lattice-beam=6.0", "--acoustic-scale=0.1","./nnet_a_gpu_online/final.mdl","./graph_own/HCLG.fst","ark:spk2utt","scp:wav.scp","ark:lattice" };
    //调用
    my_decoder(sizeof(decoder_opt) / sizeof(decoder_opt[0]),decoder_opt);
    
    添加源代码
    • 查看一下别的命令的结构,记录一下用到的命令的引用


      引用
    • 在我们的项目里面添加这些用到了的命令的引用

    • 添加工程设置


      属性管理器
    添加对应的设置
    • 修改一下头文件的路径
      属性-C/C++-所有选项-附加包含目录
      别的项目默认路径是这张图里面的..\..\..\src,但由于这个项目是我们自己建的,相对路径不一样,所以手动添加一下包含的目录

      src
    • 终于编译通过了…


    配置文件的修改

    如果想要在Windows平台上使用解码等功能,需要用到decode.conf等配置文件,需要修改路径,这里修改为相对路径(相对于exe所在的路径)是可以的。

    --feature-type=mfcc
    --mfcc-config=./nnet_a_gpu_online/conf/mfcc.conf
    --ivector-extraction-config=./nnet_a_gpu_online/conf/ivector_extractor.conf
    --endpoint.silence-phones=1:2:3:4:5:6:7:8:9:10
    

    Debug

    添加命令行argv argc

    VS debug时传递命令行参数
    https://blog.csdn.net/u012750702/article/details/51508214
    调整工作目录..\x64\Debug,加上命令参数

    Git
    C:\Program Files\Git\mingw64\bin把dll都拎过来就可以正常Debug啦。

    相关文章

      网友评论

          本文标题:Kaldi(B1)Windows上的编译运行Debug

          本文链接:https://www.haomeiwen.com/subject/dgmraxtx.html