一、背景

因为领导想用这个东西,因此开始研究,首先对于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代码相关推荐

  1. NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现)、案例应用之详细攻略

    NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现).案例应用之详细攻略 导读:2023年1月30日版本更新,以下是最新消 ...

  2. python菜鸟教程h-python菜鸟教程,python好玩又简单的代码

    如果是零基础的话推荐你看以下几本书,入门来说都还不错:"笨办法"学Python(第3版)HeadFirstPython(中文版)父与子的编程之旅:与小卡特一起学Python pyt ...

  3. 教程 | 理解和实现自然语言处理终极指南(附Python代码)

     教程 | 理解和实现自然语言处理终极指南(附Python代码) 时间 2017-02-16 14:41:39 机器之心 原文  http://www.jiqizhixin.com/article ...

  4. python有趣的代码-python菜鸟教程,python好玩又简单的代码

    如果是零基础的话推荐你看以下几本书,入门来说都还不错:"笨办法"学Python(第3版)HeadFirstPython(中文版)父与子的编程之旅:与小卡特一起学Python pyt ...

  5. Glcm 灰度共生矩阵,保姆级别教程,获取图片的Glcm和基于Glcm的纹理特征,附讲解思路,python代码的实现

    保姆级别教程,获取图片的Glcm和基于Glcm的纹理特征,附讲解思路,python代码的实现 网络上Glcm的原理很多,但是实现的python代码我确实没找到,讲的也不是很清楚 此文介绍了如何在一张图 ...

  6. 100行python代码实现五子棋-教程

    五子棋是是一种两人对弈的纯策略型棋类游戏. 五子棋有两种玩法.玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.玩法二:自己形成五子连线就替换对方任意一枚棋子.被 ...

  7. python换脸教程_教你如何用200行Python代码“换脸”教程

    原标题:教你如何用200行Python代码"换脸"教程 本文将介绍如何编写一个只有200行的Python脚本,为两张肖像照上人物的"换脸". 这个过程可分为四步 ...

  8. Python爬虫之XPath基础教程:用代码抓取网页数据

    Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...

  9. python代码入门教程_Python入门教程丨1300多行代码,让你轻松掌握基础知识点

    欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 本文适合有经验的程序员尽快进入Python世界.特别地 ...

最新文章

  1. GIT之旅【第一篇】
  2. redmine 插件开发非官方指南
  3. 查看mysql是否启动_Mysql查看是否使用到索引
  4. php5.4dev版本是,ubuntu 编译安装php5.4以上版本
  5. mysql百万级分页优化
  6. oracle如何检查是否rac,Oracle RAC 状态检查
  7. JavaScript中__proto__与prototype的关系
  8. Ubuntu20.04搭建ftp服务(亲测通过)
  9. c语言 rgb颜色渐变_这种渐变噪点的质感,咋做的?
  10. C+++之insert()
  11. windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
  12. springboot maven父项目脚手架
  13. java处理json_Java处理JSon方法
  14. 【Keil】分享Keil5修改为黑色炫酷主题的一种方法
  15. Proteus里设置任意电源值的POWER的实现
  16. 基于Spring的MVC框架设计与实现
  17. IPV6IPV4网址
  18. 【NLP】使用递归神经网络对序列数据进行建模 (Pytorch)
  19. 在 Go 中处理恐慌
  20. python数据获取及预处理_Python小练习——电影数据集TMDB预处理

热门文章

  1. 数据分享|中国各省、各市、各区县分年、分月、逐日平均气温数据(2000年~2019年)
  2. 不思议迷宫c语言基础,不思议迷宫新手谜题汇总
  3. 2021百度之星初赛二(1001 -- 1003)
  4. FTP传输一定要注意使用二进制模式
  5. 商业级web阅读器项目(上)
  6. Deepson在Jetson Nano上进行视频分析的入门
  7. 【Python + Zotero】近乎全自动的完美 bib 文件生成
  8. 枚举 暴力枚举 穷举 实例
  9. 【C语言】中文符号(句号,问号,感叹号)作为标识符进行分行处理
  10. 概率论,加法原理,乘法原理,古典概型