当前位置: 首页 > news >正文

语音识别——使用Vosk进行语音识别

在这里插入图片描述

文章目录

  • 前言
  • 一、Vosk模型
    • 1.准备好所需要的语音包
    • 2.下载使用
  • 二、使用示例
    • 1.文件读取示例
    • 2.结合麦克风演示
  • 总结


前言

如何编译Vosk请参照之前的文章,ubuntu编译kaldi和vosk

Vosk是语音识别开源框架,支持二十+种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷兰人,加泰罗尼亚语,阿拉伯, 希腊语, 波斯语, 菲律宾语,乌克兰语, 哈萨克语, 瑞典语, 日语, 世界语, 印地语, 捷克语, 波兰语, 乌兹别克语, 韩国语, 塔吉克语。

Vosk还支持设备上离线语音识别 ,包括Raspberry Pi,Android,iOS等,API接口简单,并且有多种语言支持,同时会识别语义,最终输出合理的语句。


|版本声明:山河君,未经博主允许,禁止转载

一、Vosk模型

1.准备好所需要的语音包

在开始使用Vosk之前,需要拥有语音识别的模型,如图中拥有很多语音模型,中文、英文、西班牙、印度等等,Vosk模型库,需要外网才可以下载
在这里插入图片描述

2.下载使用

下载并进行解压后如下图所示,例如这里有简单英文、轻量级中文、和用于服务器处理的大型通用中文模型等,根据需要进行下载
在这里插入图片描述

解压后放在对应目录下,值得注意的是,是整个解压后的文件夹,而不是某一固定文件,一定要放在对应位置,不然使用时会直接崩溃,连报错都没有。
在这里插入图片描述

二、使用示例

1.文件读取示例

首先语音文件和模型需要准备好,示例中的语音文件是自己录下来的,模型vosk-model-cn-0.22是中文模型

#include <vosk_api.h>
#include <stdio.h>int main() {FILE *wavin;char buf[3200];int nread, final;VoskModel *model = vosk_model_new("vosk-model-cn-0.22");VoskRecognizer *recognizer = vosk_recognizer_new(model, 16000.0);wavin = fopen("test.wav", "rb");fseek(wavin, 44, SEEK_SET);while (!feof(wavin)) {nread = fread(buf, 1, sizeof(buf), wavin);final = vosk_recognizer_accept_waveform(recognizer, buf, nread);if (final) {printf("%s\n", vosk_recognizer_result(recognizer));} else {printf("%s\n", vosk_recognizer_partial_result(recognizer));}}printf("%s\n", vosk_recognizer_final_result(recognizer));vosk_recognizer_free(recognizer);vosk_model_free(model);fclose(wavin);return 0;
}

输出结果如下,partial是短时输出,text是识别语义后的输出:
在这里插入图片描述

  • vosk_model_new:加载模型
  • vosk_recognizer_new:创建语音识别实例
  • vosk_recognizer_accept_waveform:塞入语音数据(pcm格式)
  • vosk_recognizer_result:获取识别器的完整识别结果
  • vosk_recognizer_partial_result:返回当下识别结果,如果没有识别到,返回空

2.结合麦克风演示

#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>
#include <vosk_api.h>
#include <iostream>
#include <cstdio>
#include <memory>
#include <array>#define SAMPLE_RATE 44100
#define BUFFER_SIZE 44100 * 2 * 2int main() {// 初始化 Vosk 模型VoskModel *model = vosk_model_new("vosk-model-cn-0.22");VoskRecognizer *recognizer = vosk_recognizer_new(model, SAMPLE_RATE);// 打开 ALSA 设备snd_pcm_t *pcm_handle;int ret = snd_pcm_open(&pcm_handle, "default", SND_PCM_STREAM_CAPTURE, 0);ret = snd_pcm_set_params(pcm_handle, SND_PCM_FORMAT_S16_LE, SND_PCM_ACCESS_RW_INTERLEAVED, 1, SAMPLE_RATE, 1, 1000000); // 1秒char buffer[BUFFER_SIZE];int final_result;while (1) {// 从麦克风读取音频数据int nread = snd_pcm_readi(pcm_handle, buffer, BUFFER_SIZE / 2);if (nread < 0) {snd_pcm_recover(pcm_handle, nread, 0);continue;}// 将音频数据传递给 Voskfinal_result = vosk_recognizer_accept_waveform(recognizer, buffer, nread * 2);if (final_result) {printf("%s\n", vosk_recognizer_result(recognizer));} else {std::string strTest = vosk_recognizer_partial_result(recognizer);printf("%s\n", strTest.c_str());}}printf("%s\n", vosk_recognizer_final_result(recognizer));// 清理snd_pcm_close(pcm_handle);vosk_recognizer_free(recognizer);vosk_model_free(model);return 0;
}

