手势控制音量--详细注释解析恩培作品1

感谢恩培大佬对项目进行了完整的实现,并将代码进行开源,供大家交流学习。

一、项目简介

本项目最终达到的效果为手势控制电脑音量。如图所示

项目用python实现,调用opencv,mediapipe,ctypes等库,由以下四个步骤组成:

1、使用OpenCV读取摄像头视频流

2、识别手掌关键点像素坐标

3、根据拇指和食指指尖的坐标,利用勾股定理计算距离

4、将距离等比例转为音量大小,控制电脑音量

二、运行方法

用IDE的朋友,可以下载代码,进入6.hand_control_volume.py对应目录下运行此py文件即可,注意需要USB摄像头

命令行的朋友,可以先进入命令行。用windows自带的Powershell或者VsCode都行。进入命令行后,运行以下指令。(需要预先安装gitbash

git clone https://github.com/enpeizhao/CVprojects.git

cd .\CVprojects\codes\6.hand_control_volume\

以上两行指令将代码及其历史修改记录打包下载到本地,并进入了手势控制音量的文件夹下。再运行如下指令:

pip install -r .\requirements.txt

运行上述指令,将会使用pip包管理器安装依赖库。pip将会读取requirements.txt文件的内容,将所需的包,与其对应的版本,按照文件描述的内容逐个安装。在这里便是以下五个依赖。

mediapipe==0.8.9即指定安装0.8.9版本的mediapipe。若要安装某个版本号之后的,可以使用mediapipe>=x.x.x

以上两步成功运行的话,项目运行所需的环境便配置好了,接下来便可以运行。

windows用户:

python .\6.hand_control_volume.py

mac用户:

python .\6.hand_control_volume_mac.py

输入指令按回车后,代码便开始运行。

三、代码讲解

# 更多疑问,欢迎私信交流。thujiang000
import cv2 # 导入OpenCV,用于打开摄像头,获取图像,显示图像等
import mediapipe as mp # 用于手的关键点识别
# 用于音量控制
from ctypes import cast, POINTER 
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume

import time # 用于计时
import math # 数学计算库,此处用于计算根号
import numpy as np # 科学计算库,实现了各种矩阵运算
class HandControlVolume: # 定义一个名为HandControlVolume的类
def __init__(self):
    self.mp_drawing = mp.solutions.drawing_utils # 初始化medialpipe的画图函数
    self.mp_drawing_styles = mp.solutions.drawing_styles
    self.mp_hands = mp.solutions.hands # 初始化手掌检测对象

    devices = AudioUtilities.GetSpeakers() # 初始化windows音频控制对象 
    interface = devices.Activate(
        IAudioEndpointVolume._iid_, CLSCTX_ALL, None) # 调用系统的音频控制接口
    self.volume = cast(interface, POINTER(IAudioEndpointVolume))
    self.volume.SetMute(0, None) # 设置音量归零
    self.volume_range = self.volume.GetVolumeRange() # 获取电脑音量范围
# 主函数,
def recognize(self):
    fpsTime = time.time()# 调用time函数记下程序运行到此处的时间,秒为单位用于
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值