基于mediapipe库和pyautogui库 手势识别控制鼠标键盘——计算机

目录
1、项目简介
2、项目环境配置
3、代码运行
4、代码说明
1、项目简介
【基于mediapipe库和pyautogui库手势识别控制鼠标键盘——计算机】此项目的核心内容是使用库和实现使用电脑摄像头进行手势识别 , 实时控制电脑鼠标完成移动、左右键、上下翻页 , 以及切换页面的功能 。
2、项目环境配置
(1) 首先需要安装来创建新的环境 , 具体请参考 , 执行完第三步即可(>=3.7.6)
安装 , 创建环境 , 配置环境_无名大学生的博客-CSDN博客安装进度条不动
(2)下载项目文件到本地
正在为您运送作品详情

基于mediapipe库和pyautogui库  手势识别控制鼠标键盘——计算机

文章插图
(3)参考(1)链接中的第六步 , 在中新建一个工程 , 并将上一步下载的项目文件移动到此工程目录下 。
(4)在的之下 , 激活之前创建的环境 , 并进入(3)创建的工程目录下 , 再进入我们的项目文件夹内 , 然后输入
pip install -r requirements.txt
如下图:
下载完成如下图:
这时候 , 项目就可以运行起来了
3、代码运行
请参考项目的.md文件 , 其中有详细的使用教程 , 另外我还提供了一个演示视频 , 均在项目文件夹里 , 这里就不多赘述 。
基于mediapipe库和pyautogui库  手势识别控制鼠标键盘——计算机

文章插图
4、代码说明
(1)分两个线程分别执行识别和系统硬件的控制
if __name__ == "__main__":cl = threading.Thread(target=control.recognize, )m = threading.Thread(target=move_m, )cl.start()time.sleep(1)m.start()
cl 任务执行的手掌识别 , m 任务执行鼠标的控制等等任务
(2)部分手势的识别思路
手部动作识别的核心是手指的弯曲 。手指弯曲部分代码如下 , 主要思路是以手指的四个关节之间的斜率的差来判断手指是否弯曲 , 定义以手指根部为参考点 , 上面三个关节相对于根关节的斜率之间的差不超过一个设置的微小量即可认为未弯曲 。
# 用来判断手指弯曲状态 。输入是一个手指上的四个点def wave_stright(finger):angle1 = np.arctan2((finger[0][1] - finger[1][1]), (finger[0][2] - finger[1][2]))angle2 = np.arctan2((finger[0][1] - finger[2][1]), (finger[0][2] - finger[2][2]))angle3 = np.arctan2((finger[0][1] - finger[3][1]), (finger[0][2] - finger[3][2]))if np.abs((angle3 - angle1)) < diff_angle_tiny and np.abs((angle2 - angle1)) < diff_angle_tiny:return Trueelse:return False# print(angle1, angle2, angle3)
由此出发可以得到不同手指的弯曲情况 , 进一步识别为不同手势 。
(3)点击动作
点击动作与(2)中的手指弯曲有所不同 , 点击时 , 手指只需要上面两个关节稍微弯曲即可 , 而(2)中的弯曲是手指整个弯曲 。这里我们的实现思路是 , 用指尖节点相对于手指根部的节点比上手根节点相对于手掌的根部节点的距离之比 , 作为一个判断依据 , 可以想象的是 , 手指稍微弯曲 时 , 其距离的比值会减小 。这里采用比值的原因是 , 识别的手掌上各节点之间的距离的大小随着手掌距离摄像头远近而改变 。
# 用来判断是否有点击动作def click_down(figer_top, figer_reference, hand_center, button):if button == "left":if len(figer_top[1], figer_top[2], hand_center[1], hand_center[2])