node.js 离线实时语音识别

前言

在node.js实现语音实时转文字。获取麦克风实时语音转文字。
下面是用vosk的效果。注意踩坑要及时评论哦,坑还是挺多的。
在探索后发现本地模型对设备还是有一定要求的,最总无奈采用百度语音识别的方案。
探索结果分享给大家,希望能在项目中提供帮助

效果展示

deepspeech方案

注意:node 版本14才可运行

npm i deepspeech
npm i node-record-lpcm16
模型资源下载地址

英文模型地址
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.pbmm
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.scorer
中文模型地址
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models-zh-CN.pbmm
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models-zh-CN.scorer
const DeepSpeech = require("deepspeech");
const record = require("node-record-lpcm16");const MODEL_PATH = "./deepspeechmodel/deepspeech-0.9.3-models-zh-CN.pbmm"; // 替换为实际模型路径
const SCORER_PATH = "./deepspeechmodel/deepspeech-0.9.3-models-zh-CN.scorer"; // 替换为实际 scorer 文件路径
const SAMPLE_RATE = 16000;// 加载 DeepSpeech 模型
const model = new DeepSpeech.Model(MODEL_PATH);
model.enableExternalScorer(SCORER_PATH);const BEAM_WIDTH = 1024;
const LM_ALPHA = 0.75;
const LM_BETA = 1.85;model.setBeamWidth(BEAM_WIDTH);
model.setScorerAlphaBeta(LM_ALPHA, LM_BETA);// 开始录音
const mic = record.record({sampleRateHertz: SAMPLE_RATE,threshold: 0, // 录音的阈值verbose: false, // 是否打印详细信息recordProgram: "sox", // 或 "arecord" 根据你的操作系统选择
});mic.stream().on("data", (chunk) => {// 将录音数据转换为模型所需的格式(此处假设数据已经是16位整数,如果是其他格式可能需要转换)const buffer = Buffer.from(chunk);// 使用模型的stt方法进行语音识别const text = model.stt(buffer);// 打印识别的文字结果if (text) {console.log("识别结果:", text);} else {console.log("未识别到有效语音");}
});mic.stream().on("error", (err) => {console.error("Error in Input Stream:", err);
});mic.stream().on("startComplete", () => {console.log("startComplete =========");
});mic.stream().on("stopComplete", () => {console.log("stopComplete =========");
});mic.start();process.on("SIGINT", () => {mic.stop();process.exit();
});console.log("监听录音,按Ctrl+C停止.");

vosk方案(推荐)

node-record-lpcm16
npm i vosk
中文模型下载地址 https://alphacephei.com/vosk/models

