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

离线语音识别+青云客语音机器人(幼儿园级别教程)

1、使用步骤

确保已安装以下库:

pip install vosk sounddevice requests pyttsx3


2、下载 Vosk 模型:

下载适合的中文模型,如 vosk-model-small-cn-0.22。

下载地址:

https://alphacephei.com/vosk/models

 

将模型解压后放置在代码中指定的路径 MODEL_PATH。

我选择放到项目的根目录下

如下图:

3、插麦克风

记得插个耳机当麦克风哦!!!

4、完整代码

import os
import sounddevice as sd
import queue
import vosk
import sys
import json
import pyttsx3
import requests
import threading# 初始化语音合成引擎
def init_tts():tts_engine = pyttsx3.init()tts_engine.setProperty('rate', 150)  # 设置语速tts_engine.setProperty('volume', 1.0)  # 设置音量return tts_engine# 语音输出函数
def speak(tts_engine, text):tts_engine.say(text)tts_engine.runAndWait()# 聊天机器人接口
class ChatBot:def __init__(self, api_url, key="free", appid="0"):self.api_url = api_urlself.key = keyself.appid = appiddef send_message(self, message):params = {"key": self.key,"appid": self.appid,"msg": message}try:response = requests.get(self.api_url, params=params)response.raise_for_status()  # 检查请求是否成功data = response.json()if data.get("result") == 0:return data.get("content")else:return "对不起,我无法处理您的请求。"except requests.RequestException as e:return f"请求失败:{e}"# 初始化模型路径
MODEL_PATH = "vosk-model-small-cn-0.22"  # 替换为模型的路径
if not os.path.exists(MODEL_PATH):print(f"模型路径不存在: {MODEL_PATH}")sys.exit(1)# 加载 Vosk 模型
try:model = vosk.Model(MODEL_PATH)print(f"模型加载成功: {MODEL_PATH}")
except Exception as e:print(f"加载模型时出错: {e}")sys.exit(1)q = queue.Queue()
stop_signal = threading.Event()# 音频流回调函数
def callback(indata, frames, time, status):if status:print(f"状态错误: {status}", file=sys.stderr)q.put(bytes(indata))# 实时语音识别函数
def recognize(tts_engine, chatbot):print("请开始说话...输入 'q' 并按回车退出。")try:with sd.RawInputStream(samplerate=16000, blocksize=8000, dtype="int16",channels=1, callback=callback):rec = vosk.KaldiRecognizer(model, 16000)while not stop_signal.is_set():try:# 设置超时,避免队列阻塞导致无法响应中断data = q.get(timeout=0.5)if rec.AcceptWaveform(data):result = json.loads(rec.Result())recognized_text = result.get('text', '')if recognized_text:print(f"\n你: {recognized_text}")# 调用聊天机器人bot_response = chatbot.send_message(recognized_text)print(f"机器人: {bot_response}")# 语音输出机器人回复speak(tts_engine, bot_response)else:partial_result = json.loads(rec.PartialResult()).get('partial', '')if partial_result:print(f"\r临时识别中: {partial_result}", end="")except queue.Empty:# 超时后检查停止信号continueexcept Exception as e:print(f"发生错误: {e}")finally:print("清理资源并退出。")# 主线程监听用户输入
def listen_for_exit():while True:user_input = input()if user_input.strip().lower() == 'q':stop_signal.set()print("退出指令收到,程序即将退出。")breakif __name__ == "__main__":# 初始化语音合成引擎tts_engine = init_tts()# 初始化聊天机器人chatbot = ChatBot(api_url="http://api.qingyunke.com/api.php")# 欢迎语音介绍welcome_message = "我是小菲菲,很高兴为你服务!"print(f"机器人: {welcome_message}")speak(tts_engine, welcome_message)# 创建监听输入的线程input_thread = threading.Thread(target=listen_for_exit)input_thread.daemon = Trueinput_thread.start()# 启动实时语音识别和对话recognize(tts_engine, chatbot)

感谢您的支持和关注!!
也支持您的继续创新!!

相关文章:

离线语音识别+青云客语音机器人(幼儿园级别教程)

1、使用步骤 确保已安装以下库: pip install vosk sounddevice requests pyttsx3 2、下载 Vosk 模型: 下载适合的中文模型,如 vosk-model-small-cn-0.22。 下载地址: https://alphacephei.com/vosk/models 将模型解压后放置在…...

leetcode hot 100 跳跃游戏

55. 跳跃游戏 已解答 中等 相关标签 相关企业 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则…...

陪诊陪护助浴系统源码:JAVA养老护理助浴陪诊小程序医院陪护陪诊小程序APP源码

JAVA养老护理助浴陪诊小程序及医院陪护陪诊APP:打造智慧养老新生态 在人口老龄化日益加剧的当下,养老护理服务的需求日益增长,而传统的养老服务模式已难以满足日益多样化的需求。为此,我们基于JAVA技术栈,精心打造了一…...

怎么在家访问公司服务器?

在日常工作中,特别是对信息技术从业者而言,工作往往离不开公司的服务器。他们需要定期访问服务器,获取一些关键的机密文件或数据。如果您在家办公,并且需要处理未完成的任务,同时需要从公司服务器获取所需的数据&#…...

asp.net core框架搭建4-部署IIS/Nginx/Docker

文章目录 系列文章一、Linux上部署Nginx1.1 Centos 安装配置环境1.2 使用Systemctl 控制Nginx 二、部署IIS三、部署Docker3.1 创建 Dockerfile 文件3.2 构建 Docker 镜像3.3 运行 Docker 容器3.4 检查容器运行情况 结束语 作者:xcLeigh 文章地址:https:/…...

