使用Python,mediapipe构建手部姿势探测器

news2025/2/24 10:26:48

使用Python,mediapipe构建手部姿势探测器

    • 1. 效果图
    • 2. 手部标志
    • 3. 源码
    • 参考

这篇博客将介绍手部标志是什么,以及如何使用Python,mediapipe构建手部姿势探测器,

Mediapipe是一个跨平台的库,由谷歌开发,为计算机视觉任务提供惊人的现成的ML解决方案。

pip install mediapipe

1. 效果图

2. 手部标志

在这里插入图片描述

WRIST = 0
THUMB_CMC = 1
THUMB_MCP = 2
THUMB_IP = 3
THUMB_TIP = 4
INDEX_FINGER_MCP = 5
INDEX_FINGER_PIP = 6
INDEX_FINGER_DIP = 7
INDEX_FINGER_TIP = 8
MIDDLE_FINGER_MCP = 9
MIDDLE_FINGER_PIP = 10
MIDDLE_FINGER_DIP = 11
MIDDLE_FINGER_TIP = 12
RING_FINGER_MCP = 13
RING_FINGER_PIP = 14
RING_FINGER_DIP = 15
RING_FINGER_TIP = 16
PINKY_MCP = 17
PINKY_PIP = 18
PINKY_DIP = 19
PINKY_TIP = 20

3. 源码

# 手部姿势检测
# python hand_gesture_detect.py

import cv2
# 导入OpenCV和Mediapipe 库
import mediapipe as mp

# 初始化Mediapipe
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
# 初始化视频捕获
cap = cv2.VideoCapture(0)
# 检查相机是否成功打开
if not cap.isOpened():
    print("Unable to open camera")
    exit()
# 初始化Mediapipe Hands object,static_image_mode设置为false启动实时视频处理,max_num_hands设置要检测的最大手数,并设置min_detection_confidence检测的最小置信度阈值。
with mp_hands.Hands(static_image_mode=False, max_num_hands=2, min_detection_confidence=0.5) as hands:
    while True:
        # 启动无限循环以连续读取视频捕获中的帧
        ret, frame = cap.read()
        if not ret:
            print("Error reading frame from camera")
            break
        # 转换BGR为RGB图像
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # 使用Mediapipe处理帧
        results = hands.process(frame_rgb)
        # 帧上绘制手部姿势
        if results.multi_hand_landmarks:
            for hand_landmarks in results.multi_hand_landmarks:
                mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS,
                                          mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2, circle_radius=4),
                                          mp_drawing.DrawingSpec(color=(255, 0, 0), thickness=2, circle_radius=2))

            # 获得索引 12 和 9 处的红色圆圈的坐标 (x, y)。比较每个索引处的 Y 坐标,这样,如果索引 12 处的 Y 坐标低于索引处的 Y 坐标指数为 9,那么可以认为这手牌是闭合的,否则,它是打开的。
            h, w, _ = frame.shape  # h = frame height , w = frame width
            x, y = int(hand_landmarks.landmark[12].x * w), int(hand_landmarks.landmark[12].y * h)
            x1, y1 = int(hand_landmarks.landmark[9].x * w), int(hand_landmarks.landmark[9].y * h)
            if y < y1:
                hand_status = "Open"
                cv2.rectangle(frame, (0, 0), (200, 60), (255, 0, 0), -1)
                cv2.putText(frame, "Open Hand", (0, 35), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 3)
            else:
                hand_status = "Closed"
                cv2.rectangle(frame, (0, 0), (200, 60), (255, 0, 0), -1)
                cv2.putText(frame, "Closed Hand", (0, 35), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 3)

        # 显示帧
        cv2.imshow("Hand Detection", frame)
        # 按下‘q’键退出循环
        if cv2.waitKey(1) == ord("q"):
            break
# 释放视频流指针,关闭打开的窗口
cap.release()
cv2.destroyAllWindows()

