基于行空板的mediapipe手势识别与追踪

2024-04-291470
精华项目
AI 快速预览详细 收起
本项目通过行空板和USB摄像头,使用MediaPipe的Hands模型进行手势识别与追踪。硬件搭建包括将摄像头接入行空板的USB接口,并通过USB连接线将行空板连接到计算机。软件编写部分,使用Mind+编程软件远程连接行空板,编写程序实现手势识别和关键点绘制。最终效果是能够实时显示摄像头拍摄的手部图像,并标记出手的关键点。该项目适用于STEM教育和少儿编程入门,帮助孩子掌握图像处理和机器学习基础。

一、实践目标

本项目在行空板上外接USB摄像头,通过摄像头来识别手掌,并在其上绘制关键点。

 

二、知识目标

1、学习使用MediaPipe的Hands模型进行手势识别并绘制关键点的方法。

 

三、实践准备

软件使用:Mind+编程软件x1

材料清单

一、实践过程

1、硬件搭建

1、将摄像头接入行空板的USB接口。

image.png

 

2、通过USB连接线将行空板连接到计算机。

image.png

2、软件编写

第一步:打开Mind+,远程连接行空板

image.png

第二步:编写程序

在“行空板的文件”中找到名为AI的文件夹,在其中新建一个名为“基于行空板的mediapipe手势识别与追踪”的文件夹,再新建一个项目文件,并命名为“main.py”。

 

示例程序:
 

 

 

代码
import cv2    # 导入OpenCV库,用于图像处理
import mediapipe as mp    # 导入MediaPipe库,用于机器学习模型的应用

mp_drawing = mp.solutions.drawing_utils    # 从MediaPipe的解决方案中导入绘图工具
mp_drawing_styles = mp.solutions.drawing_styles    # 从MediaPipe的解决方案中导入绘图样式工具
mp_hands = mp.solutions.hands    # 从MediaPipe的解决方案中导入Hands模型

# 打开摄像头,准备获取实时视频流
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)    # 设置视频流的宽度为320
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)    # 设置视频流的高度为240
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)    # 设置视频流的缓冲区大小为1

# 设置窗口为全屏模式
cv2.namedWindow('MediaPipe Hands', cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty('MediaPipe Hands', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

# 加载Hands模型
with mp_hands.Hands(
    model_complexity=0,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as hands:
  while cap.isOpened():
    # 读取摄像头的每一帧图像
    success, image = cap.read()
    if not success:
        print("Ignoring empty camera frame.")
        continue

    # 将图像转换为RGB格式
    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    # 使用Hands模型处理图像
    results = hands.process(image)

    # 将图像转换回BGR格式
    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,
                mp_drawing_styles.get_default_hand_landmarks_style(),
                mp_drawing_styles.get_default_hand_connections_style())

    # 将图像旋转90度并翻转,然后显示图像
    image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
    cv2.imshow('MediaPipe Hands', cv2.flip(image, 1))

    # 如果用户按下ESC键(ASCII值为27),则退出循环
    if cv2.waitKey(5) & 0xFF == 27:
        break

# 释放摄像头
cap.release()

3、运行调试

第一步:运行主程序

运行“main.py”程序,可以看到初始时屏幕上显示着摄像头拍摄到的实时画面,将摄像头画面对准手部,可以看到手掌被识别了出来并标记了关键点。

 

image.png

 

程序解析

在上述的“main.py”文件中,我们主要通过opencv库来调用摄像头,获取实时视频流,然后借助MediaPipe的Hands模型对每一帧图像进行手势识别并绘制关键点。整体流程如下,

 

①打开摄像头:程序首先打开摄像头获取实时视频流。

 

②读取每一帧图像:在一个无限循环中,程序读取摄像头的每一帧图像。

 

③图像预处理:读取到的图像首先转换为RGB格式(因为OpenCV读取的图像默认是BGR格式,而大部分的图像处理和计算机视觉算法都假定输入的图像是RGB格式的)。

 

④应用Hands模型:将预处理后的图像输入到Hands模型中,模型会输出一个包含多个手的关键点坐标的列表。

 

⑤绘制关键点和连接线:如果在图像中检测到手,程序会在图像上绘制出手的关键点和连接线。

 

⑥显示处理后的图像:将绘制了关键点和连接线的图像显示出来。

 

⑦检查用户输入:如果用户按下ESC键,则退出循环,程序结束。

 

 

五、知识园地

 

1. 了解MediaPipe的Hands模型

MediaPipe的Hands模型是一个用于手部关键点检测的模型,它能够在RGB图像中识别多只手的21个关键点。这些关键点包括手腕、各个指关节等,能够用于描述手的姿态和手势。

 

Hands模型使用了一个基于回归的方法,通过预测图像中手的关键点的坐标位置来实现手部关键点的检测。模型的输入是一张RGB图像,输出是图像中每只手的21个关键点的坐标。

 

模型的结构基于一个被称为BlazePalm的模型,该模型在进行手部关键点检测的同时,还会预测一个手掌的方向向量,这对于区分左手和右手以及手的朝向非常有用。模型在训练时使用了大量的真实世界图像以及合成图像,能够处理各种复杂的场景,包括不同的光照条件、手部遮挡等。

MediaPipe提供了完整的模型文件和相关的API,开发者可以非常方便地在自己的应用中集成Hands模型。并且,MediaPipe还提供了一套完整的解决方案,包括手部追踪、手势识别等功能,可以帮助开发者更容易地开发出复杂的交互应用。

 

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

所需材料/产品

加载全部

    行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

    行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

    行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

    Type-C&Micro二合一USB线

    Type-C&Micro二合一USB线

    Type-C&Micro二合一USB线

    800万USB自动对焦摄像头(带麦克风)

    800万USB自动对焦摄像头(带麦克风)

    800万USB自动对焦摄像头(带麦克风)

相关推荐

评论(6)
Curry
Curry
您好,请问行空板的mediapipe库是怎么导入的,我上传程序显示没有这个库
罗罗罗
罗罗罗
666
CYL
CYL
MediaPipe库导入不成功咋整
yM7RdfqzYG5y
yM7RdfqzYG5y
厉害,不过运行在板子上有点卡,一顿一顿的
花生编程
花生编程
厉害
三春牛-创客
三春牛-创客
不错
- 没有更多了 -

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

相关推荐

所需材料/产品

行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

Type-C&Micro二合一USB线

Type-C&Micro二合一USB线

Type-C&Micro二合一USB线

800万USB自动对焦摄像头(带麦克风)

800万USB自动对焦摄像头(带麦克风)

800万USB自动对焦摄像头(带麦克风)