树莓派智能语音助手之ASR2 – sherpa-ncnn

news2024/9/24 17:11:41

前几天虽然让树莓派学会了“听”(《树莓派智能语音助手之ASR – SpeechRecognition+PocketSphinx》),但是,PocketSphinx的识别效果真心不咋的。可我的树莓派因为系统等原因,一直装不了sherpa-onnx。正当我只能无奈地接受ASR低识别率的时候,忽然发现了有人推荐了一款新的语音识别工具——sherpa-ncnn。不多废话,直接开装。

官网教程:Python API — sherpa 1.3 documentation

CSDN上的介绍文章:https://blog.csdn.net/lstef/article/details/139680825

1.安装

sherpa-ncnn的安装很简单:

pip install sherpa-ncnn

当然,你也可以选择手动编译:

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

cd sherpa-ncnn

mkdir build

cd build

cmake \

  -D SHERPA_NCNN_ENABLE_PYTHON=ON \

  -D SHERPA_NCNN_ENABLE_PORTAUDIO=OFF \

  -D BUILD_SHARED_LIBS=ON \

  -DCMAKE_C_FLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=neon" \

  -DCMAKE_CXX_FLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=neon" \

  ..

make -j6

这两种方法我都亲自验证过(手动编译是python3.9下,直接pip install是python3.7,)。

2.下载模型

安装成功后就要下载预先训练好的模型:

Pre-trained models — sherpa 1.3 documentation

如图,我下载的是Small models,这里面也有4个模型可供选择。

模型的下载步骤:

cd /path/to/sherpa-ncnn

wget https://github.com/k2-fsa/sherpa-ncnn/releases/download/models/sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16.tar.bz2

tar xvf sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16.tar.bz2

3.测试

下载并解压成功后,可以在当前目录直接测试效果:

cd /path/to/sherpa-ncnn

for method in greedy_search modified_beam_search; do
  ./build/bin/sherpa-ncnn \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/tokens.txt \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/encoder_jit_trace-pnnx.ncnn.param \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/encoder_jit_trace-pnnx.ncnn.bin \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/decoder_jit_trace-pnnx.ncnn.param \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/decoder_jit_trace-pnnx.ncnn.bin \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/joiner_jit_trace-pnnx.ncnn.param \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/joiner_jit_trace-pnnx.ncnn.bin \
    ./sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16/test_wavs/1.wav \
    2 \
    $method
done

直接把上面的代码复制到linux终端执行就可以看到测试效果了。

4.python调用

接下来,就是自己编写代码了。sherpa-ncnn的录音用的是sounddevice这个模块,需要自行安装:pip install sounddevice。

直接复制官网教程的示例:

import sys

try:
    import sounddevice as sd
except ImportError as e:
    print("Please install sounddevice first. You can use")
    print()
    print("  pip install sounddevice")
    print()
    print("to install it")
    sys.exit(-1)

import sherpa_ncnn

def create_recognizer():
    # Please replace the model files if needed.
    # See https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/index.html
    # for download links.
    recognizer = sherpa_ncnn.Recognizer(
        tokens="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/tokens.txt",
        encoder_param="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.param",
        encoder_bin="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.bin",
        decoder_param="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.param",
        decoder_bin="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.bin",
        joiner_param="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.param",
        joiner_bin="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.bin",
        num_threads=4,
    )
    return recognizer


def main():
    print("Started! Please speak")
    recognizer = create_recognizer()
    sample_rate = recognizer.sample_rate
    samples_per_read = int(0.1 * sample_rate)  # 0.1 second = 100 ms
    last_result = ""
    with sd.InputStream(
        channels=1, dtype="float32", samplerate=sample_rate
    ) as s:
        while True:
            samples, _ = s.read(samples_per_read)  # a blocking read
            samples = samples.reshape(-1)
            recognizer.accept_waveform(sample_rate, samples)
            result = recognizer.text
            if last_result != result:
                last_result = result
                print(result)


if __name__ == "__main__":
    devices = sd.query_devices()
    print(devices)
    default_input_device_idx = sd.default.device[0]
    print(f'Use default device: {devices[default_input_device_idx]["name"]}')

    try:
        main()