识别到并且最终组成的语句如下:
在这里插入图片描述


总结

轻量级、资源消耗小的嵌入式设备进行语音识别使用Vosk是一个不错的选择,但是如果只是用于语音唤醒之类的,实际上应该有更好的选择。

如果对您有所帮助,请帮忙点个赞吧!

相关文章:

语音识别——使用Vosk进行语音识别

文章目录 前言一、Vosk模型1.准备好所需要的语音包2.下载使用 二、使用示例1.文件读取示例2.结合麦克风演示 总结 前言 如何编译Vosk请参照之前的文章&#xff0c;ubuntu编译kaldi和vosk Vosk是语音识别开源框架&#xff0c;支持二十种语言 - 中文&#xff0c;英语&#xff0…...

element ui中el-image组件查看图片的坑

比如说上传组件使用el-image-viewer组件去看,如果用错了,你会发现,你每次只能看一张图片 <template><div><el-upload action="#" list-type="picture-card" :auto-upload="false" :file-list="fileList"@change=&qu…...

LabVIEW水质监测系统

在面对全球性的海洋污染问题时&#xff0c;利用先进技术进行水质监测成为了保护海洋环境的关键手段之一。开发了一种基于LabVIEW的海洋浮标水质监测系统&#xff0c;该系统能够实时监测并评估近海水域的水质状况&#xff0c;旨在为海洋保护和污染防治提供科技支持。 项目背景 …...

SpringMVC之 文件上传和下载

1. 文件上传 1.1 前端注意事项 文件上传操作&#xff0c;前端的表单项需要如下三项设置&#xff1a; &#xff08;1&#xff09;input标签的type属性应设置为file&#xff0c;并且注意不要在input标签中设置value属性&#xff0c;因为这可能导致文件上传不成功&#xff1b; …...

LeetCode Hot 100:二分查找

LeetCode Hot 100&#xff1a;二分查找 35. 搜索插入位置 思路 1&#xff1a;lower_bound class Solution { public:int searchInsert(vector<int>& nums, int target) {return lower_bound(nums.begin(), nums.end(), target) - nums.begin();} };思路 2&#xf…...

打包方式-jar和war的区别

1、jar包 JAR包是类的归档文件&#xff0c;与平台无关的文件格式&#xff0c;其实jar包就是java的类进行编译生成的class文件进行打包的压缩包。 JAR以ZIP文件格式为基础&#xff0c;与ZIP不同的是&#xff0c;JAR不仅用于压缩和发布&#xff0c;还用于部署和封装库、组件和插…...

【论文+源码】基于spring boot的垃圾分类网站

创建一个基于Spring Boot的垃圾分类网站涉及多个步骤&#xff0c;包括环境搭建、项目创建、数据库设计、后端服务开发、前端页面设计等。下面我将引导您完成这个过程。 第一步&#xff1a;准备环境 确保您的开发环境中安装了以下工具&#xff1a; Java JDK 8 或更高版本Mav…...

【C++ STL 模板类】pair 键值对

文章目录 【 1. pair 对象的创建 】【 2. pair 对象的赋值 】【 3. pair 对象的比较 】【 4. pair对象成员的互换】 C STL 标准库提供了 pair 类模板&#xff0c;专门用来将 2 个普通元素 first 和 second&#xff08;可以是 C 基本数据类型、结构体、类自定的类型&#xff09;…...

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04&#xff0c;板端系统为ubuntu20.04 的环境下实现的 描述&#xff1a; 官网地址 rknn_zoo RKNPU2_SDK …...

Apple Vision Pro市场表现分析:IDC最新数据揭示的真相

