AI项目一:mediapipe测试

若该文为原创文章,转载请注明原文出处。

一. 引言


MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。MediaPipe大有用武之地,可以做物体检测、自拍分割、头发分割、人脸检测、手部检测、运动追踪,等等。基于此可以实现更高级的功能。

更多详细可以查看官方文档地址MediaPipe  |  Google for Developers

mediaipe提供了很多功能,包含目标识别,骨骼识别,图像分割,人脑识别检测等功能

官方也提供了基于Android,python和web的例子,这里测试是基于python

这里测试的是手指骨骼识别,模型包检测21个手关节的关键点定位 检测到的手区域内的坐标。

 二、环境搭建

1、创建虚拟环境(conda环境搭建,请参考前面文章)

conda create -n mediapipe python=3.8

2、激活

conda activate mediapipe

3、安装mediapipe

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

4、安装OpenCV

pip install opencv-python

5、安装OpenCV拓展

pip install opencv-contrib-python

6、安装pycharm

pycharm使用的是社区版本,喜欢使用指令的,可以不用安装

安装后界面

7、pycharm配置环境

导入虚拟环境 

确定后,会发现,pycharm会把环境切换成创建的虚拟环境。 

这里有个要注意的,如果终端显示的不是我们的虚拟环境,我这边显示的是base需要修改

修改Terminal的Application Settings改成powershell.exe

三、测试

程序参考Example:Gesture recognition guide for Python  |  MediaPipe  |  Google for Developers

代码流程

1、导入库
2、使用cv2打开摄像头
3、使用mediapipe推理摄像头捕捉到的图片
4、显示结果

源代码

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
# For webcam input:
cap = cv2.VideoCapture(0)
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.")
            # If loading a video, use 'break' instead of 'continue'.
            continue

        # Flip the image horizontally for a later selfie-view display, and convert
        # the BGR image to RGB.
        image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
        # To improve performance, optionally mark the image as not writeable to
        # pass by reference.
        image.flags.writeable = False
        results = hands.process(image)

        # Draw the hand annotations on the 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)
        if cv2.waitKey(5) & 0xFF == 27:
            break
cap.release()

 使用的电脑是cpu版本,测试显示感觉还是可以的。

至此测试结束,接下来将使用mediapipe做手势识别及音量控制等。

如有侵权,或需要完整代码,请及时联系博主。

猜你喜欢

转载自blog.csdn.net/weixin_38807927/article/details/132256554
今日推荐