好了,就这么方便。下图是我融合了snowboy唤醒+ASR的演示效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows配置开机直达桌面并跳过锁屏登录界面在 Windows 10 中添加在启动时自动运行的应用

目录 Win10开机直达桌面并跳过锁屏登录界面修改组策略修改注册表跳过登录界面 在 Windows 10 中添加在启动时自动运行的应用设置系统级别服务一、Windows下使用sc将应用程序设置为系统服务1. 什么是sc命令?2. sc命令的基本语法3. 创建Windows服务的步骤与示例创建服…

spring boot同时连接两个数据库

一、需求说明 1. 项目要求同时操作两个数据库&#xff0c;一个在本地服务器&#xff0c;一个在云服务器。 2. 两个数据库均为SQL server数据库。 二、实现 1. 在pom中导入多数据源依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynam…

【Kubernetes】身份认证与鉴权

一&#xff0c;认证 所有 Kubernetes 集群有两类用户&#xff1a;由Kubernetes管理的ServiceAccounts(服务账户)和(Users Accounts)普通账户。 两种账户的区别&#xff1a; 普通帐户是针对(人)用户的&#xff0c;服务账户针对Pod进程普通帐户是全局性。在集群所有namespaces…

ansible安装K8s

部署Kubernetes (k8s) 集群使用Ansible是一个常见的自动化解决方案。下面我将提供一个基本的步骤概述和所需的命令&#xff0c;用于在CentOS 7.8上使用Ansible部署k8s集群&#xff0c;包括Master节点和Worker节点&#xff08;Web和DB节点&#xff09;。 步骤 1: 准备环境 确保所…

# 利刃出鞘_Tomcat 核心原理解析(七)

利刃出鞘_Tomcat 核心原理解析&#xff08;七&#xff09; 一、Tomcat专题 - Tomcat管理配置 - host-manager 1、Tomcat 管理配置 从早期的Tomcat版本开始&#xff0c;就提供了Web版的管理控制台&#xff0c;他们是两个独立的Web应用&#xff0c;位于webapps目录下。Tomcat …

C语言典型例题40

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目 例题3.8 运输公司对用户计算运费。路程&#xff08;以s表示&#xff0c;单位为千米&#xff09;&#xff0c;吨/千米运费越低。标准如下&#xff1a; s<250 没…

C:每日一题:逆序字符串(牛客)

一、题目来源 字符逆序__牛客网 (nowcoder.com) 二、题目介绍 将一个字符串str的内容颠倒过来&#xff0c;并输出。 三、思路分析 要将字符串str存储起来&#xff0c;可以使用字符数组或者字符指针的方式存储起来&#xff1b;从题目中我们知道该题需要我们自己输入字符串&a…

C++优先级队列priority_queue(容器适配器)

目录 一、优先级队列简述 二、优先级队列的大堆、小堆&#xff08;仿函数控制&#xff09; 三、优先级队列与sort函数中仿函数区别 四、优先级队列的接口 一、优先级队列简述 priority_queue是一个类模板 二、优先级队列的大堆、小堆&#xff08;仿函数控制&#xff09; p…

LLM 量化算法AutoRound 0.3 发布及原理浅析

这里写自定义目录标题 AutoRound V0.3 特性原理浅析其他工作AutoRound 原理 AutoRound&#xff08;https://github.com/intel/auto-round&#xff09;在Llama3.1-8B-Instruct上效果明显优于AWQ/GPTQ等方法&#xff0c;在10个任务的平均准确率上我们以63.93%由于AWQ的63.15%和GP…

