mediapipe教程1:python代码

2023-11-14

一、背景

因为领导想用这个东西,因此开始研究,首先对于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.")
        continue
    image1 = 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'):
        break

holistic.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.")
        continue
    image1 = 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'):
        break

pose_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.")
        continue
    image1 = 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'):
        break

hands_mode.close()
cv2.destroyAllWindows()
cap.release()

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mediapipe教程1:python代码 的相关文章

随机推荐

  • this指针

    this定义 this 是 C 中的一个关键字 也是一个 const 指针 它指向当前对象 通过它可以访问当前对象的所有成员 例如 void Student setname char name this gt name name void
  • 什么是paxos算法

    从前有个村 老村长退休了 需要选一个新的村长 现有俩地痞 张三 和 李四 都想当村长 想当村长 至少需要获得一半以上长老的投票 如今这一届村委会有老李 老孙 老王 三位长老担任 第一天 张三依次拜访老李 老孙 老王三位长老 与他们说 选我一
  • UML类图中类与类之间的关系

    前言 在软件系统中 类不是孤立存在的 类与类之间存在相互关系 因此 需要通过 UML 来描述这些类之间的关系 类之间具有如下几种关系 关联关系 依赖关系 泛化关系 接口与实现关系 关联关系 含义 通常将一个类的对象作为另一个类的属性 表示
  • python matlibplot时如何不显示图片只保存图片

    1 查看网上的博客好像没得到需要的结果 于是查看官方文档 既然跟show有关 我就先查询 plt show 2 在see also中查看到了ioff可以禁用交互模式 而交互模式就是在创建图时就显示出图片 禁用了之后就可以只保存而不显示了 具
  • LVS + DR + Keepalived 高可用群集构建

    文章目录 一 Keepalived 概述 1 为什么需要 keepalived 2 keepalived 是什么 3 keepalived 服务重要功能 4 keepalived 高可用故障切换转移原理 5 keepalived 体系主要模
  • 关于执行上下文的学习总结

    学习总结自 https juejin cn post 6844904145372053511 heading 1 执行上下文 Execution Context 全局执行上下文 函数执行上下文 eval执行上下文 每个执行上下文会创建 词法
  • stem函数的简单应用-matlab

    stem x 去除火柴头 仅举例常用的几个函数 其他的可参考stem 还有 stem Y 将数据序列 Y 绘制为从沿 x 轴的基线延伸的针状图 各个数据值由终止每个针状图的圆指示 如果 Y 是向量 x 轴的刻度范围是从 1 至 length
  • AI浅谈

    前言 近年来 随着 Google 的 AlphaGo 打败韩国围棋棋手李世乭之后 机器学习尤其是深度学习的热潮席卷了整个IT界 所有的互联网公司 尤其是 Google 微软 百度 腾讯等巨头 无不在布局人工智能技术和市场 百度 腾讯 阿里巴
  • 1001. 害死⼈不偿命的(3n+1)猜想(15分)

    害死 不偿命的 3n 1 猜想 15分 卡拉兹 Callatz 猜想 对任何 个 然数n 如果它是偶数 那么把它砍掉 半 如果它是奇数 那么把 3n 1 砍掉 半 这 样 直反复砍下去 最后 定在某 步得到n 1 卡拉兹在1950年的世界数
  • 【数据结构】Map 映射

    数据结构源码 接口 public interface Map
  • shell 判断某个url是否能够访问

    urlstatus curl s m 5 IL serverurl grep 200 if urlstatus then echo urlstatus is OFF fi ping也可以判断 但是要判断返回值 比较麻烦 curl下载 然后判
  • LLVM 安装(Ubuntu)

    安装命令 sudo apt get install llvm sudo apt get install clang 验证安装 llvm as version clang version 安装成功 其他安装方法 LLVM Ubuntu安装 预
  • 结构体的基础知识

    1 结构体存储原则 原则一 结构体中元素是按照定义顺序一个一个放到内存中去的 但并不是紧密排列的 从结构体存储的首地址开始 每一个元素放置到内存中时 它都会认为内存是以它自己的大小来划分的 因此元素放置的位置一定会在自己宽度的整数倍上开始
  • 开放封闭原则的理解与具体实现 C#Unity

    目录 前言与文章介绍 一 概念阐释 1 什么是开放封闭 2 开放封闭原则怎么实现 2 1 基本思路 2 2 具体方法 二 运用原则的实例说明 实现解释 实例总结 三 相关链接 前言与文章介绍 文章将先阐释开放封闭原则 然后将理论运用于实践
  • 单片机I/O口输入输出阻抗

    目录 1 阻抗定义 2 输入阻抗 3 输出阻抗 1 阻抗定义 在具有电阻 电感 电容的电路里 对交流电所起的阻碍作用叫阻抗 用Z表示 阻抗由电阻 容抗 感抗三者组成 但不是简单三者相加 单位为欧 解决单片机端口问题时 可以将阻抗简单看成电阻
  • Vue系列第五篇:Vue2(Element UI) + Go(gin框架) + nginx开发登录页面及其校验登录功能

    本篇使用Vue2开发前端 Go语言开发服务端 使用nginx代理部署实现登录页面及其校验功能 目录 1 部署结构 2 Vue2前端 2 1代码结构 2 1源码 3 Go后台服务 3 2代码结构 3 2 源码 3 3单测效果 4 nginx
  • 如何給html5的video的src地址不以明文方式顯示,以防止下載

    chrome chrome的video標籤支持src redirect
  • ubunut 远程备份整个系统到其他磁盘中

    ssh src ip sudo S dd if dev mmcblk0 dd of img status progress 压缩镜像
  • ESP8266恒温控制器

    本文 我们将使用ESP8266构建家用恒温器 温控器将具有以下功能 它将从DHT22温度传感器读取温度 它将温度与所需温度进行比较 如果高于它 它将触发继电器关闭 如果低于它 它将触发继电器打开 在此之前 首先了解下ESP8266如何保持温
  • mediapipe教程1:python代码

    一 背景 因为领导想用这个东西 因此开始研究 首先对于mediapipe的介绍不多说 百度一大堆 主要是 1 跨平台 2 对于移动设备友好 实时性足够 二 环境 因为对这东西不了解 这里先用python代码简单的看看效果 代码的参考网址 1