参考

  • https://mp.weixin.qq.com/s/jXMnlx9DygZE-jzkYID9FA

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

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

相关文章

【pandas技巧】group by+agg+transform函数

目录 1. group by单个字段单个聚合 2. group by单个字段多个聚合 3. group by多个字段单个聚合 4. group by多个字段多个聚合 5. transform函数 studentsgradesexscoremoney0小狗小学部female958441小猫小学部male938362小鸭初中部male838543小兔小学部female909314小花小…

KubeSphere 社区双周报 | KubeKey 支持 Web UI | 2023.10.13-10.26

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.10.13-2023.…

No module named ‘skimage.viewer‘解决方法

问题 在使用https://github.com/DinoMan/face-processor工具时出现的问题 解决方法 scikit-image0.20官网中提到已经移除了skimage.viewer 可以安装0.18版本的&#xff1a; python -m pip install -U pip python -m pip install -U scikit-image0.18

【蓝桥每日一题]-前缀和与差分(保姆级教程 篇3)#涂国旗 #重新排序

目录 题目&#xff1a;涂国旗 思路&#xff1a; 题目&#xff1a;重新排序 思路&#xff1a; 题目&#xff1a;涂国旗 思路&#xff1a; 乍一看好像没啥思路&#xff0c;但是我们需要涂最少的格子&#xff0c;所以要都尝试一下才行&#xff0c;也就是从上面开始白至少一行&am…

SpringBoot 公司推广系统 公司广告系统

SpringBoot 公司推广系统 公司广告系统 系统功能 首页功能: 广告展示 方案列表 站内搜索 资讯 查看详细咨询 登录注册 收藏 咨询方案 在线客服实时聊天 后台管理功能: 系统管理分为: 用户管理 角色管理 客户管理 首页轮播管理 公告管理 方案管理: 方案管理 资讯管理: 类型管…

【OJ for Divide and Conquer】OJ题解