Qt登录窗口

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),btn(new QPushButton("取消", this)),login_btn(new QPushButton("登录", this)) { ui->setupUi(this);thi…

R 语言学习教程,从入门到精通,R 数据重塑(15)

1、R 数据重塑 合并数据框 R 语言合并数据框使用 merge() 函数。 merge() 函数语法格式如下&#xff1a; # S3 方法 merge(x, y, …) # data.frame 的 S3 方法 merge(x, y, by intersect(names(x), names(y)),by.x by, by.y by, all FALSE, all.x all, all.y all,sort…

【JS逆向学习】AES加密文本如何在python中自我解密

一、查看解密后的内容 二、未解密前的内容 三、分析网页 import requestsheaders = {Accept: application/json, text/plain, */*,Accept-Language: zh-CN,zh;q=0.9,Cache-Control: no-cache,Connection: keep-alive,Origin: https://www.swguancha.com,Pragma: no-cache,Ref…

喷淋温湿度氙灯老化试验箱

氙灯试验箱是一种模拟全阳光光谱的试验设备&#xff0c;主要用于测试材料在紫外光、可见光和红外光等不同光谱环境下的耐候性能。它采用氙弧灯作为光源&#xff0c;通过设定各种试验参数&#xff0c;如温度、湿度和辐照度等&#xff0c;来模拟自然环境中的光照条件&#xff0c;…

使用排名前三的华为解锁工具来绕过忘记的华为锁屏密码

如果您在未使用“设置”应用的情况下将华为手机恢复出厂设置&#xff0c;同时启用了出厂重置保护 (FRP) 安全功能&#xff0c;您的华为设备将卡在帐户验证界面。您可以使用帐户凭据轻松绕过此锁定。但是&#xff0c;假设您无法回忆起旧的帐户信息。在这种情况下&#xff0c;您应…

Apache Flink中TaskManager,SubTask,TaskSlot,并行度之间的关系

Apache Flink 中Application 与 Job 一个完整的Flink Application 一般组成如下&#xff1a; Source 数据来源Transformation 数据转换处理等Sink 数据传输 Flink 中一个或者多个Operator&#xff08;算子&#xff09;组合对数据进行转换形成一个 Transformation&#xff0c;一…

优化业务流程的关键:深入探讨BPA流程设计

在当前竞争激烈的商业环境中&#xff0c;业务流程自动化&#xff08;BPA&#xff09;已经成为企业提升效率、减少成本和提高业务灵活性的关键工具。今天&#xff0c;我们将深入探讨BPA流程设计的重要性及其实施步骤&#xff0c;为企业提供实用的指南。 什么是BPA&#xff1f; …

spring揭秘00-ioc定义与ioc容器及集成工厂模式

文章目录 【README】【1】IOC概述【1.1】ioc定义【1.2】IOC三种依赖注入方式 【2】ioc服务提供者【2.1】 ioc服务提供者职责【2.2】ioc服务提供者如何管理对象间依赖关系 【3】IOC容器【3.1】BeanFactory 【4】集成工厂模式创建bean【4.1】静态工厂方法【4.2】非静态工厂方法【…

QT+CUDA 同时编译Qt和CUDA代码

工作需要把cuda的代码移植到QT中&#xff0c;和Qt项目一起编译&#xff0c;这里记录一下。 前期准备 1.安装CUDA 电脑需要安装好 CUDA&#xff0c;可以看我的这篇文章安装&#xff1a;Windows和WSL安装CUDA-CSDN博客 使用命令 nvcc --version 查看安装的 CUDA 版本。 CUDA 的默…

通过API构建开放式外卖系统平台:合作伙伴的集成与管理

随着外卖行业的迅速发展&#xff0c;外卖系统平台的开放性和可扩展性变得尤为重要。通过API构建一个开放式的外卖系统平台&#xff0c;企业可以更轻松地与合作伙伴进行集成和管理。本文将探讨如何通过API构建开放式外卖系统平台&#xff0c;并通过代码示例展示与合作伙伴的集成…

md-editor-v3适配VUE3的MarkDown编辑器-好用-简单-免费

官方文档&#xff1a; https://imzbf.github.io/md-editor-v3/zh-CN/indexhttps://imzbf.github.io/md-editor-v3/zh-CN/index 效果演示&#xff1a;&#xff08;支持黑暗模式切换&#xff09; toolbar包括&#xff1a; [bold,underline,italic,strikeThrough,title,sub,sup…