文章目录

  • 算法
  • 一、环境
    • 1.1 硬件环境--RV1126开发板
    • 1.2 交叉编译器
    • 1.3 需要Cmake版本大于3.1以上
  • 二、交叉编译sherpa
    • 2.1 下载sherpa
    • 2.2 编译sherpa
    • 2.3 运行测试
  • 三、下载模型
  • 四、语音测试
    • 4.1 单个语音文件解码测试
    • 4.2 开发板上使用alsa架构从MIC说话测试

算法

参考:Greedy search与beam search

在下面会用到解码的方法选择

  • greedy_search:贪心搜索,贪心搜索是一种来自计算机科学的算法,生成第一个词的分布以后,它将会根据你的条件语言模型挑选出最有可能的第一个词进入你的机器翻译模型中,在挑选出第一个词之后它将会继续挑选出最有可能的第二个词,然后继续挑选第三个最有可能的词,这种算法就叫做贪心搜索。
  • beam_search:集束搜索,对于语音识别,给定一个输入的语音片段,你不会想要一个随机的文本翻译结果,你想要最好的,最接近原意的翻译结果,集束搜索就是解决这个最常用的算法。

一、环境

1.1 硬件环境–RV1126开发板

  • 硬件:RV-1126

[root@RV1126_RV1109:/mnt/nfs/sherpa]# uname -r
4.19.111
[root@RV1126_RV1109:/mnt/nfs/sherpa]# uname -m
armv7l
[root@RV1126_RV1109:/mnt/nfs/sherpa]# cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 70.52
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5processor       : 1
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 70.52
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5processor       : 2
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 70.52
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5processor       : 3
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 70.52
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5Hardware        : Generic DT based system
Revision        : 0000
Serial          : 3ea3a71e7adec418

1.2 交叉编译器

编辑/etc/profile文件将SDK的交叉编译器(gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf)添加到环境。

export PATH=/home/liefyuan/rv1126/rp_rv1126_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH

1.3 需要Cmake版本大于3.1以上

$ cmake -version
cmake version 3.26.0CMake suite maintained and supported by Kitware (kitware.com/cmake).

二、交叉编译sherpa

2.1 下载sherpa

$ git clone https://github.com/k2-fsa/sherpa-ncnn

2.2 编译sherpa

$ cd sherpa-ncnn/
$ ./build-arm-linux-gnueabihf.sh

编译成功后会生成两个文件:

~/rv1126/kaldi/sherpa-ncnn$ ls -lh build-arm-linux-gnueabihf/install/bin/
total 4.1M
-rwxr-xr-x 1 liefyuan liefyuan 2.1M Apr 25 23:26 sherpa-ncnn
-rwxr-xr-x 1 liefyuan liefyuan 2.1M Apr 25 23:26 sherpa-ncnn-alsa

将这两个可执行文件拷贝到开发板上去。

2.3 运行测试

运行sherpa-ncnn

[root@RV1126_RV1109:/mnt/nfs/sherpa]# ./sherpa-ncnn
./sherpa-ncnn: error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directory

运行提示缺少libgomp.so.1
缺少的文件在SDK里面找一下:

liefyuan@ubuntu:~/rv1126/rp_rv1126_sdk$ find ./ -name libgomp*
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/share/info/libgomp.info
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/libgomp.so.1
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/libgomp.so
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/libgomp.so.1.0.0
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.so.1
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.a
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.so
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.spec
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.so.1.0.0
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/share/doc/libgomp.html
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/share/info/libgomp.info
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libgomp.so.1
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libgomp.a
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libgomp.so
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libgomp.spec
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/libgomp.so.1.0.0
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.so.1
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.a
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.so
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.spec
./prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/libgomp.so.1.0.0
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libgomp.so.1
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libgomp.so
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libgomp.so.1.0.0
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.so.1
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.a
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.so
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.spec
./buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.so.1.0.0
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libgomp.so.1
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libgomp.so
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libgomp.so.1.0.0
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.so.1
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.a
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.so
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.spec
./buildroot/output/rockchip_rv1126_rv1109_recovery/host/arm-buildroot-linux-gnueabihf/sysroot/lib/libgomp.so.1.0.0

从这里

./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/libgomp.so.1
./prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/libgomp.so

拷贝libgomp.so.1libgomp.so文件到开发板的/usr/lib里面去。

