分享

简单实现语音控制视频播放教程

 大傻子的文渊阁 2023-01-31 发布于浙江

前言:家里老人在电脑上看电视剧时不会播放、暂停等操作,老人学习能力较差,这些简单的操作完全可以通过程序完成,于是我便想通过语音识别实现控制视频播放,实现起来也很简单,接下来我会分享自己开发中的每一步

目标:实现语音控制视频播放、暂停、增大音量、减小音量

准备:离线语音识别模块、CH340 USB转TTL模块(用于下载、通信,一般商家会提供配套)、电脑

原理概述:首先给语音识别模块设置好命令词,语音模块识别出来后通过串口将指令发送给电脑,电脑上的python程序根据串口接收的数据执行播放、暂停等操作

第一步:设置语音模块

注意,购买的语音模块一定要有串口输出功能

各种语音模块设置方法不一样,大家按商家给的教程弄,我使用的模块是在网页端进行设置

串口参数设置,保持默认就行,简单记一下波特率,后面python编程会用

串口参数设置

设置命令词和回复语

设置命令词和回复语

设置命令词对应动作

设置命令词对应动作

发送的数据尽量设置简单一点,只要后面的程序能和这里对应就行,比如我设置的是0、1、2、3

编译固件、烧录程序等就不演示了,各种语音模块方法不一样,大家按商家给的教程弄

第二步:编写python程序

程序只有几十行,很简单,不过我们先做一项准备工作,查看语音模块的端口名

打开电脑的设备管理器,我是win10,所以打开方法是右键此电脑-管理-设备管理器,然后展开端口,将语音模块插入电脑,我这里增加的端口是USB-SERIAL CH340(COM3),括号里的端口号不管,注意端口名是“USB-SERIAL CH340”中间有空格,那么我们用USB-SERIAL或者CH340其中一个进行识别就行(但不能用USB-SERIAL CH340,否则识别不出来,这和后面编程有关),我们先记住,后面会用

查看端口名

接下来就是代码了,程序的工作方式就是自动扫描并打开串口,接受串口数据,根据数据模拟按下按键的操作,实现播放暂停等功能,代码大部分已注释,大家应该能看懂

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :SpeechRecognizerTool.py
# @Time      :2022/12/18 13:46
# @Author    :Storm

import time     # 时间相关函数
import serial  # 串口通信
import pyautogui  # 模拟按下按键
import threading    # 线程
import serial.tools.list_ports

Flag = 0    # 语音识别模块是否连接的标志
port_list = list('')    # 端口列表
port_num = ''   # 端口号


# 定义串口基类
class MySerial(threading.Thread):
    def run(self):
        global Flag     # 先全局声明再引用
        while True:
            if Flag == 1:     # 检测语音模块连接到电脑时
                ser = serial.Serial(port_num, 9600, timeout=4)  # 打开串口 注意波特率要和前面语音模块设置的一样

                while ser.is_open:  # 串口打开时
                    count = ser.inWaiting()  # 检测串口缓冲区数据

                    if count != 0:  # 如果存在数据
                        SerialRcvData = ser.read(ser.in_waiting).hex()  # 以16进制格式读取数据

                        # 根据收到的数据模拟点击按键
                        if SerialRcvData == '00':
                            pyautogui.press('space')
                        elif SerialRcvData == '01':
                            pyautogui.press('space')
                        elif SerialRcvData == '02':
                            pyautogui.press('volumeup')     # 调大音量
                        elif SerialRcvData == '03':
                            pyautogui.press('volumedown')   # 调大音量
                    time.sleep(0.1)  # 可以有一个特别小的延时,否则CPU使用率较高
                ser.close()     # 语音模块端口关闭时, 关闭串口避免占用
                Flag = 0    # 端口关闭 标志置0
            time.sleep(0.1)


if __name__ == "__main__":

    MyThread = MySerial()
    MyThread.start()    # 开启串口基类线程

    while True:
        time.sleep(0.5)     # 延时
        port_list = list(serial.tools.list_ports.comports())       # 获取所有端口
        if len(port_list) > 0:
            # 检测语音模块的端口
            for i in port_list:
                port_temp_str = str(i)      # 将列表元素转化为字符串
                port_list = port_temp_str.split()       # 使字符串以空格号分割
                for j in port_list:     # 对于以空格为间隔的每个元素
                    if "CH340" == j:    # 检测是否是语音识别模块的端口名
                        port_num = port_list[0]     # 保存端口号
                        Flag = 1  # 检测到语音模块, 标志置1
        else:
            Flag = 0

第三步:收尾

将python打包成exe并将程序设置为开机启动,其实设置开机启动可有可无,但是因为语音模块需要配合python程序才有控制视频的功能,所以为了我不在的时候我的家人打开电脑插上语音模块就能使用这个功能,我就直接开机启动了,网上有非常详细的教程,我就不多赘述了,大家直接百度即可

最后,享受成果吧

这是我使用的语音模块,很小,一只手就能握住

插在电脑上的样子,下面吊着的是喇叭

插在电脑上

大家还可以继续开发更多其他功能,比如python可以打开外部软件,音乐软件有全局快捷键,可以让语音模块控制电脑打开音乐软件放歌等等,原理是一样的

参考:

https://blog.csdn.net/cp_srd/article/details/104741429

https://blog.csdn.net/weixin_28432777/article/details/113673599

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多