【桌面语音宠物】 人机交互 HCI 罗小黑 python 多线程 语音识别

提示:文章最后有GitHub源码地址,配制好解释器,语言版本以及pip install相关库,右键宠物,即可使用

一、代码框架(代码解读)

func.py文件

类 Eat:
这个类代表了一个用于推荐餐厅的小部件。
__init__ 方法初始化了小部件的几何、标题、背景和UI元素。
add_ui 方法设置了UI组件,比如 QTextBrowser 用于显示文本。
closeEvent 方法处理了关闭小部件的事件。

类 Weather:
这个类代表了一个用于显示天气信息的小部件。
__init__ 方法初始化了小部件的几何、标题、背景和UI元素。
add_ui 方法设置了UI组件,比如 QTextBrowser 用于显示文本。
它还调用了 OpenWeatherMap 的 API 获取上海的天气数据,并将其显示出来。
closeEvent 方法处理了关闭小部件的事件。

类 Translation:
这个类代表了一个用于将中文文本翻译为英文的小部件。
__init__ 方法初始化了小部件的几何、标题、背景和UI元素。
add_ui 方法设置了UI组件,比如 QTextBrowser 用于显示文本。
它通过向有道翻译 API 发送 POST 请求将给定的中文文本翻译为英文,并显示翻译后的文本。
closeEvent 方法 处理了关闭小部件的事件。

main部分:
代码的这部分初始化了一个 QApplication,创建了一个 Eat 类的实例(代表餐厅推荐),显示了小部件,并使用 app.exec_() 开始应用程序事件循环。
每个类代表应用程序的不同功能或小部件,而主要部分初始化了应用程序并开始了事件循环。

PetAssistant文件

语音识别线程类 SpeechRecognitionThread

这是一个继承自 QThread 的自定义线程类,用于实现语音识别。
在 run 方法中,使用 SpeechRecognition 库进行语音识别,将识别结果通过信号 recognition_completed 发送出去。

宠物助手类 PetAssistant:
这个类继承自 QWidget,代表了整个宠物助手应用程序。
init 方法用于初始化窗口属性,使其无边框、总显示在最前面,并且设置窗口透明。
initPall 方法用于初始化系统托盘菜单,设置托盘图标和菜单项。
initPetImage 方法用于初始化宠物显示的图片资源。
petNormalAction 方法用于设置宠物的正常待机动作,通过定时器实现随机切换动作。
randomAct 方法用于随机切换宠物的动作。
quit 方法用于关闭程序。
showwin 方法用于显示宠物窗口。
randomPosition 方法用于随机设置宠物的位置。
mousePressEvent、mouseMoveEvent、mouseReleaseEvent、enterEvent 方法用于处理鼠标事件,实现宠物跟随鼠标移动等交互。
contextMenuEvent 方法用于处理右键菜单事件,根据右键菜单项的选择执行相应的操作。
handle_speech_recognition_completed 方法用于处理语音识别完成后的结果,根据识别结果执行不同的操作。
其他方法用于实现宠物不同动作的功能,如移动、播放音乐、餐厅推荐、天气查询、汉英翻译等。
主程序部分:

创建了一个 QApplication 实例和 PetAssistant 实例,并启动了应用程序事件循环。

其它文件

其他文件诸如.mp3 .jpg .gif等均是一些资源配置文件,可以根据自身条件修改。

二、多线程编程

在这使用了 Python 的多线程编程来实现语音识别功能。
具体实现步骤如下:

创建自定义线程类 SpeechRecognitionThread:

①首先定义了一个继承自 QThread 的线程类 SpeechRecognitionThread,用于执行语音识别任务。
在该类中定义了一个字符串类型的信号 recognition_completed,用于在语音识别对象与宠物助手类之间传递信息。

②重写 run 方法:
SpeechRecognitionThread 类中重写了 run 方法,该方法是线程的入口点。
在 run 方法中,使用 speech_recognition 库进行语音识别。这里使用了 with 语句和 sr.Microphone() 获取麦克风资源,并通过 r.listen(source) 获取音频数据。
尝试通过 r.recognize_google(audio, language=‘zh-CN’) 将音频数据转换为文字,并捕获可能发生的异常。
如果语音中包含了“关闭”相关的关键词,则通过信号 recognition_completed 发送关闭信号,以通知宠物助手程序退出。
在主程序中启动线程:

③在主程序的入口处,创建了一个 QApplication 实例和一个 PetAssistant 实例。
然后创建了一个 SpeechRecognitionThread 实例,并连接了其信号 recognition_completed 与宠物助手类的槽函数handle_speech_recognition_completed。
最后调用了线程的 start 方法,启动了语音识别线程

这样设计,语音识别任务被放在一个独立的线程中执行,不会阻塞主线程,从而保持了程序的流畅性和响应性。

三、源码地址

https://github.com/Luo-gw/Voice-desktop-pets–Milo

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值