然后运行,出现下面信息代表正常!

[root@RV1126_RV1109:/mnt/nfs/sherpa]# ./sherpa-ncnnUsage:./bin/sherpa-ncnn \/path/to/tokens.txt \/path/to/encoder.ncnn.param \/path/to/encoder.ncnn.bin \/path/to/decoder.ncnn.param \/path/to/decoder.ncnn.bin \/path/to/joiner.ncnn.param \/path/to/joiner.ncnn.bin \/path/to/foo.wav [num_threads] [decode_method, can be greedy_search/modified_beam_search]Please refer to
https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/index.html
for a list of pre-trained models to download.

运行OK!

三、下载模型

使用的模型是小模型,下载地址:Small models

对应的文档:https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/zipformer-transucer-models.html#sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16

cd /home/rv1126/kaldi/GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16cd sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16git lfs pull --include "*.bin"

运行最后一步报错

liefyuan@ubuntu:/home/rv1126/kaldi/sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16$ git lfs pull --include "*.bin"
git: 'lfs' is not a git command. See 'git --help'.The most similar command islog

处理方法:

$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
$ sudo apt-get install git-lfs

将文件夹里面的.bin,.param,.txt文件拷贝到开发板上去,与可执行文件放一起。
我使用的是nfs,开发板和虚拟机共享一个文件夹我的sherpa库和sherpa可执行文件也都在这个文件夹里面:

四、语音测试

4.1 单个语音文件解码测试

./sherpa-ncnn \
./tokens.txt \
./encoder_jit_trace-pnnx.ncnn.param \
./encoder_jit_trace-pnnx.ncnn.bin \
./decoder_jit_trace-pnnx.ncnn.param \
./decoder_jit_trace-pnnx.ncnn.bin \
./joiner_jit_trace-pnnx.ncnn.param \
./joiner_jit_trace-pnnx.ncnn.bin \
./1.wav \
3 \
greedy_search

3:是指3个线程
greedy_search:贪心搜索算法
modified_beam_search:改进集束搜索算法

4.2 开发板上使用alsa架构从MIC说话测试

./sherpa-ncnn-alsa \
./tokens.txt \
./encoder_jit_trace-pnnx.ncnn.param \
./encoder_jit_trace-pnnx.ncnn.bin \
./decoder_jit_trace-pnnx.ncnn.param \
./decoder_jit_trace-pnnx.ncnn.bin \
./joiner_jit_trace-pnnx.ncnn.param \
./joiner_jit_trace-pnnx.ncnn.bin \
"default" \
4 \
greedy_search

4:是指4个线程
greedy_search:贪心搜索算法
modified_beam_search:改进集束搜索算法

运行起来后对着板子的MIC说话,背诵一个古诗看看。
测试log

