基于Mediapipe+Opencv实现手势检测功能

目录
  • 一、前言
  • 二、环境配置
    • 软件:
    • 环境:
  • 三、全部源码
    • MediapipeHandTracking.py程序结构:
    • MediapipeHandTracking.py源码与注释
  • 四、环境配置
    • 1、在Anaconda3上新建环境Gesture
    • 2、激活Gesture环境并下载opencv-python包
    • 3、下载mediapipe包
    • 4、打开Pycharm完成环境导入项目
  • 五、运行程序:
  • 六、程序应用扩展
    • 1、手部的关键点的位置和次序我们全部已知的特点
    • 2、和其他AL结合
    • 3、全身检测源码

一、前言

基于Mediapipe+Opencv实现手势检测,想实现一下姿态识别的时候,感觉手势识别也蛮重要的就过来顺便实现一下。

下面是一些国内的pip源,有需要可自取

阿里云 http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣(douban) http://pypi.douban.com/simple/

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

二、环境配置

软件:

ANACONDA3+Pycharm2019

环境:

  • opencv-python>=4.5.5
  • mediapipe>=0.8.9.1

注:一定关掉科学上网

三、全部源码

比较短小且只有一个源文件MediapipeHandTracking.py我就直接在这里贴了

MediapipeHandTracking.py程序结构:

  • 第一步:保存mediapipe中的手势识别解决方案到mpHands,hands,mpDraw中
  • 第二步:参数设定
  • 第三步:循环读取视频流到img,img输入hands.hands函数得到结果,绘制结果到img并输出

MediapipeHandTracking.py源码与注释

import cv2
import mediapipe as mp
import time
#第一步:保存mediapipe中的手势识别解决方案到mpHands,hands,mpDraw中
mpHands = mp.solutions.hands #以下三个是mediapipe 中的API调用模板了
hands = mpHands.Hands(min_detection_confidence=0.5, min_tracking_confidence=0.5)#最小检测置信度,最小追踪置信度
mpDraw = mp.solutions.drawing_utils                              #获取mediapipe解决方案的绘画工具包
#第二步:参数设定
handLmsStyle = mpDraw.DrawingSpec(color=(0, 0, 255), thickness=3)#绘制手部关键点的颜色与粗细
handConStyle = mpDraw.DrawingSpec(color=(0, 255, 0), thickness=5)#绘制手部线条的颜色与粗细
pTime = 0 #和下面的cTime一起用于计算视频输入流FPS
cTime = 0
cap = cv2.VideoCapture(0) #打开编号为0的摄像头,这个一般是自带摄像头
#第三步:循环读取视频流到img,img输入hands.hands函数得到结果,绘制结果到img并输出
while True:
    ret, img = cap.read()       #从cap中读取图片到img,并将读取是否成功的结果保存在ret
    if ret:
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  #模型训练的时候是使用RGB训练,对于这个类型识别精度和速度比较高
        result = hands.process(imgRGB)                 #将RGB图片输入手部模型将结果保存在result
        # print(result.multi_hand_landmarks)           #打印result.multi_hand_landmarks内容,可以去掉试一下
        imgHeight = img.shape[0]       #获取摄像机图片的高
        imgWidth = img.shape[1]        #获取摄像机图片的宽
        if result.multi_hand_landmarks:#如果multi_hand_landmarks不为空进入循环
            for handLms in result.multi_hand_landmarks:  #遍历multi_hand_landmarks内每一个hand_landmark(手部关键点),相对于遍历图片中每一个手
                mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS, handLmsStyle, handConStyle) #调用mediapipe内绘画工具包绘画手部关键点
                for i, lm in enumerate(handLms.landmark):  #i保存第几个手部关键点,lm保存该点在图中的归一化值
                    xPos = int(lm.x * imgWidth) #第i个关键点x
                    yPos = int(lm.y * imgHeight)#第i个关键点y
                    cv2.putText(img, str(i), (xPos-25, yPos+5), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0, 0, 255), 2)#绘制关键点在,关键点左边靠下一点
                    if i == 8:#当画到第八个关键点时
                         cv2.circle(img, (xPos, yPos), 10, (166, 0, 0), cv2.FILLED)#画一个圆
                         #print(i, xPos, yPos)   #打印绘制这个点时候的坐标
        cTime = time.time()
        fps = 1/(cTime-pTime)
        pTime = cTime
        cv2.putText(img, f"FPS : {int(fps)}", (30, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3) #绘制FSP到图中
        cv2.imshow('img', img) #输出图片
    if cv2.waitKey(1) == ord('q'):#点击视频,输入q退出
        break

四、环境配置

1、在Anaconda3上新建环境Gesture

打开Anaconda Prompt,输入:

conda create -n Gesture python=3.8

2、激活Gesture环境并下载opencv-python包

激活环境:conda activate Gesture
下载opencv-python包:pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、下载mediapipe包

pip install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple/

4、打开Pycharm完成环境导入项目

配置代码运行环境

五、运行程序:

用Pycharm打开包含hanTracking.py程序的文件夹,并运行

运行结果

六、程序应用扩展

1、手部的关键点的位置和次序我们全部已知的特点

该功能可用于图片ROI提取截取出图片,然后进行其他一些图片操作。
该功能可用于手势响应事件。比如约定,食指和大拇指也就是4号和8号触碰时候触发某事件
,等等。
实现AL+操作

2、和其他AL结合

比如姿态检测AL,能将人识别成一个火柴人,开发空间有不少用处。

3、全身检测源码

import cv2
import time
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_holistic = mp.solutions.holistic
holistic = mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5)
handLmsStyle = mp_drawing.DrawingSpec(color=(0, 0, 255), thickness=0)#绘制手部关键点的颜色与粗细
handConStyle = mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=4)#绘制手部线条的颜色与粗细
cap = cv2.VideoCapture(0)
while True:
    ret,image=cap.read()
    if ret:
        image = cv2.flip(image, 1)
        image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
        results = holistic.process(image)
        if results.pose_landmarks:
            mp_drawing.draw_landmarks(image, results.face_landmarks, mp_holistic.FACEMESH_CONTOURS,handLmsStyle,handConStyle)
            mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
            mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
            mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS)
        cv2.imshow("img",image)
        if cv2.waitKey(1)==ord("q"):
            break
