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的人设计,以满足他们…

jstack的火焰图使用说明

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

基于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 …

Linux显示服务器Wayland切换到X11

1、临时切换 &#xff1a; 注销当前用户账户&#xff0c;返回到登录屏幕。 在登录屏幕上&#xff0c;选择您要登录的用户账户。 在输入密码之前&#xff0c;在登录屏幕的右下角可能有一个齿轮图标&#xff0c;点击它以展开更多选项。 在选项中选择“Ubuntu on Xorg”或“Ubu…

2732. 找到矩阵中的好子集

题目 给你一个下标从 0 开始大小为 m x n 的二进制矩阵 grid。 从原矩阵中选出若干行构成一个行的非空子集&#xff0c;如果子集中任何一列的和至多为子集大小的一半&#xff0c;那么我们称这个子集是好子集。 更正式的&#xff0c;如果选出来的行子集大小&#xff08;即行的…

CNN-O-ELMNet: 优化的轻量化通用模型,用于肺部疾病分类和严重性评估| 文献速递-先进深度学习疾病诊断

Title 题目 CNN-O-ELMNet: Optimized Lightweight andGeneralized Model for Lung DiseaseClassification and Severity Assessment CNN-O-ELMNet: 优化的轻量化通用模型&#xff0c;用于肺部疾病分类和严重性评估 01 文献速递介绍 肺部疾病是全球主要的致残和死亡原因。根…

nextjs-创建layouts共用UI和独立pages页面

原文链接&#xff1a;https://nextjs.org/learn/dashboard-app/creating-layouts-and-pages 01-nextjs起步02-css样式03-处理字体和图片05-页面之间的导航跳转更多 到目前为止&#xff0c;您的应用程序只有一个主页。让我们学习如何使用布局和页面创建更多路由。 本章目标 …