Python+OpenCV手势检测与识别Mediapipe基础篇

   2023-02-09 学习力0
核心提示:目录前言项目效果图认识Mediapipe项目环境代码核心代码视频帧率计算完整代码项目输出结语前言本篇文章适合刚入门OpenCV的同学们。文章将介绍如何使用Python利用OpenCV图像捕捉,配合强大的Mediapipe库来实现手势检测与识别;本系列后续还会继续更新Mediapipe

前言

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

项目效果图

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

Python+OpenCV手势检测与识别Mediapipe基础篇

认识Mediapipe

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

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

Mediapipe Dev:https://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)       #OpenCV摄像头调用:0=内置摄像头(笔记本)   1=USB摄像头-1  2=USB摄像头-2

while True:
    success, img = cap.read()
    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)       #cv2图像初始化
    cv2.imshow("HandsImage", img)       #CV2窗体
    cv2.waitKey(1)      #关闭窗体

mediapipe 手势识别与绘制

#定义并引用mediapipe中的hands模块
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)       #cv2图像初始化
    results = hands.process(imgRGB)
    # print(results.multi_hand_landmarks)
    
    if results.multi_hand_landmarks:
        for handLms in results.multi_hand_landmarks:
            for id, lm in enumerate(handLms.landmark):
                # print(id, lm)
                h, w, c = img.shape
                cx, cy = int(lm.x * w), int(lm.y * h)
                print(id, cx, cy)
                # if id == 4:
                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)       #FPS的字号,颜色等设置

完整代码

# Coding BIGBOSSyifi
# Datatime:2022/4/24 21:41
# Filename:HandsDetector.py
# Toolby: PyCharm

import cv2
import mediapipe as mp
import time

cap = cv2.VideoCapture(0)       #OpenCV摄像头调用:0=内置摄像头(笔记本)   1=USB摄像头-1  2=USB摄像头-2

#定义并引用mediapipe中的hands模块
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)       #cv2图像初始化
    results = hands.process(imgRGB)
    # print(results.multi_hand_landmarks)
    
    if results.multi_hand_landmarks:
        for handLms in results.multi_hand_landmarks:
            for id, lm in enumerate(handLms.landmark):
                # print(id, lm)
                h, w, c = img.shape
                cx, cy = int(lm.x * w), int(lm.y * h)
                print(id, cx, cy)
                # if id == 4:
                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)       #FPS的字号,颜色等设置

    cv2.imshow("HandsImage", img)       #CV2窗体
    cv2.waitKey(1)      #关闭窗体

项目输出

Python+OpenCV手势检测与识别Mediapipe基础篇

结语

以此篇文章技术为基础,后续会更新利用此篇基础技术实现的《手势控制:音量,鼠标

项目下载地址https://github.com/BIGBOSS-dedsec/HandsDetection_Python

原文地址:https://blog.csdn.net/weixin_50679163/article/details/124391674
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • matlab下mex 调用opencv库
    1. 首先写好待编译的.cpp文件,使用混合编程,以人脸检测为例#include "mex.h" // Required for the use of MEX files// Required for OpenCV #include "cv.h"static CvMemStorage* storage = 0;static CvHaarClassifierCascade* cascade = 0;/** This is a t
    02-09
  • C++ OpenCV红绿灯检测Demo实现详解
    C++ OpenCV红绿灯检测Demo实现详解
    目录原理代码实现打包程序为exe总结很久以来一直想实现红绿灯检测,今天它来了。原理OpenCV好强,能够提取红绿灯的轮廓,并根据颜色空间判断红绿,不依赖深度学习算法也能做到可用的效果/demo。红绿灯检测的基本步骤如下:轮廓检测、计数red、green和light_ou
  • 在Objective-C中使用OpenCV(含源码)
          申明:本博文内容来自于互联网,如因本文内容而发生的一切纠纷,均与本文章的翻译者无关。翻译质量因本人水平,有所限制。欢迎批评指正。本文章仅供参考、学习、交流之用,禁止用于任何商业用途。转载时请保留原文出处与保留本申明,多谢合作! 
    02-09
  • openCV-Python笔记之解读图像的读取、显示和保
    目录一、读入图像二、显示图像三、保存图像四、图片操作总结使用cv2.imread(),cv2.imshow(),cv2.imwrite()读取、显示和保存图像一、读入图像使用函数cv2.imread(filepath,flags)读入一副图片filepath:要读入图片的完整路径flags:读入图片的标志cv2.IMREAD
  • Python利用OpenCV和skimage实现图像边缘检测
    Python利用OpenCV和skimage实现图像边缘检测
    目录一、简介二、opencv 实践三、skimage 实践一、简介提取图片的边缘信息是底层数字图像处理的基本任务之一。边缘信息对进一步提取高层语义信息有很大的影响。大部分边缘检测算法都是上个世纪的了,OpenCV 的使用的算法是 Canny 边缘检测算法,大概是在 1986
  • Python基于OpenCV的视频图像处理详解
    Python基于OpenCV的视频图像处理详解
    目录初识OpenCV视频读写处理运动轨迹标记运动检测运动方向检测初识OpenCVOpenCV是一个开源的,跨平台的计算机视觉库,它采用优化的C/C++代码编写,能够充分利用多核处理器的优势,提供了Python,Ruby,MATPLOAB以及其他高级语言接口。OpenCV的设计目标是执行
  • C# OpenCV实现形状匹配的方法详解
    C# OpenCV实现形状匹配的方法详解
    1. 多角度模板匹配测试效果如下图:图1-1 图1-2图1-3正负角度均可正常识别,识别角度偏差1°2. 下面分享一下开发过程:a). ROI区域的生成,基于GDI+完成图形绘制,如图绘制模板设置区域,用来生成需要的模板特征。ROI区域绘制代码如下:/// summary/// 区域绘
  • 【CV】虹膜识别源代码下载,分别基于MATLAB、C+
    ###Date: 2018.3.28================================================================转载自:https://blog.csdn.net/ss910/article/details/738390351.Libor Masek的MATLAB虹膜识别论文和源代码下载,2003年http://www.peterkovesi.com/studentprojects/li
    02-08
  • opencv的resize和matlab的imresize函数的计算
    opencv的resize和matlab的imresize函数的计算
    在用c++代码复现matlab代码时,遇到两者resize函数的结果不相同的问题。opencv:resize(image1, reTmp, Size(50, 50), 0, 0, cv::INTER_LINEAR);matlab:tmp=imresize(img,[50 50],'bilinear','AntiAliasing',false);以一张500×396的彩色图片为例,resize到(50
    02-08
  • using Opencv Objective-C code
    In this post I'll use GLImageProcessing sample demo from Apple. Also you will need precompiled OpenCV for iPhone. How to make it read here.I've copied all OpenCV stuff to "opencv" folder into the GLImageProcessing. Here is project dire
    02-07
点击排行