文章目录 A - Ultra-QuickSortB - Hanoi Tower Troubles Again! [找规律递归]C - Fibonacci Again[找规律]E - [Fire Net](https://programmerall.com/article/7276104269/)[DFS 搜索 ⭐⭐]F - Gridland[找规律]G - Maximum Subarray Sum[动态规划/分治..经典⭐]I - Quoit Desi…

在线运行C++的网站(欢迎补充)

1、https://cpp.sh/ 谷歌打开&#xff0c;好用 2、https://godbolt.org/ 会显示汇编

Beyond Compare4 30天试用到期的解决办法

相信很多小伙伴都有在使用Beyond Compare 4软件&#xff0c;如果我们没有激活该软件&#xff0c;就只有30天的评估使用期&#xff0c;那么过了这30天后我们怎么继续使用呢&#xff1f;下面小编就来为大家介绍方法。 打开Beyond Compare4&#xff0c;提示已经超出30天试用期限制…

单目深度估计之图像重构原理解析

一、参考资料 浅析自监督深度估计中的光度损失(Photometric Loss) 二、图像重构原理 设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t 1 > <I_{t-1},I_{t},I_{t1}> <It−1​,It​,It1​>&#xff0c;其中 t t t 为时间索引&#xff0c;…

Java SE 学习笔记(十九)—— XML、设计模式

目录 1 XML1.1 XML 概述1.2 XML 语法规则1.3 XML 文档约束&#xff08;了解&#xff09;1.3.1 DTD 约束1.3.2 schema 约束 2 XML 解析2.1 XML 解析概述2.2 Dom4J 解析 XML 文件2.3 XML 解析案例 3 XML 检索4 设计模式4.1 工厂模式4.2 装饰模式 1 XML 在有些业务场景下&#xff…

文心一言 VS 讯飞星火 VS chatgpt (123)-- 算法导论10.4 4题

四、用go语言&#xff0c;对于一个含 n个结点的任意有根树&#xff0c;写出一个 O(n)时间的过程&#xff0c;输出其所有关键字该树以左孩子右兄弟表示法存储。 文心一言&#xff1a; 在计算机科学中&#xff0c;左孩子右兄弟表示法是一种用于表示树状结构的方法&#xff0c;其…

springboot--基本特性--自定义 Banner

SpringApplication的使用 前言效果1.1 自定义banner1.2 自定义SpringApplication配置文件优先级高于程序化调整的优先级启动自定义banner关闭自定义banner 1.3 FluentBuilder API 前言 修改启动时候的修改banner 效果 1.1 自定义banner banner制定官网链接 在配置文件中设置…

sentinel规则持久化-规则同步nacos-最标准配置

官方参考文档&#xff1a; 动态规则扩展 alibaba/Sentinel Wiki GitHub 需要修改的代码如下&#xff1a; 为了便于后续版本集成nacos&#xff0c;简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 <dependency><groupId>com.alibaba.c…

Qt之DLL的使用(关联DLL生成篇)

文章目录 一、示例二、使用步骤1.所需文件2.添加库3.选择库4.完成添加5.导入类使用 相关文章 一、示例 下图为使用DLL的示例图 二、使用步骤 1.所需文件 将所需要使用的相关库&#xff08;导出项目的库&#xff0c;包括Debug和Release两个编译模式的库&#xff0c;缺少某个…

【算法优选】前缀和专题——叁

文章目录 &#x1f60e;前言&#x1f334;[和为K的子数组](https://leetcode.cn/problems/subarray-sum-equals-k/description/)&#x1f6a9;题目描述&#x1f6a9;思路解析&#x1f6a9;代码实现 &#x1f384;[和可被 K 整除的子数组](https://leetcode.cn/problems/subarra…

【观察】Dell APEX云平台:引领多云时代上云新范式

毫无疑问&#xff0c;过去十多年是云计算发展的黄金十年&#xff0c;云计算理念不断被市场所接受&#xff0c;但随着企业上云深入和认知度的不断增加&#xff0c;摆在很多企业面前的选择题也发生了新变化&#xff0c;即从过去企业上云或不上云的纠结&#xff0c;转变成今天如何…

在pycharm中,远程操作服务器上的jupyter notebook

一、使用场景 现在我们有两台电脑&#xff0c;一台是拥有高算力的服务器&#xff0c;另一台是普通的轻薄笔记本电脑。如何在服务器上运行jupyter notebook&#xff0c;同时映射到笔记本电脑上的pycharm客户端中进行操作呢&#xff1f; 二、软件 pycharm专业版&#xff0c;jupy…

从一线到联合,克唑替尼在ALK阳性NSCLC治疗新旅程【医游记】

&#xff08;图片来源于网络&#xff09; 一、克唑替尼简介 克唑替尼(Crizotinib),商品名赛可瑞,是一款口服服用的小分子酪氨酸激酶抑制剂。克唑替尼最早于2011年被美国FDA批准用于ALK阳性晚期NSCLC的治疗。其主要靶点为间变淋巴瘤激酶(ALK)和ROS1(ROS proto-oncogene 1)融合…

Beyond Compare4 30天试用到期的2024最新解决办法

对于有文档对比需求的小伙伴们来说&#xff0c;Beyond Compare这款软件一定不陌生&#xff0c;这款软件是一款功能非常强大的文档对比软件。同时这款软件也是一款付费软件&#xff0c;需要用户付费才能够享有Beyond Compare的永久使用权&#xff0c;不过在付费之前&#xff0c;…

【OpenCV实现图像梯度,Canny边缘检测】

文章目录 概要图像梯度Canny边缘检测小结 概要 OpenCV中&#xff0c;可以使用各种函数实现图像梯度和Canny边缘检测&#xff0c;这些操作对于图像处理和分析非常重要。 图像梯度通常用于寻找图像中的边缘和轮廓。在OpenCV中&#xff0c;可以使用cv2.Sobel()函数计算图像的梯度…