用手势掌控PPT,玩转演示新姿势

推荐运行环境

 使用anaconda创建环境,以免污染原来的python开发环境conda install python=3.9pip install -q mediapipe==0.10.0pip install pyautoguiPython: version 3.8 - 3.11PIP: version 20.3+
 

请注意以下的坑

以下为我测试过程中的大坑,请及时避开!!!

出现如下错误:

RuntimeError: File loading is not yet supported on Windows

mediapipe0.9 版本太低

出现如下错误:

RuntimeError: Unable to open file at gesture_recognizer.task

base_options = python.BaseOptions(model_asset_path='gesture_recognizer.task')

gesture_recognizer.task 所在路径不能包含中文名称

项目概述:

通过手势识别实现了控制 PowerPoint 播放幻灯片的功能。在识别到特定手势("Open_Palm")时,会模拟按下 "Page Down" 键,从而使幻灯片向下翻页。同时,通过 PyAutoGui(用python 实现朋友圈自动点赞_python朋友圈自动点赞-CSDN博客) 控制鼠标和键盘进行交互操作。整个流程包括捕获视频帧、进行手势识别、根据识别结果执行相应操作等步骤。

原项目帮助文档:

 https://developers.google.com/mediapipe/solutions/vision/gesture_recognizer
  • Mediapipe 库介绍

Mediapipe 是由 Google 开发的一个开源库,旨在简化构建实时视觉和机器学习应用程序的过程。这个库提供了一系列预训练模型、工具和流水线,能够帮助开发者快速地开发各种涉及计算机视觉、姿态估计、手部追踪、物体检测、语义分割等任务的应用。

以下是 Mediapipe 库的一些特点和功能:

  1. 实时性:Mediapipe 库专注于实时应用程序的开发,能够在较短的时间内处理视频流或摄像头输入,并输出相应的结果。这使得它适用于实时交互应用、增强现实(AR)、虚拟现实(VR)等领域。

  2. 预训练模型:Mediapipe 提供了多个预训练模型,包括人体姿态估计、手部关键点检测、面部检测、物体识别等,为开发者提供了便捷的解决方案,无需从头开始训练模型。

  3. 模块化设计:Mediapipe 的设计是模块化的,允许开发者根据需求自由组合各种组件,构建出符合自己应用需求的流水线。

  4. 跨平台:Mediapipe 支持在不同平台上运行,包括桌面端、移动设备、嵌入式设备等,使得开发者可以轻松地将其应用部署到不同的环境中。

  5. 易于使用:Mediapipe 提供了丰富的文档、示例代码和教程,帮助用户快速上手并构建自己的视觉应用程序。同时,它还支持多种编程语言,包括 Python、C++ 等。

        通过 Mediapipe 库,开发者可以快速实现复杂的计算机视觉任务,加速应用程序的开发过程,同时享受到高效、稳定的模型性能和准确度。这使得 Mediapipe 成为一个强大的工具,为开发者在视觉和机器学习领域提供了丰富的功能和资源。

这个模型能识别七种手势:

 0 - Unrecognized gesture, label: Unknown1 - Closed fist, label: Closed_Fist ✊2 - Open palm, label: Open_Palm 👋3 - Pointing up, label: Pointing_Up ☝️4 - Thumbs down, label: Thumb_Down 👎5 - Thumbs up, label: Thumb_Up 👍6 - Victory, label: Victory ✌️7 - Love, label: ILoveYou 🤟​

在线演示地址:

http:// https://mediapipe-studio.webapps.google.com/studio/demo/gesture_recognizer

  • Hand landmark模型

        Hand landmark 模型是 Mediapipe 库中的一种模型,专门用于手部姿势估计和手势识别。该模型可以检测手部关键点,包括手指、手掌、手腕等部位,并提供准确的手部姿势信息。通过 Hand landmark 模型,开发者可以实现精细的手部动作追踪、手势识别、手语翻译等应用。

以下是 Hand landmark 模型的一些特点和功能:

  1. 关键点检测:Hand landmark 模型能够检测手部关键点,包括21个关键点,涵盖手掌、手指和手腕等部位。这些关键点对于描述手部姿势和手势非常重要。

  2. 精准度:Hand landmark 模型在识别手部关键点方面具有很高的精准度,可以准确地捕捉手部各部位的位置和姿势。

  3. 实时性:Hand landmark 模型可以在实时视频流中运行,实现实时的手部姿势估计和跟踪,适用于实时交互应用。

  4. 多手支持:该模型支持检测多只手,可以同时处理多只手部的姿势并提取出相应的关键点信息。

  5. 模型优化:Hand landmark 模型经过优化,能够在移动设备上高效运行,提供良好的性能和准确度。

        通过使用 Hand landmark 模型,可以构建各种基于手部姿势的应用程序,如手势控制、手部动作追踪游戏、手势识别交互界面等。这个模型为开发者提供了一个强大的工具,帮助他们在视觉和交互领域创造更加丰富、生动的体验。

  • 手势辨识模型gesture_recognizer.task下载地址

