python实践-实现实时语音转文字本地部署版(二)

news2025/4/19 11:27:03

一、技术栈

python 3.10.6  

vosk 需下载对应模型(vosk-model-cn-0.22)模型下载慢的同学看最后的资源链接。

pyaudio

keyboard

二、实现功能

本地化实现麦克风语音录入,实时生成文字,并保存至本地文档。

三、实现代码

from vosk import Model, KaldiRecognizer
import pyaudio  # 用于实时音频输入
import json  # 用于解析识别结果
import keyboard
import threading
import sys  # 引入 sys 模块用于退出程序

# 指向模型根目录
model_path = "D:/2.DevEnv/vosk/vosk-model-cn-0.22"  # 注意路径使用正斜杠或双反斜杠
model = Model(model_path)
rec = KaldiRecognizer(model, 16000)  # 采样率设为 16000,与模型匹配

# 初始化 PyAudio
p = pyaudio.PyAudio()

# 打开音频流
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=4000)
stream.start_stream()

recording = False
lock = threading.Lock()

# 定义结束关键词
END_KEYWORDS = ["结束", "停止"]
# 用于存储识别出来的文本
recognized_text = ""

def start_recognition():
    global recording, recognized_text
    with lock:
        recording = True
    print("开始录音,请说话...")
    try:
        while True:
            with lock:
                if not recording:
                    break
            data = stream.read(4000)
            if rec.AcceptWaveform(data):
                result = json.loads(rec.Result())
                text = result.get("text", "")
                print(text)
                # 累加识别的文本
                recognized_text += text + " "
                # 检查是否包含结束关键词
                for keyword in END_KEYWORDS:
                    if keyword in text:
                        stop_recognition()
                        break
    except Exception as e:
        print(f"录音过程中出现错误: {e}")

def stop_recognition():
    global recording, recognized_text
    with lock:
        if not recording:
            return
        recording = False
    print("停止录音")
    try:
        final_result = json.loads(rec.FinalResult())
        final_text = final_result.get("text", "")
        print("Final result:", final_text)
        # 累加最终识别的文本
        recognized_text += final_text
    except Exception as e:
        print(f"获取最终结果时出现错误: {e}")

    # 关闭音频流和 PyAudio
    try:
        stream.stop_stream()
        stream.close()
        p.terminate()
    except Exception as e:
        print(f"关闭音频流时出现错误: {e}")

    # 保存识别的文本到文件
    try:
        with open('recognized_text.txt', 'w', encoding='utf-8') as file:
            file.write(recognized_text)
        print("识别的文本已保存到 recognized_text.txt")
    except Exception as e:
        print(f"保存文件时出现错误: {e}")

    # 终止程序运行
    sys.exit(0)

def on_space_press(event):
    global recording
    if event.name == 'space':
        with lock:
            if not recording:
                thread = threading.Thread(target=start_recognition)
                thread.start()
            else:
                stop_recognition()

# 监听空格键事件
keyboard.on_press(on_space_press)

print("按空格键开始识别,说 '结束' 或 '停止' 来结束录音。")
keyboard.wait()

四、结果展示

五、相关资源

vosk模型下载链接: https://pan.baidu.com/s/13WAE_kRwd09I5JMbQjtnMw?pwd=bwtj 提取码: bwtj 
 

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

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

相关文章

tortoiseSVN 如何克隆项目到本地

导入项目成功,如下图:

解决“QString的split()函数分割中文“报错

在使用Qt平台的QString类里的split()函数,分割.txt文件里中文的字符串时,发现中文会乱码。     问题原因:中文使用UTF-16编码。     解决方法:将.txt文件保存为UTF-16编码,然后使用split()去分割对应的字符串即可。…

云平台结合DeepSeek的AI模型优化实践:技术突破与应用革新

目录 前言 一、技术架构:算力与算法的协同基石 1. 蓝耘平台的核心优势 2. DeepSeek的模型创新 二、应用场景:垂直领域的智能化落地 1. 商业领域:智能推荐与客服 2. 工业领域:质检与流程优化 3. 智慧城市与医…

蓝桥杯(B组)-每日一题(1093字符逆序)

c中函数&#xff1a; reverse(首位置&#xff0c;尾位置&#xff09; reverse(s.begin(),s.end()) 头文件&#xff1a;<algorithm> #include<iostream> #include<algorithm>//运用reverse函数的头文件 using namespace std; int main() {string s;//定义一…

jsherp importItemExcel接口存在SQL注入

一、漏洞简介 很多人说管伊佳ERP&#xff08;原名&#xff1a;华夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能&#xff0c;但后面将会推出ERP的全部功能&#xff0c;有兴趣请帮点一下 二、漏洞影响 …

一文讲清 AIO BIO NIO的区别