holistic.close()

运行效果如下:
晒晒我帅气的舍友

到此这篇关于基于Mediapipe+Opencv实现手势检测的文章就介绍到这了,更多相关Opencv手势检测内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python+mediapipe+opencv实现手部关键点检测功能(手势识别)

    目录 一.mediapipe是什么? 二.使用步骤 1.引入库 2.主代码 3.识别结果 补充: 一.mediapipe是什么? mediapipe官网 二.使用步骤 1.引入库 代码如下: import cv2 from mediapipe import solutions import time 2.主代码 代码如下: cap = cv2.VideoCapture(0) mpHands = solutions.hands hands = mpHands.Hands() mpDraw = so

  • OpenCV+MediaPipe实现手部关键点识别

    目录 可视化辅助函数 单张图片 摄像头检测 改变关键点数据特征 可视化辅助函数 在下面的代码的注释内有大致的操作 基本操作与前面的人脸检测的操作相似,增加了可视化的辅助函数 import matplotlib.pyplot as plt # 使用ipython的魔法方法,将绘制出的图像直接嵌入在notebook单元格中 import cv2 # 定义可视化图像函数 def look_img(img): '''opencv读入图像格式为BGR,matplotlib可视化格式为RGB,因此需将BGR

  • 基于Mediapipe+Opencv实现手势检测功能

    目录 一.前言 二.环境配置 软件: 环境: 三.全部源码 MediapipeHandTracking.py程序结构: MediapipeHandTracking.py源码与注释 四.环境配置 1.在Anaconda3上新建环境Gesture 2.激活Gesture环境并下载opencv-python包 3.下载mediapipe包 4.打开Pycharm完成环境导入项目 五.运行程序: 六.程序应用扩展 1.手部的关键点的位置和次序我们全部已知的特点 2.和其他AL结合 3.全身检测源码 一.

  • Python机器视觉之基于OpenCV的手势检测

    目录 1 简介 2 传统机器视觉的手势检测 2.1 轮廓检测法 2.2 算法结果 2.3 整体代码实现 3 深度学习方法做手势识别 3.1 经典的卷积神经网络 3.2 YOLO系列 3.3 SSD 3.4 实现步骤 3.5 关键代码 4 实现手势交互 1 简介 今天学长向大家介绍一个机器视觉项目 基于机器视觉opencv的手势检测 手势识别 算法 2 传统机器视觉的手势检测 普通机器视觉手势检测的基本流程如下: 其中轮廓的提取,多边形拟合曲线的求法,凸包集和凹陷集的求法都是采用opencv中自带

  • Python下应用opencv 实现人脸检测功能

    使用OpenCV's Haar cascades作为人脸检测,因为他做好了库,我们只管使用. 代码简单,除去注释,总共有效代码只有10多行. 所谓库就是一个检测人脸的xml 文件,可以网上查找,下面是一个地址: https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml 如何构造这个库,学习完本文后可以参考: http://note.sonots.com/Sc

  • 基于Python实现口罩佩戴检测功能

    目录 口罩佩戴检测 一 题目背景 1.1 实验介绍 1.2 实验要求 1.3 实验环境 1.4 实验思路 二 实验内容 2.1 已知文件与数据集 2.2 图片尺寸调整 2.3 制作训练时需要用到的批量数据集 2.4 调用MTCNN 2.5 加载预训练模型MobileNet 2.6 训练模型 2.6.1 加载和保存 2.6.2 手动调整学习率 2.6.3 早停法 2.6.4 乱序训练数据 2.6.5 训练模型 三 算法描述 3.1 MTCNN 3.2 MobileNet 四 求解结果 五 比较分析

  • OpenCV实现人脸检测功能

    本文实例为大家分享了OpenCV实现人脸检测功能的具体代码,供大家参考,具体内容如下 1.HAAR级联检测 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; #include <iostream> #include <cstdlib> using namespace std; int main(int artc, char** argv) { face_detect_h

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

    目录 前言 项目效果图 认识Mediapipe 项目环境 代码 核心代码 视频帧率计算 完整代码 项目输出 结语 前言 本篇文章适合刚入门OpenCV的同学们.文章将介绍如何使用Python利用OpenCV图像捕捉,配合强大的Mediapipe库来实现手势检测与识别:本系列后续还会继续更新Mediapipe手势的各种衍生项目,还请多多关注! 项目效果图 视频捕捉帧数稳定在(25-30) 认识Mediapipe 项目的实现,核心是强大的Mediapipe ,它是google的一个开源项目: 功能

  • Python基于OpenCV实现人脸检测并保存

    本文实例为大家分享了Python基于OpenCV实现人脸检测,并保存的具体代码,供大家参考,具体内容如下 安装opencv 如果安装了pip的话,Opencv的在windows的安装可以直接通过cmd命令pip install opencv-python(只需要主要模块),也可以输入命令pip install opencv-contrib-python(如果需要main模块和contrib模块) 详情可以点击此处 导入opencv import cv2 所有包都包含haarcascade文件.这

  • Android开发之手势检测及通过手势实现翻页功能的方法

    本文实例讲述了Android开发之手势检测及通过手势实现翻页功能的方法.分享给大家供大家参考,具体如下: 手势是指用户手指或触摸笔在触摸屏上的连续触碰的行为,比如在屏幕上从左至右划出的一个动作,就是手势,再比如在屏幕上画出一个圆圈也是手势.手势这种连续的触碰会形成某个方向上的移动趋势,也会形成一个不规则的几何图形.Android对两种手势行为都提供了支持: 1. 对于第一种手势行为而言,Android提供了手势检测,并为手势检测提供了相应的监听器. 2. 对于第二种手势行为,Android允许开

  • 基于openCV实现人脸检测

    openCV的人脸识别主要通过Haar分类器实现,当然,这是在已有训练数据的基础上.openCV安装在 opencv/opencv/sources/data/haarcascades_cuda(或haarcascades)中存在预先训练好的物体检测器(xml格式),包括正脸.侧脸.眼睛.微笑.上半身.下半身.全身等. openCV的的Haar分类器是一个监督分类器,首先对图像进行直方图均衡化并归一化到同样大小,然后标记里面是否包含要监测的物体.它首先由Paul Viola和Michael Jon

随机推荐