https://storage.googleapis.com/mediapipe-models/gesture_recognizer/gesture_recognizer/float16/1/gesture_recognizer.task

PowerPoint 常用快捷鍵

【Page Up】或【↑】或【←】 上一张

【Page Down】或【↓】或【→】 下一张

【F5】 开始播放幻灯片

【Home】 回到幻灯片第一页

【Esc】 结束放映

以下为完整程序,给出了详尽的注释

 """gesture_control_ppt.py"""​import mediapipe as mpfrom mediapipe.tasks import pythonfrom mediapipe.tasks.python import visionfrom mediapipe.framework.formats import landmark_pb2import cv2import numpyimport pyautogui as ag​mp_hands = mp.solutions.hands  # 检测手势mp_drawing = mp.solutions.drawing_utils  # 在图像上绘制检测到的结果,如手势、特征点等mp_drawing_styles = mp.solutions.drawing_styles  # 定义绘制样式的模块​​def display_gesture_and_hand_landmarks(images, gestures, hand_landmarks):# 将图像 images 转换为 NumPy 数组image = images.numpy_view()​# 提取最顶层手势信息和手部特征点列表# “最顶层”可能表示检测到的主要手势或优先级最高的手势。通过选择第一个手势或者根据算法返回的置信度来确定最顶层手势。top_gestures = [gestures for gestures in gestures]hand_landmarks_list = [hand_landmarks for hand_landmarks in hand_landmarks]  # 存储了手部特征点的坐标数据​title = ''  # 初始化标题字符串gesture_name = ''  # 初始化手势名称字符串​'''当检测到手势信息时,从第一个手势中提取手势的名称和置信度得分,然后构建一个带有手势名称和置信度的标题字符串,以便将这些信息显示在图像上。这样做可以帮助用户了解检测到的主要手势类型及其对应的置信度评分。'''if numpy.size(top_gestures) != 0:gesture_name = top_gestures[0][0].category_namegesture_score = top_gestures[0][0].scoretitle = f"{gesture_name}({gesture_score:.2f})"​# 创建图像的副本以进行标注annotated_image = image.copy()​# 如果检测到手部特征点列表,则对每个手部特征点列表进行处理if numpy.size(hand_landmarks_list) != 0:for hand_landmarks in hand_landmarks_list:hand_landmarks_proto = landmark_pb2.NormalizedLandmarkList()hand_landmarks_proto.landmark.extend([landmark_pb2.NormalizedLandmark(x=landmark.x, y=landmark.y, z=landmark.z) for landmark in hand_landmarks])  # 通过使用列表推导式,将每个手部特征点的 x、y、z 坐标数据添加到 hand_landmarks_proto 中。​# 在图像上绘制手部特征点和连接线mp_drawing.draw_landmarks(annotated_image,  # 表示要在其上绘制手部特征点和连接线的图像对象hand_landmarks_proto,  # 包含手部特征点坐标数据的对象mp_hands.HAND_CONNECTIONS,  # 指定手部特征点之间的连接关系,以便绘制连接线mp_drawing_styles.get_default_hand_landmarks_style(),  # 表示用于绘制手部特征点的样式,包括颜色、线宽等信息mp_drawing_styles.get_default_hand_connections_style())  # 表示用于绘制手部连接线的样式,同样包括颜色、线宽等信息​# 在图像上添加标题文本cv2.putText(annotated_image, f"{title}",(20, 30), cv2.FONT_HERSHEY_DUPLEX,1, (0, 0, 255), 1, cv2.LINE_AA)​# 返回带有标注信息和手势名称的图像及手势名称return annotated_image, gesture_name​​# 移动鼠标指针,点击并按 F5 键ag.moveTo(852, 125, 1) #   幻灯片坐标的确定可以使用截图软件Snipaste, 这是我笔记本上的坐标ag.click()ag.press('f5')​# 创建一个 GestureRecognizer 对象# 帮助文档 https://developers.google.com/mediapipe/api/solutions/python/mp/tasks/visionbase_options = python.BaseOptions(model_asset_path='gesture_recognizer.task')  # 该文件路径不能包含中文名options = vision.GestureRecognizerOptions(base_options=base_options)recognizer = vision.GestureRecognizer.create_from_options(options)​cap = cv2.VideoCapture(0)​# 以下实时处理来自摄像头的视频流并进行手势识别while True:  # 无限循环,持续从摄像头读取帧,并进行手势识别和处理ret, frame = cap.read()  # 从摄像头(或视频文件)中读取一帧图像数据mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=frame)  # 将读取的图像帧转换为 Mediapipe 图像对象recognition_result = recognizer.recognize(mp_image)  # 使用手势识别器(recognizer)对图像进行手势识别,返回手势识别的结果top_gesture = recognition_result.gestures  # 提取手势识别结果中的顶层手势信息hand_landmarks = recognition_result.hand_landmarks  # 提取手势识别结果中的手部特征点信息annotated_image, gesture_name = display_gesture_and_hand_landmarks(mp_image, top_gesture,hand_landmarks)  # 调用显示函数,生成带有标注的图像并获取手势名称cv2.imshow('frame', annotated_image)  # 在窗口中显示带有手势标注的图像​# 可以将手势换成 "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory"if gesture_name == "Open_Palm":ag.press('pagedown')ag.PAUSE = 1# 按Esc键退出循环if cv2.waitKey(1) == 27:break​cap.release()cv2.destroyAllWindows()
 