ubuntu中zlib安装的步骤是什么

参考:https://www.yisu.com/ask/40496522.html 在Ubuntu中安装zlib的步骤如下: 打开终端,输入以下命令更新包列表: sudo apt update复制代码 安装zlib库和开发文件: sudo apt install zlib1g zlib1g-dev复制代码 安装完成后&a…...

代码随想录算法训练营第二十天-二叉树-669. 修剪二叉搜索树

对于递归的写法除了大写的服字&#xff0c;无话可说由于是修剪二叉树&#xff0c;所以会有明确的方向性当某一结点小于最小值&#xff0c;说明其左子树全部要修剪掉当某一结点大于最大值&#xff0c;说明其右子树全部要修剪掉 #include <iostream>struct TreeNode {int …...

发现API安全风险,F5随时随地保障应用和API安全

分析数据显示&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标&#xff0c;试图利用更新且较少为人所知的漏洞&#xff0c;而这些漏洞通常是由安全团队未主动监控的API所暴露。现代企业需要一种动态防御策略&#xff0c;在风险升级成代价高昂、令人警惕且往往无法…...

【AI学习】2024年末一些AI总结的摘录

看到不少的总结&#xff0c;边摘录边思考。尤其是这句话&#xff1a;“人类真正的问题是&#xff1a;我们拥有旧石器时代的情感、中世纪的制度和神一般的技术”。 22024生成模型综述 来自爱可可-爱生活 2024年见证了AI领域的重大飞跃。从OpenAI的主导地位到Claude的异军突起&…...

ws长时间不发消息会断连吗?

目录 一、ws长时间不发消息会断连吗1. **服务器端的空闲连接处理**2. **客户端的空闲连接处理**3. **网络设备的干预**4. **WebSocket Ping/Pong 机制** 二、为什么在使用nginx代理的情况下&#xff0c;长时间未活动的 WebSocket 连接可能会被中断或关闭1. **Nginx 的超时配置*…...

使用 ASP.NET Core wwwroot 上传和存储文件

在 ASP.NET Core 应用程序中上传和存储文件是用户个人资料、产品目录等功能的常见要求。本指南将解释使用wwwroot存储图像&#xff08;可用于文件&#xff09;的过程以及如何在应用程序中处理图像上传。 步骤 1&#xff1a;设置项目环境 确保您的 ASP.NET 项目中具有必要的依…...

【每日学点鸿蒙知识】人脸活体检测、NodeController刷新、自动关闭输入框、Row设置中间最大宽、WebView单例

1、HarmonyOS 人脸活体检测调用&#xff1f; H5调用应用侧方法可参考以下demo&#xff1a; index.ets Web()//注册方法.javaScriptProxy({object: this.testObj,name: "testObjName",methodList: ["getLocationTS"],controller: this.webController})cla…...

Android TV端弹出的PopupWindow没有获取焦点

在 TV 开发中&#xff0c;焦点管理是通过 Focus Navigation 实现的&#xff0c;PopupWindow 默认不接受焦点&#xff0c;导致遥控器无法选择弹窗内的控件。这是因为 PopupWindow 默认不会将焦点传递到其内容视图上。 要解决问题&#xff0c;可以通过以下步骤调整 PopupWindow …...

从0开始的docker镜像制作-ubuntu22.04

从0开始的docker镜像制作-ubuntu22.04 一、拉取基础ubuntu22.04镜像二、进入拉取的docker镜像中&#xff0c;下载自己需要的安装包三、安装需要的系统软件四、打包现有镜像为一个新的镜像五、推送打包的镜像到私有docker服务器1.编辑docker文件&#xff0c;使其允许http传输和对…...

1Panel自建RustDesk服务器方案实现Windows远程macOS

文章目录 缘起RustDesk 基本信息实现原理中继服务器的配置建议 中继服务器自建指南准备服务器安装1Panel安装和配置 RustDesk 中继服务防火墙配置和安全组配置查看key下载&安装&配置客户端设置永久密码测试连接 macOS安装客户端提示finder写入失败hbbs和hbbr说明**hbbs…...

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器&#xff0c;递增的不太行&#xff0c;控制的不够准确&#xff0c;其次在大于10微秒的延时是非常准确的&#xff0c;小于的话&#xff0c;就没有那没准&#xff0c;但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…...

深度学习——损失函数汇总

1. 连续值损失函数 总结:主要使用胡贝儿损失函数,应用于连续数值的预测之间的误差损失,参考地址 import torch import torch.nn as nna = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) b = torch.tensor([[3, 5], [8, 6]], dtype=torch.float)loss_fn1 = torch.nn.M…...

1、单片机寄存器-io输入实验笔记

1、硬件 时钟总线如下&#xff1a; PB端口挂载在AHB1总线上&#xff0c;因此要对该位进行使能。 引脚 LED0和LED1挂载在PB0和PB1上&#xff1a;推挽输出、100M、 上拉默认高电平&#xff0c;低电平点亮。 2、软件 位带操作 #ifndef _IO_BIT_H_ #define _IO_BIT_H_#define …...

记忆旅游系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

CentOS7下的 OpenSSH 服务器和客户端

目录 1. 在 IP 地址为 192.168.98.11 的 Linux 主机上安装 OpenSSH 服务器&#xff1b; 2. 激活 OpenSSH 服务&#xff0c;并设置开机启动&#xff1b; 3. 在 IP 地址为 192.168.98.22 的 Linux 主机上安装 OpenSSH 客户端&#xff0c;使用客户端命令&#xff08;ssh、 scp、…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...