main脚本对比

1. libtorch下的main脚本

提供了一种调用libtorch模型的识别过程脚本。

路径:wenet/runtime/libtorch/core/bin/decoder_main.cc

编译:

首先之前编译cmake时,没有加可选debug的选项,因此不可调试,在CMakeLists.txt加入

1
2
3
4
5
6
# cd wenet/runtime/libtorch

SET(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

重新编译:在build里:

1
2
3
4
5
# cd wenet/runtime/libtorch/build
# cmake clean ..
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake -DCMAKE_BUILD_TYPE=Debug --build .
make

编译出的可执行文件叫 decoder_main,路径在build/bin/decoder_main,是通过cmake编译整个工程得到的,运行于x86平台。

调试:

1
2
3
4
5
6
7
# cd  wenet/runtime/libtorch

cgdb ./build/bin/decoder_main

# 打断点

run --chunk_size -1 --wav_path test.wav --model_path /mnt/k/wenet/model/20210601_u2++_conformer_libtorch/final.zip --unit_path /mnt/k/wenet/model/20210601_u2++_conformer_libtorch/units.txt

2. WebSocket、gRPC、http、docker进行识别

https://github.com/wenet-e2e/wenet/blob/main/runtime/libtorch/README.md

就是在CmakeLists.txt 里打开一些参数,除了这些客户端服务端,还支持不同模型,也是打开CmakeLists.txt 参数。

具体的参考libtorch下的readme。

然后main函数在core/bin下不同文件。

[TODO]

3. binding/python下的main脚本

提供了一种python绑定C++的方法。

main路径在:core/api/wenet_api.cc

编译的路径在:wenet/runtime/binding/python

也能调试C++,因此修改CMakeLists.txt和setup.py

在CMakeLists.txt里添加:

1
2
3
4
SET(CMAKE_BUILD_TYPE "Debug") 

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

在setup.py里修改-DCMAKE_BUILD_TYPE=Release-DCMAKE_BUILD_TYPE=Debug

然后在命令行里敲 python3 setup.py build_ext --debug install 进行编译。

每次修改一点代码,要重新python setup ,这个过程非常久。不是增量编译?建议直接用cmake的方法(比如第一种),会更快速,代码都没问题了,如果目标是用python调用C++,那么这会儿再尝试python掉C++的方法也来得及。