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

  • 前言
    • 项目效果图
  • 认识Mediapipe
  • 项目环境
  • 代码
    • 核心代码
      • 视频帧率计算
    • 完整代码
      • 项目输出
  • 结语

前言

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

项目效果图

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

认识Mediapipe

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

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

Mediapipe Dev

以上是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


实测也支持Python3.8-3.9

代码

核心代码

OpenCV摄像头捕捉部分

import cv2cap = cv2.VideoCapture(0)       #OpenCV摄像头调用:0=内置摄像头(笔记本)   1=USB摄像头-1  2=USB摄像头-2while 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_utilswhile 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.shapecx, 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 = 0while True
cTime = time.time()fps = 1 / (cTime - pTime)pTime = cTimecv2.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: PyCharmimport cv2
import mediapipe as mp
import timecap = 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 = 0while 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.shapecx, 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 = cTimecv2.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)      #关闭窗体

项目输出

结语

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

Python+OpenCV手势识别Mediapipe(基础篇)相关推荐

  1. [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

    一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...

  2. [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

    一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...

  3. python进阶记录之基础篇二十六_Python进阶记录之基础篇(十六)

    回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,需要重点掌握类的创建和对象的使用.今天我们继续讲一下Python中面向对象的相关知识点 ...

  4. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  5. [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

    一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  6. [python opencv 计算机视觉零基础到实战] 六、图像运算

    一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...

  7. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  8. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

    一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...

  9. 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取

    一.学习目标 了解图片的结构属性 了解如何捕获视频 了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  10. [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

    前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...

最新文章

  1. Python 工程管理及 virtualenv 的迁移
  2. Ubuntu与CentOS的区别
  3. 微信小程序scroll-view去除滚动条 (安卓、ios都有效)
  4. English Learning from research paper
  5. 使用 typescript ,提升 vue 项目的开发体验(2)
  6. linux中配置vsftpd
  7. LaTeX 消除字体错误 Size substitutions with differences (Font) up to 0.41063pt have occurred.
  8. Delphi7·ProgressBar控件
  9. 内蒙古自治区及其盟市行政单位中英文名称对照表
  10. 新型单词记忆法汇总(沪江英语):
  11. linux wifi音箱,基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(一)
  12. 【示波器专题】示波器探头的原理深入——有源探头之电流探头
  13. html 外联 变 内联,Html 内联元素、外联元素 和 可变元素
  14. java:打印1—100的数中有7和7的倍数
  15. Win10有哪些版本?有什么区别?如何选择Win10版本
  16. 瑞幸咖啡砸10亿教育市场,会成为下一个“小黄车”吗?
  17. Chrome 扩展是什么?我们如何建造它?
  18. 小米air2se耳机只有一边有声音怎么办_双十一高性价蓝牙耳机排名,500元内真无线蓝牙耳机推荐...
  19. 二进制转化成ascll_微机原理实验-二进制到ASCII码转换
  20. 【力扣】695岛屿的最大面积

热门文章

  1. jQuery官网下载文档的步骤
  2. Apache配置---域名跳转
  3. 解决萤石云sdk语音对讲功能(实现)
  4. 使用计算机制作数字文本结构 可以,使用计算机制作的数字文本结构,可以分为线性结构与非线性结构,简单文本呈现为一种结构,写作和阅读均按顺序进行。(1.0分)...
  5. 浅谈Google三篇大数据论文
  6. 帝国cms网站管理系统之安全设置最优化分享
  7. SAP LSMW 创建及使用过程
  8. 外星人笔记本计算机在哪里,笔记本电脑没声音,教您外星人笔记本没声音如何解决...
  9. matlab画柱状图函数,series函数做柱状图
  10. linux安装vsftpd