Mediapipe+VSCode+Anaconda 实时检测手部关键点并保存视频

本文介绍了如何在Windows11系统中利用Anaconda3创建虚拟环境,安装VSCode和MediaPipe库,然后配置环境并编写Python代码进行实时手部关键点检测。通过步骤演示了从环境配置到程序运行的全过程,展示了MediaPipe在设备端机器学习推理的能力。

提示:本文仅为个人学习的记录

文章目录

前言

一、环境配置

1.Anaconda3安装

2.VSCode安装 

3.Anaconda配置虚拟环境

 4.mediapipe安装

 二、实时检测手部关键点

1.打开VSCode,新建python文件。

2.python解释器选择

3.直接运行代码即可,运行结果。

总结


前言

  MediaPipe: Google Research开源的跨平台多媒体机器学习模型应用框架作为一款跨平台框架,MediaPipe不仅可以被部署在服务器端,更可以在多个移动端(安卓和苹果iOS)和嵌入式平台(Google Coral和树莓派)中作为设备端机器学习推理(On-device MachineLearning lnference)框架。


一、环境配置

    我的环境是win11+anaconda3-2022.10+VSCode+mediapipe 0.9.0.1

1.Anaconda3安装

  (1)首先前往 Anaconda 官网:Anaconda,下载安装文件:Anaconda3-2022.10-Windows-x86_64.exe(记住保存的位置)

 (2)我的安装过程:Next--> I Agree --> All Users-->自定义安装路径-->选择添加环境变量-->Install即可安装完成。(我根据这个过程是没有任何报错的,但是有朋友反馈出错,可以参考自己添加环境变量

 

  (3)检查安装是否成功:win+r,输入cmd回车。输入conda --version,查看当前安装版本。如何输入python,返回版本信息即为安装成功。

2.VSCode安装 

  (1)去官网下载Download Visual Studio Code - Mac, Linux, Windows

   (2)VSCode我之前就安装好了,没有保存安装记录,请参考VSCode安装教程(超详细)_牛哄哄的柯南的博客-CSDN博客_vscode安装教程

3.Anaconda配置虚拟环境

  (1)打开anaconda prompt后,输入如下代码搭建基于python3.7的环境mediapipe(可自定义)。中间会出现([y]/[n]?)键入y或回车,等待安装完毕即可。

conda create -n your_env_name python=x.x

   (2)配置完mediapipe虚拟环境后,输入以下代码激活虚拟环境。

conda activate mediapipe

  (3)输入python,查看python=3.7配置是否成功。

 4.mediapipe安装

  (1)关闭anaconda prompt重新进入mediapipe环境,输入以下代码后回车开始安装。中间会出现([y]/[n]?)键入y或回车即可,等待安装完毕。

pip install mediapipe 
或
pip install mediapipe -i https://pypi.douban.com/simple

   出现以下界面即为安装成功。

 (2)在虚拟环境安装OpenCV

pip install opencv-python

pip install opencv-contrib-python(根据自己的需求,选择性安装)

   输入一些代码并查看返回信息是否正确,即检查是否安装成功。

 二、实时检测手部关键点并保存视频

1.打开VSCode,新建python文件。

代码如下(示例):

import sys
import cv2
import mediapipe as mp

mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands

#打开本地摄像头,实时检测,可自行更换为加载本地视频
cap = cv2.VideoCapture(0)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  #获取视频的宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  #获取视频的高度
fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
writer = cv2.VideoWriter("D:\\mediapipe\\video_result.mp4v", fourcc, fps, (width, height))

with mp_hands.Hands(
        min_detection_confidence=0.9,
        min_tracking_confidence=0.9) as hands:
    while cap.isOpened():
        success, image = cap.read()
        if not success:
            print("Ignoring empty camera frame.")
            continue


        image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
        image.flags.writeable = False
        results = hands.process(image)

        # 在图像上绘制手部注释
        image.flags.writeable = True
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
        if results.multi_hand_landmarks:
            for hand_landmarks in results.multi_hand_landmarks:
                mp_drawing.draw_landmarks(
                    image, hand_landmarks, mp_hands.HAND_CONNECTIONS)
        cv2.imshow('MediaPipe Hands', image)
        key = cv2.waitKey(24)
        writer.write(image)  #视频保存
        # 按Q退出
        if cv2.waitKey(1) == ord("Q"):
            break
cap.release()

2.python解释器选择

3.直接运行代码即可,运行结果。


总结

  以上就是mediapipe的学习记录,本文仅仅简单介绍了mediapipe的使用,而mediapipe能够解决许多视觉任务大家可自行探索。

### MediaPipe 手部关键点坐标获取与使用教程 MediaPipe 是由 Google Research 开源的一款强大的多媒体处理框架,能够用于多种计算机视觉任务,其中包括手部关键点检测。以下是关于如何利用 MediaPipe 获取手部关键点坐标的详细说明。 #### 1. 初始化 Hand 模型 为了使用 MediaPipe手部关键点检测功能,首先需要导入必要的模块初始化 `Hands` 类实例: ```python import cv2 import mediapipe as mp mp_hands = mp.solutions.hands hands = mp_hands.Hands( static_image_mode=False, # 是否为静态图像模式 max_num_hands=2, # 最大检测的手数 min_detection_confidence=0.7, # 检测置信度阈值 min_tracking_confidence=0.5 # 跟踪置信度阈值 ) ``` 以上代码片段定义了一个 `Hands` 对象,该对象可以通过指定参数调整性能和行为[^3]。 --- #### 2. 处理输入图像 在实际应用中,通常会读取摄像头流或者加载一张图片作为输入数据。以下是一个简单的例子,演示如何将 BGR 图像转换为 RGB 传递给模型进行处理: ```python cap = cv2.VideoCapture(0) # 使用默认摄像头捕获视频流 while cap.isOpened(): success, frame = cap.read() if not success: break # 将 BGR 图像转为 RGB rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 使用 Hands 模型处理当前帧 results = hands.process(rgb_frame) if results.multi_hand_landmarks: for handLms in results.multi_hand_landmarks: for id, landmark in enumerate(handLms.landmark): height, width, _ = frame.shape # 计算像素级坐标位置 cx, cy = int(landmark.x * width), int(landmark.y * height) print(f"Landmark {id}: ({cx}, {cy})") # 可视化绘制关键点及其连接线 mp_drawing = mp.solutions.drawing_utils mp_drawing.draw_landmarks( frame, handLms, mp_hands.HAND_CONNECTIONS ) # 显示结果画面 cv2.imshow('Hand Landmarks', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 此脚本实现了从摄像头捕捉实时视频流,提取每只手上 21 个关键点的三维坐标(x, y, z),其中 x 和 y 表示相对于图像宽度和高度的比例值,z 则表示相对深度信息[^4]。 --- #### 3. 解析关键点数据结构 当调用手部检测 API 后返回的结果对象包含多个属性,其中最重要的部分是 `multi_hand_landmarks` 属性。它存储了一组 `NormalizedLandmarkList` 数据类型,代表每一双手上的所有关节位置。 每个关键点都具有三个维度的信息: - **X**: 归一化的水平方向比例值,在范围 `[0, 1]` 中。 - **Y**: 归一化的垂直方向比例值,在范围 `[0, 1]` 中。 - **Z**: 相对于手腕中心的距离,单位未标准化,需进一步计算得出具体物理距离。 通过遍历这些地标列表即可轻松访问任意手指尖端或其他特定部位的位置[^1]。 --- #### 4. 应用场景扩展 除了基本的关键点定位外,还可以基于这些数据开发更多高级功能,比如手势分类、动作追踪等。例如,可以测量两指之间的夹角来判断是否形成某种特殊形状;也可以跟踪一段时间内的轨迹变化以分析动态行为特征[^2]。 --- ### 总结 综上所述,借助于 MediaPipe 提供的强大工具集,开发者能够在短时间内构建起高效稳定的手势识别系统。只需简单几步操作就能获得精确可靠的二维甚至三维空间中的手形描述向量集合。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值