随着AR/VR技术逐渐成熟并被更多消费者接受,2024年第二季度(Q2)成为这一领域的一个重要转折点。根据国际数据公司(IDC)发布的最新报告,整个AR/VR市场在本季度经历了显著的增长。接下来,我们将深入探讨Apple Vision Pro在这股增长浪潮中的具体表现。 市场背景 2024年Q2,…...

Mybatis-04.入门-JDBC

一.JDBC 二.原始的JDBC程序代码 &#xff08;不做要求&#xff09; Test public void testJdbc() throws Exception {//1. 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2. 获取连接对象String url "jdbc:mysql://localhost:3306/mybatis";Str…...

拥抱云开发的未来:腾讯云数据库、云模板与AI智能化的应用场景探索

本文目录&#xff1a; &#x1f4a1;前言&#xff1a;技术的边界在不断延展&#x1f31f;目录&#x1f308;什么是腾讯云云开发&#xff1f;&#x1f4be;云数据库&#xff1a;让数据成为开发的稳固基石&#x1f951;数据&#xff0c;不再只是数据 &#x1f6e0;云模板&#xf…...

新手铲屎官求推荐,噪音低的宠物空气净化器应该用哪款

当初选择养橘猫就是因为我听到有人说橘猫不容易掉毛才养的&#xff0c;谁知道养了之后和传闻中的不一样&#xff0c;真正的让我明白了什么叫“眼见为实”。 主要是猫掉毛就掉毛&#xff0c;只要我能清理的我都会清理&#xff0c;只要能保证养猫的同时还能保持家里卫生干净就行…...

玄机平台-应急响应-webshell查杀

首先xshell连接 然后进入/var/www/html目录中&#xff0c;将文件变成压缩包 cd /var/www/html tar -czvf web.tar.gz ./* 开启一个http.server服务&#xff0c;将文件下载到本地 python3 -m http.server 放在D盾中检测 基本可以确认木马文件就是这四个 /var/www/html/shell.p…...

LeetCode Hot 100:图论

LeetCode Hot 100&#xff1a;图论 200. 岛屿数量 思路 1&#xff1a;深度优先搜索 class Solution { private:const int dx[4] {-1, 0, 1, 0};const int dy[4] {0, 1, 0, -1};public:int numIslands(vector<vector<char>>& grid) {if (grid.empty())retu…...

tracert和ping的区别

1、简介 tracert&#xff08;在 Windows 系统中&#xff09;和 traceroute&#xff08;在 Unix/Linux 系统中&#xff09;以及 ping 都是网络诊断工具&#xff0c;但它们的功能和用途有所不同&#xff1a; ping&#xff1a; 用途&#xff1a;ping 是一个网络工具&…...

回归、分类模型的评估指标

1. 分类模型的评估指标 评估机器学习模型的好坏至关重要&#xff0c;它帮助我们判断模型的性能、稳定性以及在实际问题中的应用效果。不同类型的机器学习任务&#xff08;分类、回归、聚类等&#xff09;有不同的评估指标。以下是详细介绍常见的模型评估指标&#xff0c;尤其针…...

k8s中如何将pod的标准输出日志输出到一个文件

假设容器的启动命令是 grpcserver&#xff0c;我们将通过修改启动命令&#xff0c;将 grpcserver 的标准输出重定向到指定的日志文件 /var/log/app/grpcserver.log&#xff0c;同时保留标准输出以便 Kubernetes 日志系统仍然能够捕获日志。 目标&#xff1a; 将 grpcserver 的…...

软件工程文档规范要点总结

需求分析文档 1.目标用户应该体现为用例图里的执行者&#xff08;执行者要标明是哪一类用户&#xff09; 2.用例模型由功能概述得到&#xff0c;用例顺序图由基本交互过程得到&#xff0c;分析类图由顺序图得到 3.执行者和用例之间的关系&#xff1a;执行、触发、驱动 用例…...

Django 序列化serializers

在Django中&#xff0c;序列化通常指的是将数据库中的模型数据转换为JSON、XML或其他格式的过程。Django提供了内置的序列化工具&#xff0c;可以通过django.core.serializers模块进行序列化操作。 当你使用Django的序列化功能时&#xff0c;可以序列化以下两种对象类型&#…...