程序运行

1、如果单屏(多屏,两个应用程序可以在不同屏上演示更好),先打开幻灯片,我是用PowerPoint打开的。如果你用其它软件打开,请自己确定打开的坐标,修改ag.moveTo(852, 125, 1) 中坐标的值。

2、运行gesture_control_ppt.py,最小化pycharm窗口,PPT程序在最上面

3、当摄像头亮起时,用Open_Palm👋手势控制。

4、切换到视频窗口点击,按ESC退出程序。

幻灯片坐标的确定可以使用截图软件Snipaste来确定。

演示,因为只能上传gif,只是意思一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3.12.0 在Linux 制作镜像包 部署到docker 全过程

项目结构: 比如,在pycharm里需要运行 themain.py 1、上传Linux的目录结构: Dockerfile 文件需要制作: 这里是关键: #基于的基础镜像 FROM python:3.12.0 #代码添加到code文件夹 ADD ./EF_NFCS /code #设置code文…

uniapp:抖音PK进度条(nvue)

nvue中,仿抖音PK进度条效果, <template><view class="index" :style="{width:windowWidth+px,height:index_windowHeight+px,paddingTop:windowTop+px}"><view class="pk"><text class="pk_jindu_left_val fsz-24 …

【Leetcode每日一题】 分治 - 交易逆序对的总数(难度⭐⭐⭐)(74)

1. 题目解析 题目链接&#xff1a;LCR 170. 交易逆序对的总数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 归并排序的基本思路 归并排序将数组从中间分成两部分&#xff0c;在排序的过程中&#xff0c;逆序对的来…

OV SSL比DV SSL更好吗

直接说结论&#xff0c;OV证书相较于DV证书而言&#xff0c;性能更加强大&#xff0c;加密等级以及加密方式也更优&#xff0c;从安全的角度上来说&#xff0c;OV证书会比DV证书拥有更多的优势。 不同于DV SSL证书申请只需要验证域名所有权&#xff0c;申请OV SSL证书除了会验…

液压阀比例电磁铁控制放大器

液压阀比例电磁铁控制放大器是一种将电信号精确转换为液压动力的技术&#xff0c;用于实现对液压系统的精细控制。与传统的开关型电磁铁不同&#xff0c;比例电磁铁可以实现连续控制&#xff0c;允许进行微调以适应不同的控制需求。比例液压阀包括比例压力阀、比例流量阀等&…

SparkSQL概述

1.1. SparkSQL介绍 SparkSQL&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而是叫做Shark。最开始的时候底层代码优化、SQL的解析、执行引擎等等完全基于Hive&#xff0c;总是Shark的执行速度要比…

基于自己数据微调LLama3并本地化部署

首发网站https://tianfeng.space 准备数据 这是一条数据&#xff0c;格式如下&#xff1a; {"instruction": "胡女士出现了黄疸、恶心、呕吐等症状&#xff0c;可能患了什么疾病&#xff1f;", "input": "", "output": &…

【Android Studio】开启真机调试

1 打开手机的开发者模式 各种款式的手机进入开发者模式的情况不同&#xff0c;但大致是在 【关于手机】中多次点击系统版本即可进入。这里以小米8为例&#xff0c;记录下流程。 1.1 进入手机开发者模式 【设置】->【我的设备】->【全部参数】->【MIUI版本】连续点击3…

