mediapipe教程1:python代码
一、背景
因为领导想用这个东西,因此开始研究,首先对于mediapipe的介绍不多说,百度一大堆,
主要是(1)跨平台,(2)对于移动设备友好,实时性足够
二、环境
因为对这东西不了解,这里先用python代码简单的看看效果,代码的参考网址:
(1)https://blog.csdn.net/javastart/article/details/116423090
(2)https://google.github.io/mediapipe/solutions/holistic
例子中只用到了cv2和mediapipe两个库,对于库安装下载不下来的可以考虑换源,参考:https://blog.csdn.net/afeiqiang/article/details/108257584
三、代码(没啥好说的,直接上代码,看代码即可)
(1)全身检测(图片)
import cv2
import mediapipe as mp#mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils#参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 2, 2)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 2, 2)#mp.solutions.holistic是一个类别,是人的整体
mp_holistic = mp.solutions.holistic#参数:1、是否检测静态图片,2、姿态模型的复杂度,3、结果看起来平滑(用于video有效),4、检测阈值,5、跟踪阈值
holistic = mp_holistic.Holistic(static_image_mode=True)file = 'input.jpg'
image = cv2.imread(file)
image_hight, image_width, _ = image.shape
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)#处理RGB图像
results = holistic.process(image1)#某一个点的坐标
if results.pose_landmarks:print(f'Nose coordinates: ('f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE].x * image_width}, 'f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE].y * image_hight})')'''
mp_holistic.PoseLandmark类中共33个人体骨骼点
mp_holistic.HandLandmark类中共21个手部关键点
脸部有468个关键点
'''#绘制
mp_drawing.draw_landmarks(image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)
mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)
mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)
mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)#cv2.imshow('image',image)
#cv2.waitKey(0)
cv2.imwrite('image-holistic.jpg', image)
holistic.close()
(2)全身检测(视频)
import cv2
import mediapipe as mp#mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils#参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 1 , 1)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 1, 1)#mp.solutions.holistic是一个类别,是人的整体
mp_holistic = mp.solutions.holistic#参数:1、是否检测静态图片,2、姿态模型的复杂度,3、结果看起来平滑(用于video有效),4、检测阈值,5、跟踪阈值
holistic = mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5)cap = cv2.VideoCapture('input.mp4')
while cap.isOpened():success, image = cap.read()if not success:print("Ignoring empty camera frame.")continueimage1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 处理RGB图像results = holistic.process(image1)'''mp_holistic.PoseLandmark类中共33个人体骨骼点mp_holistic.HandLandmark类中共21个手部关键点脸部有468个关键点'''# 绘制mp_drawing.draw_landmarks(image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)cv2.imshow('MediaPipe Holistic', image)if cv2.waitKey(1) & 0xFF == ord('q'):breakholistic.close()
cv2.destroyAllWindows()
cap.release()
(3)人体骨架检测(图片)
import cv2
import mediapipe as mp#mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils#参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 2, 2)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 2, 2)#mp.solutions.pose,是人的骨架
mp_pose = mp.solutions.pose#参数:1、是否检测静态图片,2、姿态模型的复杂度,3、结果看起来平滑(用于video有效),4、检测阈值,5、跟踪阈值
pose_mode = mp_pose.Pose(static_image_mode=True)file = 'input.jpg'
image = cv2.imread(file)
image_hight, image_width, _ = image.shape
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 处理RGB图像
results = pose_mode.process(image1)'''
mp_pose.PoseLandmark类中共33个人体骨骼点
'''
if results.pose_landmarks:print(f'Nose coordinates: ('f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].x * image_width}, 'f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].y * image_hight})')#绘制
mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)#cv2.imshow('image',image)
#cv2.waitKey(0)
cv2.imwrite('image-pose.jpg', image)
pose_mode.close()
(4)人体骨架检测(视频)
import cv2
import mediapipe as mp#mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils#参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 1 , 1)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 1, 1)#mp.solutions.pose,是人的骨架
mp_pose = mp.solutions.pose#参数:1、是否检测静态图片,2、姿态模型的复杂度,3、结果看起来平滑(用于video有效),4、检测阈值,5、跟踪阈值
pose_mode = mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)cap = cv2.VideoCapture('input.mp4')
while cap.isOpened():success, image = cap.read()if not success:print("Ignoring empty camera frame.")continueimage1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 处理RGB图像results = pose_mode.process(image1)'''mp_holistic.PoseLandmark类中共33个人体骨骼点'''# 绘制mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)cv2.imshow('MediaPipe Pose', image)if cv2.waitKey(1) & 0xFF == ord('q'):breakpose_mode.close()
cv2.destroyAllWindows()
cap.release()
(5)手部关键点检测(图片)
import cv2
import mediapipe as mp#mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils#参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 2, 2)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 2, 2)#mp.solutions.hands,是人的手
mp_hands = mp.solutions.hands#参数:1、是否检测静态图片,2、手的数量,3、检测阈值,4、跟踪阈值
hands_mode = mp_hands.Hands(static_image_mode=True, max_num_hands=2)file = 'input.jpg'
image = cv2.imread(file)
image_hight, image_width, _ = image.shape
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)#处理RGB图像
results = hands_mode.process(image1)print('Handedness:', results.multi_handedness)
for hand_landmarks in results.multi_hand_landmarks:print('hand_landmarks:', hand_landmarks)print(f'Index finger tip coordinates: (',f'{hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].x * image_width}, 'f'{hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].y * image_hight})')mp_drawing.draw_landmarks(image, hand_landmarks, mp_hands.HAND_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)#cv2.imshow('image',image)
#cv2.waitKey(0)
cv2.imwrite('image-hands.jpg', image)
hands_mode.close()
(6)手部关键点检测(视频)
import cv2
import mediapipe as mp#mp.solutions.drawing_utils用于绘制
mp_drawing = mp.solutions.drawing_utils#参数:1、颜色,2、线条粗细,3、点的半径
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 1 , 1)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 1, 1)#mp.solutions.hands,是人的手
mp_hands = mp.solutions.hands#参数:1、是否检测静态图片,2、手的数量,3、检测阈值,4、跟踪阈值
hands_mode = mp_hands.Hands(max_num_hands=2)cap = cv2.VideoCapture('input.mp4')
while cap.isOpened():success, image = cap.read()if not success:print("Ignoring empty camera frame.")continueimage1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 处理RGB图像results = hands_mode.process(image1)# 绘制if results.multi_hand_landmarks:for hand_landmarks in results.multi_hand_landmarks:mp_drawing.draw_landmarks(image, hand_landmarks, mp_hands.HAND_CONNECTIONS, DrawingSpec_point, DrawingSpec_line)cv2.imshow('MediaPipe Hands', image)if cv2.waitKey(1) & 0xFF == ord('q'):breakhands_mode.close()
cv2.destroyAllWindows()
cap.release()
mediapipe教程1:python代码相关推荐
- NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现)、案例应用之详细攻略
NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现).案例应用之详细攻略 导读:2023年1月30日版本更新,以下是最新消 ...
- python菜鸟教程h-python菜鸟教程,python好玩又简单的代码
如果是零基础的话推荐你看以下几本书,入门来说都还不错:"笨办法"学Python(第3版)HeadFirstPython(中文版)父与子的编程之旅:与小卡特一起学Python pyt ...
- 教程 | 理解和实现自然语言处理终极指南(附Python代码)
教程 | 理解和实现自然语言处理终极指南(附Python代码) 时间 2017-02-16 14:41:39 机器之心 原文 http://www.jiqizhixin.com/article ...
- python有趣的代码-python菜鸟教程,python好玩又简单的代码
如果是零基础的话推荐你看以下几本书,入门来说都还不错:"笨办法"学Python(第3版)HeadFirstPython(中文版)父与子的编程之旅:与小卡特一起学Python pyt ...
- Glcm 灰度共生矩阵,保姆级别教程,获取图片的Glcm和基于Glcm的纹理特征,附讲解思路,python代码的实现
保姆级别教程,获取图片的Glcm和基于Glcm的纹理特征,附讲解思路,python代码的实现 网络上Glcm的原理很多,但是实现的python代码我确实没找到,讲的也不是很清楚 此文介绍了如何在一张图 ...
- 100行python代码实现五子棋-教程
五子棋是是一种两人对弈的纯策略型棋类游戏. 五子棋有两种玩法.玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.玩法二:自己形成五子连线就替换对方任意一枚棋子.被 ...
- python换脸教程_教你如何用200行Python代码“换脸”教程
原标题:教你如何用200行Python代码"换脸"教程 本文将介绍如何编写一个只有200行的Python脚本,为两张肖像照上人物的"换脸". 这个过程可分为四步 ...
- Python爬虫之XPath基础教程:用代码抓取网页数据
Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...
- python代码入门教程_Python入门教程丨1300多行代码,让你轻松掌握基础知识点
欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 本文适合有经验的程序员尽快进入Python世界.特别地 ...
最新文章
- GIT之旅【第一篇】
- redmine 插件开发非官方指南
- 查看mysql是否启动_Mysql查看是否使用到索引
- php5.4dev版本是,ubuntu 编译安装php5.4以上版本
- mysql百万级分页优化
- oracle如何检查是否rac,Oracle RAC 状态检查
- JavaScript中__proto__与prototype的关系
- Ubuntu20.04搭建ftp服务(亲测通过)
- c语言 rgb颜色渐变_这种渐变噪点的质感,咋做的?
- C+++之insert()
- windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
- springboot maven父项目脚手架
- java处理json_Java处理JSon方法
- 【Keil】分享Keil5修改为黑色炫酷主题的一种方法
- Proteus里设置任意电源值的POWER的实现
- 基于Spring的MVC框架设计与实现
- IPV6IPV4网址
- 【NLP】使用递归神经网络对序列数据进行建模 (Pytorch)
- 在 Go 中处理恐慌
- python数据获取及预处理_Python小练习——电影数据集TMDB预处理