[具身智能-670]:ROS2 Node内部的工作原理:rclpy.init()、node = MyNode() 、rclpy.spin(node)

一、三个函数的一句话功能rclpy.init()初始化 ROS2 全局系统&#xff08;上下文、信号处理、DDS&#xff09;。node MyNode()创建节点对象&#xff0c;注册名字&#xff0c;分配通信句柄&#xff0c;不创建线程。rclpy.spin(node)进入主线程死循环&#xff0c;不断检查消息 / …...

JPlag代码抄袭检测:你的学术诚信守护神

JPlag代码抄袭检测&#xff1a;你的学术诚信守护神 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag 你是否曾为学生的代码…...

Go语言构建高效命令行工具集:从设计到工程化实践

1. 项目概述&#xff1a;一个“好用的”开源工具集最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的仓库&#xff0c;叫ImGoodBai/goodable。光看这个名字&#xff0c;就透着一股子“实用主义”的气息——“好用的”。作为一名常年混迹于开源社区&#xff0c;喜欢折腾各种工…...

在株洲如何根据个人需求选择合适的床垫?

如何根据个人需求选择合适的床垫&#xff1f;在快节奏的现代生活中&#xff0c;一张舒适的床垫对于保证良好的睡眠质量至关重要。然而&#xff0c;面对市场上琳琅满目的床垫产品&#xff0c;如何根据个人需求选择一款合适的床垫呢&#xff1f;本文将从多个维度出发&#xff0c;…...

从被看不起到被追更:《凰标》的逆袭就是行业缩影@凤凰标志

——《凰标》如何一刀劈开文娱偏见无资本即为小众&#xff0c;无热度即为劣质&#xff0c;无流量即为无用。 这条铁律&#xff0c;曾压弯无数民间创作者的笔。一、被看不起的开局&#xff1a;民间创作的“三无原罪”行业默认《凰标》现实顶级 IP 加持零 IP&#xff0c;纯原创豪…...

从“能用”到“愿用”:Lovable Serverless平台的6大心理学设计法则(基于87家头部企业DevOps调研数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从“能用”到“愿用”&#xff1a;Lovable Serverless平台的认知跃迁 Serverless 并非仅关于函数执行与自动扩缩——真正的分水岭在于开发者是否**主动选择、持续信任并乐于传播**该平台。当运维负担归…...

2026年医疗卫生/护理求职AI工具横评:白衣天使的求职神器大比拼

导语 2026年&#xff0c;医疗卫生行业依然是最具社会价值和就业稳定性的行业之一。随着中国老龄化加速&#xff0c;医护人员需求持续扩大&#xff0c;仅公立医院护士岗位需求量就突破200万。然而&#xff0c;医护求职并不轻松&#xff1a;编制紧张、规培政策复杂、职称考试压力…...

Cache映射策略全解析:从全相联到组相连,如何平衡灵活性与效率?

1. 为什么需要Cache映射策略&#xff1f; 想象一下你正在图书馆找一本书。如果每次都要从最外层的书架开始一本本翻找&#xff0c;效率肯定低得令人发指。这时候我们会给书籍分类编号——这就是Cache映射策略的日常类比。 在计算机体系结构中&#xff0c;CPU的运行速度远远快于…...

AI安全控制框架:应对能力超越控制的风险与韧性防御策略

1. 项目概述&#xff1a;当能力超越控制“Project Glasswing”这个名字本身就充满了隐喻。玻璃翼&#xff0c;轻盈、透明、脆弱&#xff0c;却又能在阳光下折射出复杂的光谱。这像极了我们今天要讨论的核心议题&#xff1a;人工智能的能力边界正以前所未有的速度扩张&#xff0…...

通用汽车IT部门裁员600人,为AI人才腾空间,软件团队变革进行时

通用汽车IT部门裁员600人&#xff0c;AI人才成新宠 通用汽车证实已对其IT部门进行裁员&#xff0c;约600名领薪员工&#xff08;占比10%以上&#xff09;被裁&#xff0c;目的是清除专业知识不再适用的员工&#xff0c;为具有AI背景的人员腾出空间。公司表示这是面向未来做好准…...