Python+OpenCV手势识别Mediapipe(基础篇)

Python+OpenCV手势识别Mediapipe(新手入门)

前言

本篇文章适合刚入门OpenCV的同学们。文章将介绍如何使用 Python利用 OpenCV图像捕捉,配合强大的 Mediapipe库来实现 手势检测与识别;本系列后续还会 继续更新Mediapipe手势的各种衍生项目,还请多多关注!

项目效果图

视频捕捉帧数稳定在(25-30)

Python+OpenCV手势识别Mediapipe(基础篇)

; 认识Mediapipe

项目的实现,核心是强大的 Mediapipe ,它是 google的一个 开源项目:

功能详细人脸检测 FaceMesh从图像/视频中重建出人脸的3D Mesh人像分离从图像/视频中把人分离出来手势跟踪21个关键点的3D坐标人体3D识别33个关键点的3D坐标物体颜色识别可以把头发检测出来,并图上颜色

Mediapipe Dev

Python+OpenCV手势识别Mediapipe(基础篇)
以上是 Mediapipe的几个常用功能 , 这几个功能我们会在后续一一讲解实现
Python安装 Mediapipe
pip install mediapipe==0.8.9.1

也可以用 setup.py 安装
https://github.com/google/mediapipe

项目环境

Python 3.7
Mediapipe 0.8.9.1
Numpy 1.21.6
OpenCV-Python 4.5.5.64
OpenCV-contrib-Python 4.5.5.64

Python+OpenCV手势识别Mediapipe(基础篇)
实测也支持Python3.8-3.9

; 代码

核心代码

OpenCV摄像头捕捉部分

import cv2

cap = cv2.VideoCapture(0)

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    cv2.imshow("HandsImage", img)
    cv2.waitKey(1)

mediapipe 手势识别与绘制


mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = hands.process(imgRGB)

    if results.multi_hand_landmarks:
        for handLms in results.multi_hand_landmarks:
            for id, lm in enumerate(handLms.landmark):

                h, w, c = img.shape
                cx, cy = int(lm.x * w), int(lm.y * h)
                print(id, cx, cy)

                cv2.circle(img, (cx, cy), 15, (255, 0, 255), cv2.FILLED)

            mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)

视频帧率计算

import time

pTime = 0
cTime = 0

while True
cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 255), 3)

完整代码


import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture(0)

mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils

pTime = 0
cTime = 0

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    results = hands.process(imgRGB)

    if results.multi_hand_landmarks:
        for handLms in results.multi_hand_landmarks:
            for id, lm in enumerate(handLms.landmark):

                h, w, c = img.shape
                cx, cy = int(lm.x * w), int(lm.y * h)
                print(id, cx, cy)

                cv2.circle(img, (cx, cy), 15, (255, 0, 255), cv2.FILLED)

            mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
    '''''
    视频FPS计算
       '''
    cTime = time.time()
    fps = 1 / (cTime - pTime)
    pTime = cTime

    cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                (255, 0, 255), 3)

    cv2.imshow("HandsImage", img)
    cv2.waitKey(1)

项目输出

Python+OpenCV手势识别Mediapipe(基础篇)

; 结语

以此篇文章技术为基础,后续会更新利用此篇基础技术实现的手势控制:音量,鼠标
项目下载地址https://github.com/BIGBOSS-dedsec/HandsDetection_Python

Original: https://blog.csdn.net/weixin_50679163/article/details/124391674
Author: BIGBOSSyifi
Title: Python+OpenCV手势识别Mediapipe(基础篇)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/727813/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • C语言练习2:用@符号输出字母H的图案

    1 /*练习题目为:用@符号输出字母H的图案*/ 2 3 #include 4 #include 5 6 #define H 12 7 #define W 16 8 /******…

    Python 2023年6月10日
    082
  • 【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里?

    相关博客【自然语言处理】【大模型】PaLM:基于Pathways的大语言模型【自然语言处理】【chatGPT系列】大语言模型可以自我改进【自然语言处理】【ChatGPT系列】Web…

    Python 2023年11月3日
    077
  • Fiddler自动保存抓包数据

    1.fiddler打开 FiddlerScript 2.添加OnBeforeRequest代码 备注: oSession方法及属性 这里我需要补充一下OpenTextFile方法:…

    Python 2023年8月14日
    080
  • python数据清洗—实战案例(清洗csv文件)

    我也是最近才开始这方面的学习,这篇就当作学习的笔记,记录一下学习的过程 目录 * – 所以我们现在要解决的问题就是删除列名中的空格 – 接下来要解决的问题就…

    Python 2023年8月6日
    083
  • 务必收藏,我珍藏多年的Python奇淫技巧,不看后悔啊~

    0x00 emoji如何优雅的在 Python 中使用 emoji 表情,这个库兴许可以满足你的需求。 In [1]: import emoji In [2]: emoji.emo…

    Python 2023年8月28日
    075
  • Windows下Anaconda安装了Pytorch,在Pycharm无法import torch或者numpy

    首先要安装好了Pytorch,安装过程如博主所示:使用anaconda安装pytorch_UstarZzz的博客-CSDN博客_anaconda安装pytorch 文中博主创建了一…

    Python 2023年8月26日
    085
  • 【日常系列】LeetCode《28·动态规划3》

    数据规模->时间复杂度 内容 二维数组中的路径问题买卖股票的最佳时机 lc 62【剑指 098】【top100】:不同路径https://leetcode.cn/proble…

    Python 2023年11月8日
    044
  • numpy的简单使用(二)

    目录 4.生成随机数 5.索引与切片 布尔索引 6.数组运算 数组之间的大小比较 7.数组的组合 一、使用函数concatenate 二、使用函数hstack()和vstack()…

    Python 2023年8月25日
    046
  • ChatGPT体验和教程

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月7日
    057
  • Aip接口自动化测试框架pytest+allure+request+jsonpath+excle

    Aip接口自动化测试框架pytest+allure+request+jsonpath+excle/yaml 介绍 Aip接口自动化测试python+pytest+allure+re…

    Python 2023年9月11日
    071
  • Flask 常用组件

    文章目录 Flask常用组件 * 一、 flask_session – 1、 常用配置 2、 使用方法 + 2.1 session_interface 2.2 conf…

    Python 2023年8月15日
    061
  • Python中Pygame的安装过程

    首先:确认自己安装有python(没有安装的同学可自行安装,这里我们不过多赘述)确认安装有python之后, win+r打开 cmd窗口,输入 python查看自己的python版…

    Python 2023年8月2日
    044
  • 视图view的初识

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一 步骤 创建django项目 创建django应用 配置文件–settings.py 注册…

    Python 2023年8月4日
    034
  • Python数据分析与展示

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年8月25日
    044
  • Python安装wxPython和ubuntu使用apt提示不能更新

    [空两格]昨天憨批室友搁我面前装b,说他会用pip安装Python包了,说是安装wxPython的时候通过换源解决了之前安装出错的问题。我一听,这事不对劲啊,是这个b直接看不懂输出…

    Python 2023年5月24日
    059
  • 机器学习案例(四):LSTM股价预测

    预测股市是机器学习在金融领域最重要的应用之一。在本文中,我将带你了解一个使用机器学习 Python 进行股票价格预测的数据科学项目。如果投资者能够准确预测市场走势,他就能得到很多股…

    Python 2023年9月28日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球