引言 在 Java 编程中&#xff0c;BIO&#xff08;Blocking I/O&#xff09;、NIO&#xff08;Non-blocking I/O&#xff09;和 AIO&#xff08;Asynchronous I/O&#xff09;是三种不同的 I/O 模型&#xff0c;它们在处理输入输出操作时有着不同的机制和特点&#xff0c;但是市…

文心一言大模型的“三级跳”:从收费到免费再到开源,一场AI生态的重构实验

2025年2月&#xff0c;百度文心大模型接连抛出两枚“重磅炸弹”&#xff1a;4月1日起全面免费&#xff0c;6月30日正式开源文心大模型4.5系列。这一系列动作不仅颠覆了李彦宏此前坚持的“闭源优势论”13&#xff0c;更标志着中国AI大模型竞争进入了一个全新的阶段——从技术壁垒…

Uniapp 从入门到精通:基础篇 - 搭建开发环境

Uniapp 从入门到精通:基础篇 - 搭建开发环境 前言一、Uniapp 简介1.1 什么是 Uniapp1.2 Uniapp 的优势二、搭建开发环境前的准备2.1 安装 Node.js2.2 安装 HBuilderX三、创建第一个 Uniapp 项目3.1 打开 HBuilderX 并创建项目3.2 项目结构介绍3.3 运行项目四、配置项目4.1 配置…

CSDN文章质量分查询系统【赠python爬虫、提分攻略】

CSDN文章质量分查询系统 https://www.csdn.net/qc 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链接-----> https://www.csdn.net/qc <------点击链接 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链…

GPT-SoVITS更新V3 win整合包

GPT-SoVITS 是由社区开发者联合打造的开源语音生成框架&#xff0c;其创新性地融合了GPT语言模型与SoVITS&#xff08;Singing Voice Inference and Timbre Synthesis&#xff09;语音合成技术&#xff0c;实现了仅需5秒语音样本即可生成高保真目标音色的突破。该项目凭借其开箱…

CSS三大特性——继承、优先级与层叠

1. 层叠性 概念&#xff1a;如果发生了样式冲突&#xff0c;那就会根据一定的规则&#xff08;选择器优先级&#xff09;&#xff0c;进行样式的层叠&#xff08;覆 盖&#xff09;。 什么是样式冲突&#xff1f; ——— 元素的同一个样式名&#xff0c;被设置了不同的值&…

敏捷开发06:用户故事估算方法介绍

估算介绍 在以前开发 IT 软件时&#xff0c;使用较多的衡量软件开发工作量的单位是&#xff1a;小时、人天 或 人月。它是预估开发时间。比如&#xff1a;这个功能张三一个人开发需要 3 天时间完成。 这种 “人天” 估算只是 “理想人天” 的估算&#xff0c;有时与实际开发完…

环境变量与本地变量

目录 本地变量的创建 环境变量VS本地变量 认识完了环境变量我们来认识一下本地变量。 本地变量的创建 我们如果直接env是看不到本地变量的&#xff0c;因为本地变量和环境变量都具有独立性&#xff0c;环境变量是系统提供的具有全局属性的变量&#xff0c;都存在bash进程的…

Visual Studio中打开多个项目

1) 找到解决方案窗口 2) 右键添加→ 选择现有项目 3) 选择.vcxproj文件打开即可

广西壮族自治区园区投促中心党委书记陶德文率团到访深兰科技

2月16日&#xff0c;广西壮族自治区园区投促中心党委书记、主任&#xff0c;自治区园区办党组成员陶德文率团来到深兰科技集团上海总部考察调研&#xff0c;并与深兰科技集团创始人、董事长陈海波等集团管理层座谈交流&#xff0c;双方围绕深兰科技人工智能项目落地广西的相关事…

1005 K 次取反后最大化的数组和(贪心)

文章目录 题目[](https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/)算法原理源码总结 题目 如上图&#xff0c;k是取反的次数&#xff0c;在数组【4&#xff0c;-1,3】中&#xff0c;当k 1&#xff0c;把-2取反为2&#xff0c;和为9&#xff1b;在数组…

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网

| 线上研讨会时间&#xff1a;2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括&#xff1a;是否只需集成单一的工…

SpringBoot整合Redis和Redision锁

参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…

数仓搭建(hive):DM搭建(数据集市层)

DM层 数据集市层 &#xff08;Data Mart&#xff09; 粒度上卷&#xff08;Roll-up&#xff09;: 指的是沿着维度层次向上聚合汇总数据&#xff0c;从细粒度到粗粒度观察数据的操作。 示例 数仓的上一层DWS的是按日汇总 DM层基于DWS层主题日宽表上卷统计出按年,月,周的数…

用 Python 实现 DeepSeek R1 本地化部署

DeepSeek R1 以其出色的表现脱颖而出&#xff0c;不少朋友想将其本地化部署&#xff0c;网上基于 ollama 的部署方式有很多&#xff0c;但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署&#xff0c;让你轻松掌握&#xff0c;打造属于自己的 AI…