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();
});

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDS Gaia-X Catena-X Manufacturing-X的关系

来源:小盟科普丨Catena-X数据空间在汽车领域落地https://mp.weixin.qq.com/s/Ftp0UGAohsh4ltLn3DylAw

基于Java毕业生生活用品出售网站设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

CMA软件测试报告对企业和用户有什么好处?

CMA是中国计量认证的简称,由省级以上人民政府计量行政部门对检测机构的检测能力及可靠性进行的一种全面的认证及评价,认证对象是所有对社会出具公正数据的产品质量监督检验机构及其它各类实验室,是需要强制性认证的资质。取得该资质认证的&am…

如何将 ChatGPT (OpenAI) 与 Kubernetes 集成

Kubernetes是一种非常流行的容器编排平台,旨在大规模管理分布式应用程序。它具有许多用于部署、扩展和管理容器的高级功能,使软件工程师能够构建高度灵活且具有弹性的基础设施。 此外,值得注意的是,它是一款开源软件,…

[RK-Linux] RK3562 I2C驱动TP芯片GSL3680

TP芯片GSL3680 1、简介 GSL3680是一款电容屏多点触摸控制单芯片,其芯片内部框架图如下所示: GSL3680采用了独特的互电容感应技术,可以在1ms内测量多达192个节点,支持广泛的传感器选择,包括单层或双层ITO,玻璃或薄膜,采用了先进的抗电磁干扰信号处理技术,使其对各种干…

Chrome开发者工具学习

打开开发者工具: 可以通过在网页上点击右键并选择“检查”来打开。 或者使用快捷键Ctrl Shift I(在Windows/Linux上)或Command Option I(在Mac上)。 界面概览: 熟悉DevTools的基本面板,如“…

浊度传感器设备的监测控制和智慧运维

浊度传感器是一种用于测量液体中悬浮颗粒浓度从而反映液体浊度的设备。 其工作原理主要基于以下几种常见方式: 1. 散射光测量原理:当光线穿过含有悬浮颗粒的液体时,颗粒会使光线发生散射。传感器通过测量特定角度的散射光强度来确定浊度。散…

【OpenCV 图像处理 Python版】OpenCV 简介及安装

文章目录 1.OpenCV 介绍1.1 OpenCV 的特点1.2 OpenCV 的主要模块1.3 OpenCV 的应用场景 2.OpenCV-Python 库3.OpenCV 安装 1.OpenCV 介绍 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由英特尔公司于1999年…

java版CRM客户关系管理系统Spring Cloud alibaba Spring Boot成长型企业必备的客户关系管理系统

鸿鹄CRM客户关系管理系统是一款基于Java语言开发的CRM系统,采用了Spring Cloud Alibaba、Spring Boot、MybatisPlus、Redis和VUE3 ElementUI等技术,构建了一个微服务架构。该系统具有以下功能模块: 一、待办事项 1、今日需联系客户&#xf…

QT学习积累——float 接收 两个 int类型的值相除的结果,即 float f = int(1)/ int(2)= 0

目录 引出除法的一个坑 总结自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 引出 QT学习积累——float 接收 两个 int类型的值相除的结果,即 float f int&#xf…

数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)

数据库管理213期 2024-06-25 数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)1 索引1.1 B-Tree索引1.2 Hash索引1.3 复合索引1.4 唯一索引1.5 表达式索引1.6 部分索引 2 视图3 表连接3.1 内连接3.2 左/右外连接3.3 全连接清理环境: …

DM达梦数据库字符串函数整理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

JavaWeb系列十九: jQuery的DOM操作 上

查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用jQuery对象的attr()方法用来 设置/返回 它的各种属性值 设置属性值 $(“img”).attr(“width”, “300”);返回属性值 $(“img”).attr(“width”); 创建节点 创建节点: 使用jQuery的工厂函数$(): $(html标…

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

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

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

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

uni-app的showModal提示框,进行删除的二次确认,可自定义确定或取消操作

实现效果: 此处为删除的二次确认示例,点击删除按钮时出现该提示,该提示写在js script中。 实现方式: 通过uni.showModal进行提示,success为确认状态下的操作自定义,此处调用后端接口进行了删除操作&#…

APP软件系统的开发流程

APP软件系统的开发是一个复杂的过程,需要多方面的知识和技能。建议选择专业的开发团队进行开发,以确保APP的质量和成功。APP软件系统的开发流程通常包括以下几个阶段。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

指针(一)

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

会声会影2024永久激活码序列号注册机分享

大家好呀,今天我想给大家安利一款我最近超级喜欢的软件——会声会影2024!🌟 作为一个视频编辑爱好者,我尝试过很多视频编辑软件,但总感觉少了那么一点点“火花”。直到我遇到了会声会影2024,它完全改变了我…

如何解决远距离传输大文件慢的问题?

在数字化时代,无论是企业还是个人,经常需要处理跨越长距离的大规模文件传输任务。这种传输的效率和安全性对业务流程的顺畅至关重要。然而,我们经常遇到网络延迟、数据丢失、带宽限制等问题,这些都可能影响文件传输的效率。小编将…