[root@RV1126_RV1109:/mnt/nfs/sherpa]# ./sherpa-ncnn-alsa ./tokens.txt ./encoder_
jit_trace-pnnx.ncnn.param ./encoder_jit_trace-pnnx.ncnn.bin ./decoder_jit_trace-
pnnx.ncnn.param ./decoder_jit_trace-pnnx.ncnn.bin ./joiner_jit_trace-pnnx.ncnn.p
aram ./joiner_jit_trace-pnnx.ncnn.bin "default" 4 greedy_search
RecognizerConfig(feat_config=FeatureExtractorConfig(sampling_rate=16000, feature_dim=80), model_config=ModelConfig(encoder_param="./encoder_jit_trace-pnnx.ncnn.param", encoder_bin="./encoder_jit_trace-pnnx.ncnn.bin", decoder_param="./decoder_jit_trace-pnnx.ncnn.param", decoder_bin="./decoder_jit_trace-pnnx.ncnn.bin", joiner_param="./joiner_jit_trace-pnnx.ncnn.param", joiner_bin="./joiner_jit_trace-pnnx.ncnn.bin", tokens="./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.2, min_utterance_length=0), rule3=EndpointRule(must_contain_nonsilence=False, min_trailing_silence=0, min_utterance_length=300)), enable_endpoint=True)
Disable fp16 for Zipformer encoder
Don't Use GPU. has_gpu: 0, config.use_vulkan_compute: 1
Failed to set number of channels to 1. Invalid argument
Channel count is set to 2. Will use only 1 channel of it.
Current sample rate: 16000
Recording started!
Use recording device: default
0:床前明月光
1:疑似地上霜
2:举头望明月
3:低头思故乡
4:好啦这是一段测试^C
Caught Ctrl + C. Exiting...

很好!中英文都可以识别。

文档写的真不错:
https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/zipformer-transucer-models.html#sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16

【RV1126】移植kaldi实时语音识别相关推荐

  1. python语音在线编辑-Python实时语音识别控制

    Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音 ...

  2. Python实时语音识别控制

    Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音 ...

  3. 亚马逊的人工智能将实时语音识别错误率降低了6.2%

    据 Loup Ventures 不久前发布的2019年语音助理智商测试的结果,通过对每个人工智能系统的800个相同问题的测试,谷歌助手再次引领了这一潮流,与去年一样,100%完全理解了被问到的问题,并 ...

  4. 接口说明_实时语音识别_智能语音交互-阿里云

    使用须知支持的输入格式:PCM编码.16bit采样位数.单声道(mono). 支持的音频采样率:8000Hz/16000Hz. 支持设置返回结果:是否返回中间识别结果,在后处理中添加标点,将中文数字转 ...

  5. 接口说明_接口说明_实时语音识别_智能语音交互-阿里云

    使用须知支持的输入格式:PCM编码.16bit采样位数.单声道(mono). 支持的音频采样率:8000Hz/16000Hz. 支持设置返回结果:是否返回中间识别结果,在后处理中添加标点,将中文数字转 ...

  6. 中文实时语音识别引擎

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 接口是 http restful 形式,在使用该接口前,需要在语音识别控制台开通服 ...

  7. 语音识别引擎_linux 语音识别引擎_中文实时语音识别引擎 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 腾讯云语音识别服务开放实时语音识别.一句话识别和录音文件识别三种服务形式,满足不同 ...

  8. 【Buzz】离线语音转文字、实时语音识别

    Buzz是基于 OpenAI Whisper的离线语音转文字(字幕),实时语音识别工具. 功能 实时语音转文字.实时翻译(需麦克风权限) 导入音频.视频文件(mp3.wav.m4a.ogg.mp4.w ...

  9. python语音识别推荐_Python 实时语音识别

    最近自己想接触下语音识别,经过一番了解和摸索,实现了对语音识别API的简单调用,正好写文章记录下.目前搜到的帖子里,有现成的调用百度语音API来对音频文件进行识别的:也有通过谷歌语音服务来实现了实时 ...

最新文章

  1. Exchange管理控制台无法安装,要求重新启动
  2. 如何关闭Visual Assist?
  3. JavaScript高级编程学习7——this关键字
  4. 使用fliter实现ie下css中rgba的效果
  5. android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧
  6. (转载)机器学习知识点(二十九)LDA入门级学习笔记
  7. mysql金额数字转成中文_数字转换成汉字金额(转)
  8. linux驱动开发---并发控制
  9. php全局cors,PHP开启CORS - slagga的个人页面 - OSCHINA - 中文开源技术交流社区
  10. iOS发展系列II - UILabel 使用摘要
  11. Opencv--(x,y),(width,height)及(cols,rows)的关系
  12. diag开关什么意思_1P空气开关便宜、好用,为什么电工师傅却要我们买2P空气开关?...
  13. perl中shift 和unshift 操作
  14. 为什么不能生成accde_原来“转换生成语言学”就是这么回事
  15. 短信猫前台群发短信的示例程序
  16. Windows10 上某些PPT无法显示缩略图
  17. fedora14 官方下载地址
  18. user_agent浏览器头部
  19. julia集 matlab代码,Mandelbrot集和Julia集的分形图之matlab实现.docx
  20. Apple Silicon (mac m1 pro) 完整配置CS285 (brew, miniforge, mujoco)

热门文章

  1. QTextEdit设计的几个知识点
  2. 计算机系统结构 之 Amdahl定律
  3. iOS9有哪些新特性
  4. RINEX 3.02 版本导航文件格式说明
  5. 《个人助手》新模块——数据手袋
  6. php tp6 错误接管分析,ThinkPHP5 异常接管
  7. 三、Hive数据仓库应用之Hive数据操作语言(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)
  8. 【安卓开发系列 -- APP 】APP 性能优化 -- 崩溃分析
  9. 聚焦化工安全:化工厂人员定位
  10. 用python玩转数据慕课答案_大学慕课用Python玩转数据章节测验答案