const fs = require("fs");
const record = require("node-record-lpcm16");
const vosk = require("vosk");// 设置模型路径
const MODEL_PATH = "./vosk-model-cn-0.22"; // 替换为你的模型路径
const SAMPLE_RATE = 16000;// 初始化 Vosk 模型
if (!fs.existsSync(MODEL_PATH)) {console.error("Model path does not exist.");process.exit(1);
}
vosk.setLogLevel(0);
const model = new vosk.Model(MODEL_PATH);// 处理音频数据
const recognizer = new vosk.Recognizer({model: model,sampleRate: SAMPLE_RATE,
});// 开始录音
const mic = record.record({sampleRateHertz: SAMPLE_RATE,threshold: 0, // 录音的阈值verbose: false, // 是否打印详细信息recordProgram: "sox", // 或 "arecord" 根据你的操作系统选择
});mic.stream().on("data", (data) => {if (recognizer.acceptWaveform(data)) {const result = recognizer.result();// console.log("结果", JSON.stringify(result, null, 4));console.log("结果", result.text);} else {const partialResult = recognizer.partialResult();// console.log("partial", JSON.stringify(partialResult, null, 4));console.log("partial", partialResult.partial);}
});mic.stream().on("error", (err) => {console.error("Error in Input Stream: " + err);
});mic.stream().on("startComplete", () => {console.log("Microphone started.");
});mic.stream().on("stopComplete", () => {console.log("Microphone stopped.");
});mic.start();// 在进程退出时进行清理
process.on("SIGINT", () => {console.log("Exiting...");recognizer.free();model.free();mic.stop();process.exit();
});

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

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

相关文章

AI视频教程下载-定制GPT:使用您的数据创建一个定制聊天GPT

Custom GPTs_ Create a Custom ChatGPT with Your Data 构建一个定制的GPT,与您自己的数据进行聊天。添加文档,生成图像,并集成API和Zapier。 这门全面的Udemy课程专为那些渴望学习如何创建自己定制版ChatGPT的人设计,以满足他们…

GORM 使用指南

1. 介绍 1.1 什么是 GORM? GORM(Go Object Relational Mapper)是一个用于 Go 语言的 ORM 库,它允许开发者通过面向对象的方式操作数据库,而不必直接编写 SQL 查询语句。GORM 提供了简单易用的 API,使得在…

【五子棋game】

编写一个五子棋游戏程序可以分为几个步骤:设计棋盘、定义规则、实现人机交互、判断胜负。下面是一个简化的五子棋游戏程序示例,使用Python语言编写。 首先,我们需要一个棋盘。可以使用一个二维数组来表示棋盘,其中0表示空位&#…

jstack的火焰图使用说明

1、jstack的官方文档说明 How to use Flame Graph? - Fast thread 2、jstack的文件分析网站,可以关注cpu消耗比较高的线程和火焰图 GC log analysis error

AI人工智能发展的技术路线差异对比分析报告

1. 机器学习与深度学习 机器学习和深度学习是AI领域的两种主要技术路线。机器学习是一种数据驱动的方法,通过训练模型来识别模式和规律。深度学习是机器学习的一个子领域,主要关注神经网络模型,特别是深度神经网络。深度学习在图像识别、语音识别等领域取得了显著的成果,但…

基于springboot+Vue高校宿舍管理系统的设计与实现【附源码】

本科毕业设计(论文) 基于springbootVue高校宿舍管理系统的设计与实现 目录 摘要 2 第一章 绪论 2 1.1 开发背景 2 1.2 开发意义 2 第二章 系统分析 3 2.1 系统的需求分析 3 2.2 系统开发设计思想 3 2.3系统开发步骤 3 2.4 系统的主要技术 4 2.4.1 B/S系…

JavaWeb系列八: WEB 开发通信协议(HTTP协议)

HTTP协议 官方文档什么是HTTP协议快速入门页面请求的一个问题(分析)http请求包分析(get)http请求包分析(post)GET请求 POST请求分别有哪些http响应包分析常用的状态码说明状态码200状态码404状态码500状态码302状态码304 MIME类型MIME介绍常见的 MIME 类型 官方文档 HTTP常见请…

七个值得收藏的资源网站,一定要码住~

1、壁纸网站:wallhere https://wallhere.com/ 这是一个免费的高清壁纸网站,各种类型的壁纸资源都有,高清无水印,每款壁纸都能下载到不同的尺寸,适应电脑、安卓手机和苹果手机的屏幕 2、电子书网站:熊猫搜…

java编写的界面可以调用python吗

如何使用Java调用Python程序 本文为大家介绍如何java调用python方法,供大家参考。 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的python脚本呢,一共有三种…

【源码+文档+调试讲解】牙科就诊管理系统

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本牙科就诊管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

学法减分题库最新版,分享几个简单试用的学习和搜题工具 #微信#经验分享#知识分享

告别繁琐的查询步骤,用我们的拍照搜题功能,只需几秒钟,答案就出现在你眼前,让学习变得更加高效便捷。 1.减分侠 这是个辅助学分减分的公众号 根据新的学法减分考试大纲,涵盖小车、客车、货车、摩托车,各…

【AI落地应用实战】如何高效检索与阅读论文——302.AI学术论文工具评测

一、引言 作为一名学术领域的探索者,我们都知道,检索和阅读论文是我们获取知识、启发思考、验证假设的基石,也是日常学习中必不可少的基本功之一。然而在浩瀚的学术海洋中,如何快速、准确地找到我们需要的论文,就像是…

史上最全涵盖在线离线nginx安装手册(含国产信创环境下麒麟V10)

下载安装包略 下载地址:http://nginx.org/download/nginx-版本.tar.gz 配合下载资源食用更佳 https://download.csdn.net/download/ProGram_BlackCat/89480431 安装 tar -zxvf nginx-1.16.1.tar.gz && cd nginx-1.16.1# 创建安装目录(默认路径↓) mkdir /u…

摩柏BI,轻松实现word报告自动更新

|| 导语 告别手工!在数字化办公的今天,高效、准确的数据处理能力已经成为职场人士必备的技能之一。尤其是对于财务分析师、市场研究员和管理人员,他们需要处理的报告不仅数量庞大,而且对数据的准确性和实时性要求极高。传统WORD报…

指针(一)

指针基础 在C中,指针是至关重要的组成部分。它是C语言最强大的功能之一,也是最棘手的功能之一。 指针具有强大的能力,其本质是协助程序员完成内存的直接操纵。 指针:特定类型数据在内存中的存储地址,即内存地址。 …

计算机网络课程实训:局域网方案设计与实现(基于ensp)

文章目录 前言基本要求操作分公司1分公司2总部核心交换机配置实现内部服务器的搭建acl_deny部分用户与服务器出口出口防火墙配置 前言 本篇文章是小编实训部分内容,内容可能会有错误,另外ensp对电脑兼容性及其挑剔,在使用之前一定要安装好。…

大模型日报|8 篇必读的大模型论文

大家好,今日必读的大模型论文来啦! 1.M2Lingual:在大语言模型中加强多语言、多轮次的指令对齐 指令微调对于大语言模型(LLM)按照指令进行对齐至关重要。最近提出了许多有效的 IFT 数据集,但大多数数据集都…

七天速通javaSE:第一天 入门:Hello,Word与程序运行机制

文章目录 前言一、Hello,Word!1.新建一个文件夹存放代码2.新建一个.java文件3.编写代码 二、编译与运行1.在控制台编译java文件2.运行class文件 三、java程序运行机制1.高级语言的分类1.1 编译型语言1.2 解释型语言 2.程序运行机制 四、IDEA五、代码规范…

lambdastreammaven

1.Lambda &#xff08;1&#xff09;Java 8 Lambda 表达式 在 Java 8 以前&#xff0c;若我们想要把某些功能传递给某个方法&#xff0c;总要去写内部类 或匿名内部类类。代码示例&#xff1a; list.sort(new Comparator<User>() { Override public int compare(User …

AWS IAM 通过策略设置,实现对账户及其访问密钥(AK/SK)的IP白名单限制

AWS IAM 通过策略设置&#xff0c;实现对账户及其访问密钥&#xff08;AK/SK&#xff09;的IP白名单限制&#xff0c;也算是best practices了。 {"Version": "2012-10-17","Statement": {"Effect": "Deny","Action&qu…