Python+OpenCV手势识别Mediapipe(基础篇)
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(基础篇)相关推荐
- [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容
一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...
- [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃
一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...
- python进阶记录之基础篇二十六_Python进阶记录之基础篇(十六)
回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,需要重点掌握类的创建和对象的使用.今天我们继续讲一下Python中面向对象的相关知识点 ...
- [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充
一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...
- [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用
一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...
- [python opencv 计算机视觉零基础到实战] 六、图像运算
一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...
- [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...
- [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑
一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...
- 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取
一.学习目标 了解图片的结构属性 了解如何捕获视频 了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...
- [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld
前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...
最新文章
- Python 工程管理及 virtualenv 的迁移
- Ubuntu与CentOS的区别
- 微信小程序scroll-view去除滚动条 (安卓、ios都有效)
- English Learning from research paper
- 使用 typescript ,提升 vue 项目的开发体验(2)
- linux中配置vsftpd
- LaTeX 消除字体错误 Size substitutions with differences (Font)	up to 0.41063pt have occurred.
- Delphi7·ProgressBar控件
- 内蒙古自治区及其盟市行政单位中英文名称对照表
- 新型单词记忆法汇总(沪江英语):
- linux wifi音箱,基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(一)
- 【示波器专题】示波器探头的原理深入——有源探头之电流探头
- html 外联 变 内联,Html 内联元素、外联元素 和 可变元素
- java:打印1—100的数中有7和7的倍数
- Win10有哪些版本?有什么区别?如何选择Win10版本
- 瑞幸咖啡砸10亿教育市场,会成为下一个“小黄车”吗?
- Chrome 扩展是什么?我们如何建造它?
- 小米air2se耳机只有一边有声音怎么办_双十一高性价蓝牙耳机排名,500元内真无线蓝牙耳机推荐...
- 二进制转化成ascll_微机原理实验-二进制到ASCII码转换
- 【力扣】695岛屿的最大面积
热门文章
- jQuery官网下载文档的步骤
- Apache配置---域名跳转
- 解决萤石云sdk语音对讲功能(实现)
- 使用计算机制作数字文本结构 可以,使用计算机制作的数字文本结构,可以分为线性结构与非线性结构,简单文本呈现为一种结构,写作和阅读均按顺序进行。(1.0分)...
- 浅谈Google三篇大数据论文
- 帝国cms网站管理系统之安全设置最优化分享
- SAP LSMW 创建及使用过程
- 外星人笔记本计算机在哪里,笔记本电脑没声音,教您外星人笔记本没声音如何解决...
- matlab画柱状图函数,series函数做柱状图
- linux安装vsftpd