目录结构
- 前言
- 音视频格式转为wav
- sherpa-ncnn编译
- Linux
- Windows
- windows编译中遇到的问题
- 问题“'nmake' '-?' failed with: no such file or directory”
- 编译失败原因
- 成功编译截图
- 可执行程序说明
- 模型下载
- 语言识别测试
- Linux
- Windows
- 参考文献
前言
小编需要实现离线音视频语言部分识别,将纯音频及视频中的音频中语言部分(中文)提取出来进行后续的逻辑处理,并且结合C语言去使用,调查发现sherpa + ncnn可以满足小编的需求,将整个可执行程序编译及使用整理如下:
Sherpa-NCNN 是一个基于 C++ 的轻量级神经网络推理框架,是 kaldi 下的一个子项目,它专门针对移动设备和嵌入式系统进行了优化。 Sherpa-NCNN 的目标是提供高性能、低延迟的推理能力,适用于移动设备和嵌入式系统,可以以满足实时应用需求。
主要功能:语音识别、流式语音识别。即边说话,边识别。不需要访问网络,不需要数据传输,完全本地识别。
识别效果:识别速度很快,效果比较好,但是只支持wav格式的音频,其他格式的需要转换后才能识别。
不足:目前只支持单通道、16 kHz 采样率、.wav 格式的音频文件。
音视频格式转为wav
关于音视频格式转换请移驾到 ffmpeg安装使用(详细)
sherpa-ncnn编译
更加详细的资料可参阅sherpa-ncnn,此环节需要下载sherpa-ncnn源码进行编译,以下命令中有下载源码的命令,但需要有Git环境才可使用,没有Git环境可在此下载sherpa-ncnn下载
Linux
git clone https://github.com/k2-fsa/sherpa-ncnn
cd sherpa-ncnn
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j6
编译脚本会自动下载编译需要的相关文件,编译完成后可执行文件在 build/bin 目录下。
-rwxr-xr-x 1 root root 6769904 4月 16 17:36 decode-file-c-api
-rwxr-xr-x 1 root root 6692384 4月 16 17:36 generate-int8-scale-table
-rwxr-xr-x 1 root root 6770152 4月 16 17:36 sherpa-ncnn
-rwxr-xr-x 1 root root 6775088 4月 16 17:36 sherpa-ncnn-alsa
-rwxr-xr-x 1 root root 6931624 4月 16 17:36 sherpa-ncnn-microphone
Windows
git clone https://github.com/k2-fsa/sherpa-ncnn
cd sherpa-ncnn
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release -- -m:6
编译脚本会自动下载编译需要的相关文件,编译完成后可执行文件在 build/bin/Release 目录下。
total 18032
-rwxr-xr-x 1 Administrator 197121 4594176 Apr 18 14:16 decode-file-c-api.exe*
-rwxr-xr-x 1 Administrator 197121 4515328 Apr 18 14:16 generate-int8-scale-table.exe*
-rwxr-xr-x 1 Administrator 197121 4749824 Apr 18 14:16 sherpa-ncnn-microphone.exe*
-rwxr-xr-x 1 Administrator 197121 4596224 Apr 18 14:16 sherpa-ncnn.exe*
windows编译中遇到的问题
问题“‘nmake’ ‘-?’ failed with: no such file or directory”
$ cmake -DCMAKE_BUILD_TYPE=Release ..
-- Building for: NMake Makefiles
CMake Error at CMakeLists.txt:2 (project):Running'nmake' '-?'failed with:no such file or directoryCMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
编译失败原因
AI 分析如下,分析的很准确,小编是因为没有安装“Visual Studio”造成的,换了一台装有“Visual Studio”的电脑编译成功;
这个错误表明nmake命令无法找到指定的帮助文件。nmake是Microsoft Visual Studio的一个组件,用于编译使用Makefile文件定义的项目。当尝试运行nmake -?时,它会寻找帮助信息,但无法在系统上找到相应的文件。
解决方法:
- 确认Visual Studio是否正确安装,并且nmake工具是否在系统的环境变量PATH中。
- 如果Visual Studio安装了,可能是环境变量设置不正确。检查并确保nmake所在的目录被添加到PATH中。
- 如果Visual Studio未安装,需要安装它或者单独安装Build Tools for Visual Studio,其中包括nmake。
- 如果你确认Visual Studio已安装,但问题依旧存在,尝试修复Visual Studio安装或者重新安装Visual Studio。
- 确认你的系统是32位还是64位,因为nmake通常与Visual Studio版本一致,如果你的系统是64位,确保你没有意外地只安装了32位版本的Visual Studio。
成功编译截图
编译过程有点微微长,需耐心等待…
- cmake -DCMAKE_BUILD_TYPE=Release …
- cmake --build . --config Release – -m:6
可执行程序说明
默认采用静态链接,可执行程序没有外部依赖。windows系统下在一台电脑上编译完后,可以直接拷贝到其他的电脑运行;Linux或者国产系统必须根据自己的架构去处理,相同架构下编译执行。
Linux | Windows | 作用说明 |
---|---|---|
sherpa-ncnn | sherpa-ncnn.exe | 识别单个 wav 文件 |
sherpa-ncnn-microphone | sherpa-ncnn-microphone.exe | 用于识别麦克风的实时语音 |
模型下载
- sherpa-ncnn提供训练好的模型(170MB);
- 小编使用的模型(24.2MB,对模型文件大小有要求的可使用此模型);
语言识别测试
Linux
测试结果:
$ ./sherpa-ncnn \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/tokens.txt \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/encoder_jit_trace-pnnx.ncnn.param \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/encoder_jit_trace-pnnx.ncnn.bin \
m \/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/joiner_jit_trace-pnnx.ncnn.bin \/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/test_wavs/0.wav> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/decoder_jit_trace-pnnx.ncnn.param \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/decoder_jit_trace-pnnx.ncnn.bin \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/joiner_jit_trace-pnnx.ncnn.param \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/joiner_jit_trace-pnnx.ncnn.bin \
> /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/test_wavs/0.wav
RecognizerConfig(feat_config=FeatureExtractorConfig(sampling_rate=16000, feature_dim=80), model_config=ModelConfig(encoder_param="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/encoder_jit_trace-pnnx.ncnn.param", encoder_bin="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/encoder_jit_trace-pnnx.ncnn.bin", decoder_param="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/decoder_jit_trace-pnnx.ncnn.param", decoder_bin="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/decoder_jit_trace-pnnx.ncnn.bin", joiner_param="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/joiner_jit_trace-pnnx.ncnn.param", joiner_bin="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/joiner_jit_trace-pnnx.ncnn.bin", tokens="/home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/tokens.txt", encoder num_threads=4, decoder num_threads=4, joiner num_threads=4), decoder_config=DecoderConfig(method="greedy_search", num_active_paths=4), endpoint_config=EndpointConfig(rule1=EndpointRule(must_contain_nonsilence=False, min_trailing_silence=2.4, min_utterance_length=0), rule2=EndpointRule(must_contain_nonsilence=True, min_trailing_silence=1.4, min_utterance_length=0), rule3=EndpointRule(must_contain_nonsilence=False, min_trailing_silence=0, min_utterance_length=20)), enable_endpoint=False, hotwords_file="", hotwrods_score=1.5)
wav filename: /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/test_wavs/0.wav
wav duration (s): 5.61462
Started!
Done!
Recognition result for /home/kaixuan/Desktop/kaldi/sherpa-ncnn-2022-09-30/test_wavs/0.wav
text: 对我做了介绍那么我想说的是呢大家如果对我的研究感兴趣
timestamps: 0.44 0.64 0.88 0.92 1 1.04 2.12 2.16 2.24 2.36 2.48 2.64 2.72 2.88 3.48 3.56 3.72 3.8 3.88 4 4.08 4.12 4.24 4.44 4.52 4.56
Elapsed seconds: 4.015 s
Real time factor (RTF): 4.015 / 5.615 = 0.715
Windows
测试结果:
$ ./sherpa-ncnn.exe \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\tokens.txt \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\encoder_jit_trace-pnnx.ncnn.param \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\encoder_jit_trace-pnnx.ncnn.bin \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\decoder_jit_trace-pnnx.ncnn.param \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\decoder_jit_trace-pnnx.ncnn.bin \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\joiner_jit_trace-pnnx.ncnn.param \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\joiner_jit_trace-pnnx.ncnn.bin \
> C:\\Users\\Administrator\\Desktop\\ncnn\\sherpa-ncnn-2022-09-30\\test_wavs\\0.wav
Elapsed seconds: 4.401 s
Real time factor (RTF): 4.401 / 5.615 = 0.784
RecognizerConfig(feat_config=FeatureExtractorConfig(sampling_rate=16000, feature_dim=80), model_config=ModelConfig(encoder_param="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\encoder_jit_trace-pnnx.ncnn.param", encoder_bin="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\encoder_jit_trace-pnnx.ncnn.bin", decoder_param="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\decoder_jit_trace-pnnx.ncnn.param", decoder_bin="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\decoder_jit_trace-pnnx.ncnn.bin", joiner_param="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\joiner_jit_trace-pnnx.ncnn.param", joiner_bin="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\joiner_jit_trace-pnnx.ncnn.bin", tokens="C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\tokens.txt", encoder num_threads=4, decoder num_threads=4, joiner num_threads=4), decoder_config=DecoderConfig(method="greedy_search", num_active_paths=4), endpoint_config=EndpointConfig(rule1=EndpointRule(must_contain_nonsilence=False, min_trailing_silence=2.4, min_utterance_length=0), rule2=EndpointRule(must_contain_nonsilence=True, min_trailing_silence=1.4, min_utterance_length=0), rule3=EndpointRule(must_contain_nonsilence=False, min_trailing_silence=0, min_utterance_length=20)), enable_endpoint=False, hotwords_file="", hotwrods_score=1.5)
wav filename: C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\test_wavs\0.wav
wav duration (s): 5.61462
Started!
Done!
Recognition result for C:\Users\Administrator\Desktop\ncnn\sherpa-ncnn-2022-09-30\test_wavs\0.wav
text: 对我做了介绍那么我想说的是呢大家如果对我的研究感兴趣
timestamps: 0.44 0.64 0.88 0.92 1 1.04 2.12 2.16 2.24 2.36 2.48 2.64 2.72 2.88 3.48 3.56 3.72 3.8 3.88 4 4.08 4.12 4.24 4.44 4.52 4.56
参考文献
- https://zhuanlan.zhihu.com/p/576293033
- https://zhuanlan.zhihu.com/p/675428374