mysql数据库:read_me_recover_tn勒索恢复---惜分飞

最近有客户被MySQL删库勒索,现象如下:1. 删除掉以前的库,并创建一个同名库,并且会创建一个read_me_recover_tn库,类似下图: 2. 在read_me_recover_tn库中有一个readme表,每个被删除然后创建的库里面也有一个readme表 3. 每个readme表内容类似信息类似: mysql> desc read…

乡村振兴的文化旅游融合:整合乡村文化资源与旅游资源,发展文化旅游产业,提升美丽乡村的文化内涵和旅游吸引力

一、引言 随着城市化进程的加速和人们精神文化需求的日益增长&#xff0c;乡村旅游逐渐成为旅游市场的新热点。乡村振兴战略的提出&#xff0c;为乡村旅游的发展提供了新的契机。在这一背景下&#xff0c;如何整合乡村文化资源与旅游资源&#xff0c;发展文化旅游产业&#xf…

SpringBoot中使用RocketMQ实现事务消息来保证分布式事务的一致性(有代码)

前言 分布式事务是分布式系统中非常常见的问题。是非常必要钱常见的。实现的方式也是多种多样。今天这个视频主要来分享一下RocketMQ实现事务消息来保证分布式事务的一致性。不知道大家使用过这种方式没有。这种分布式事务的原理其实和本地消息表一样。 本地消息表实现分布式…

从零开始学习C语言,常用语法一文打尽

C语言常用语法 前言hello world数据类型变量变量的命名规范变量的分类变量的作用域和生命周期 常量字面常量const修饰的常变量#define定义的标识符常量枚举常量 字符串转义字符注释选择语句if循环语句while函数数组 前言 这篇博客旨在帮助零基础的朋友们入门&#xff0c;我会尽…

知名专业定制线缆知名智造品牌品牌推荐-精工电联:如何实现清扫机器人线缆产品的精益求精

在科技日新月异的今天&#xff0c;智能清扫机器人已经融入我们的日常生活。然而&#xff0c;其背后不可或缺的一部分&#xff0c;就是那些被称为机器人血管的精密线缆。精工电联作为高科技智能化产品及自动化设备专用连接线束和连接器配套服务商&#xff0c;致力于通过精益求精…

WINDOWS下zookeeper突然无法启动但是端口未占用的解决办法(用了WSL)

windows下用着用着时候突然zookeeper启动不了了。netstat查也没有找到端口占用&#xff0c;就是起不来。控制台报错 java.lang.reflect.UndeclaredThrowableException: nullat org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) ~…

如何使用phpMyAdmin删除数据库中的表?

本周有一个客户&#xff0c;购买Hostease的Linux虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何使用phpMyAdmin删除数据库中的表&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以…

细说温度测量—热电偶2

接上一篇《细说温度测量——热电偶1》 目录 1、硬件补偿 2、电压到温度转换 3、实用热电偶测量 &#xff08;1&#xff09;噪声抑制 &#xff08;2&#xff09;不良连接点连接 &#xff08;3&#xff09;标定降级 &#xff08;4&#xff09;并联阻抗 &#xff08;5&am…

GUI-图形化的用户界面

一、概述 所谓GUI&#xff0c;即图形化的用户界面/接口&#xff08;Graphical User Interface&#xff09;&#xff0c;实现了采用图形方式显示的计算机操作用户界面。比如下面的QQ登录界面&#xff1a; 为了不被落下&#xff0c;Java依旧稳定发挥&#xff0c;它也提供了一套…

WebRtc 视频通话,语音通话实现方案

先了解一下流程 和 流程图(chatGpt的回答) 实现 (底层代码实现, 可作为demo熟悉) 小demo <template><div><video ref"localVideo" autoplay muted></video> <!-- 本地视频元素&#xff0c;用于显示本地视频 --><video ref"r…

基于Springboot的线上教学平台

基于SpringbootVue的线上教学平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 学习资料 交流论坛 试卷列表 公告信息 后台登录 后台首页 学员管理 资料类型…

实习报告怎么写?笔灵AI实习体验报告模版分享:AI产品前端实习生

实习报告怎么写&#xff1f;笔灵AI实习体验报告模版可以帮你 点击即可使用&#xff1a;https://ibiling.cn/scene/inex?fromcsdnsx 下面分享AI产品前端实习生的实习报告 尊敬的导师和领导们&#xff1a;首先&#xff0c;我想对你们表达我的诚挚感谢&#xff0c;感谢你们给我…