📜  如何追踪手 python opencv mediapipe - Python (1)

📅  最后修改于: 2023-12-03 15:38:56.273000             🧑  作者: Mango

如何追踪手?

本文介绍使用Python和OpenCV、Mediapipe等库来实现手部追踪的方法。

步骤
  1. 安装依赖库

本项目需要安装以下依赖库:

  • OpenCV
  • Mediapipe

使用pip命令来安装这些库:

pip install opencv-python mediapipe
  1. 打开摄像头

本项目需要使用摄像头来进行手部追踪。使用OpenCV库中的VideoCapture类来打开摄像头:

import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

其中参数为0表示打开默认的摄像头。如果需要使用其他摄像头,可以改为对应的编号,例如1、2等。

  1. 读取帧并解析

使用VideoCapture类的read()方法来读取视频流中的帧。每一帧都是一个图像,可以使用OpenCV库中的imshow()函数来显示。

# 读取一帧
ret, frame = cap.read()

# 显示图像
cv2.imshow('frame', frame)

接下来,我们需要使用Mediapipe库的Hand类来解析图像中的手部信息。Hand类会返回一个手部的21个关键点的坐标。

import mediapipe as mp

# 创建手部检测类
hands = mp.solutions.hands.Hands()

# 解析图像,获取手部信息
results = hands.process(frame)
  1. 绘制关键点

我们可以使用OpenCV库的circle()函数来绘制关键点。

# 遍历每个手部关键点,绘制圆点
for hand_landmarks in results.multi_hand_landmarks:
    for landmark in hand_landmarks.landmark:
        x, y = int(landmark.x * frame.shape[1]), int(landmark.y * frame.shape[0])
        cv2.circle(frame, (x, y), 5, (0, 0, 255), -1)
  1. 显示结果

最后,我们使用OpenCV库的imshow()函数来显示帧。另外,我们还需要使用waitKey()函数来等待用户按下键盘上的某个键才会继续执行下一帧。

# 显示结果
cv2.imshow('Hand tracking', frame)

# 等待用户按下键盘上的一个键
cv2.waitKey(1)

完整示例代码:

import cv2
import mediapipe as mp

# 打开摄像头
cap = cv2.VideoCapture(0)

# 创建手部检测类
hands = mp.solutions.hands.Hands()

while True:
    # 读取一帧
    ret, frame = cap.read()

    # 解析图像,获取手部信息
    results = hands.process(frame)

    # 遍历每个手部关键点,绘制圆点
    for hand_landmarks in results.multi_hand_landmarks:
        for landmark in hand_landmarks.landmark:
            x, y = int(landmark.x * frame.shape[1]), int(landmark.y * frame.shape[0])
            cv2.circle(frame, (x, y), 5, (0, 0, 255), -1)

    # 显示结果
    cv2.imshow('Hand tracking', frame)

    # 等待用户按下键盘上的一个键
    cv2.waitKey(1)
结论

通过本文的介绍,我们学习了如何使用Python和OpenCV、Mediapipe等库来实现手部追踪。希望对大家有所帮助!