当前位置:   article > 正文

Mediapipe 机器学习库介绍_mediapipe库

mediapipe库

Mediapipe简介

Mediapipe 是2012年起开始公司内部使用,2019年google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning)方案。Mediapipe实际上是一个集成的机器学习视觉算法的工具库,包含了人脸检测、人脸关键点、手势识别、头像分割和姿态识别等各种模型。
Mediapipe具备的优点有:
1)支持各种平台和语言,包括IOS,Android,C++,Python,JAVAScript,Coral等;
2)速度快,各种模型基本上可以做到实时运行。
Mediapipe在实际应用中的例子:
1)人脸检测
2)FaceMesh:从图像/视频中重建出人脸的3D Mesh,可以用于AR渲染;
3)人像分割:从图像/视频中把人分割出来,可用于视频会议如Zoom、钉钉;
4)手势识别和跟踪:可以识别标出手部21个关键点的3D坐标;
5)人体姿态识别:可以识别标出人体33个关键点的3D坐标。

  • 一些模型的web体验地址(用到电脑摄像头):
   人脸检测:https://code.mediapipe.dev/codepen/face_detection
   人脸关键点:https://code.mediapipe.dev/codepen/face_mesh
   手势识别:https://code.mediapipe.dev/codepen/hands
   姿态识别:https://code.mediapipe.dev/codepen/pose
   自拍头像分割:https://code.mediapipe.dev/codepen/selfie_segmentation

Mediapipe Python的安装和应用

安装

  1. 安装python 3.7以上版本,下载地址:Download Python | Python.org
    (python安装教程,引自CSDN https://blog.csdn.net/weixin_49237144/article/details/122915089)
  2. 安装Mediapipe
    1)安装OpenCV,终端执行pip install opencv-contrib-python
    2)安装Mediapipe,终端执行pip install mediapipe,或者使用国内镜像 pip install mediapipe -i Links for br

应用

Mediapipe手势识别

1.OpenCV调用摄像头:

  1. import cv2
  2. cap = cv2.VideoCapture(0) #OpenCV调用摄像头,0 == 摄像头,文件路径 == 打开视频
  3. while True:
  4. success, image = cap.read()
  5. img = cv2.cvtColor(iamge,cv2.COLOR_BGR2RGB) #cv2图像初始化
  6. cv2.imshow("Image", image) #CV2窗体,显示摄像头获取到的视频流
  7. cv2.waitKey(1) #关闭窗体

2.调用mediapipe中的hands模块:

  1. mp_drawing = mp.solutions.drawing_utils
  2. mp_drawing_styles = mp.solutions.drawing_styles
  3. mp_hands = mp.solutions.hands
  4. hands = mp_hands.Hands(
  5. static_image_mode=False,
  6. max_num_hands=2,
  7. min_detection_confidence=0.75,
  8. min_tracking_confidence=0.75)

mp.solutions.drawing_utils是一个绘图模块,将识别到的手部关键点信息绘制道cv2图像中,mp.solutions.drawing_style定义了绘制的风格。
mp.solutions.hands是mediapipe中的手部识别模块,可以通过它调用手部识别的api,然后通过调用mp_hands.Hands初始化手部识别类。
mp_hands.Hands中的参数:
1)static_image_mode=True适用于静态图片的手势识别,Flase适用于视频等动态识别,比较明显的区别是,若识别的手的数量超过了最大值,True时识别的手会在多个手之间不停闪烁,而False时,超出的手不会识别,系统会自动跟踪之前已经识别过的手。默认值为False;
2)max_num_hands用于指定识别手的最大数量。默认值为2;
3)min_detection_confidence 表示最小检测信度,取值为[0.0,1.0]这个值约小越容易识别出手,用时越短,但是识别的准确度就越差。越大识别的越精准,但是响应的时间也会增加。默认值为0.5;
4)min_tracking_confience 表示最小的追踪可信度,越大手部追踪的越准确,相应的响应时间也就越长。默认值为0.5。

3.demo示例:

  1. import cv2
  2. import mediapipe as mp
  3. mp_drawing = mp.solutions.drawing_utils
  4. mp_hands = mp.solutions.hands
  5. hands = mp_hands.Hands(
  6. static_image_mode=False,
  7. max_num_hands=2,
  8. min_detection_confidence=0.75,
  9. min_tracking_confidence=0.75)
  10. cap = cv2.VideoCapture(0)
  11. while True:
  12. ret, frame = cap.read()
  13. frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  14. # 因为摄像头是镜像的,所以将摄像头水平翻转
  15. # 不是镜像的可以不翻转
  16. frame = cv2.flip(frame, 1)
  17. results = hands.process(frame) # process()是手势识别最核心的方法,通过调用这个方法,将窗口对象作为参数,mediapipe就会将手势识别的信息存入到res对象中
  18. frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
  19. if results.multi_handedness:
  20. for hand_label in results.multi_handedness:
  21. print(hand_label)
  22. if results.multi_hand_landmarks:
  23. for hand_landmarks in results.multi_hand_landmarks:
  24. print('hand_landmarks:', hand_landmarks)
  25. # 关键点可视化
  26. mp_drawing.draw_landmarks(
  27. frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)
  28. cv2.imshow('MediaPipe Hands', frame)
  29. if cv2.waitKey(1) & 0xFF == 27:
  30. break
  31. cap.release()

Mediapipe姿态识别

1.OpenCV调用摄像头(同手势识别)
2.调用Mediapipe中的pose模块

  1. import mediapipe as mp
  2. mp_pose = mp.solutions.pose #调用pose api
  3. pose = mp_pose.Pose(static_image_mode=True,
  4. model_complexity=1,
  5. smooth_landmarks=True,
  6. enable_segmentation=True,
  7. min_detection_confidence=0.5,
  8. min_tracking_confidence=0.5)

mp_pose.Pose()其参数:
1)static_image_mode:静态图像还是连续帧视频;
2)model_complexity:人体姿态估计模型,0表示速度最快,精度最低(三者之中),1表示速度中间,精度中间(三者之中),2表示速度最慢,精度最高(三者之中);
3)smooth_landmarks:是否平滑关键点;
4)enable_segmentation:是否对人体进行抠图;
5)min_detection_confidence:检测置信度阈值;
6)min_tracking_confidence:各帧之间跟踪置信度阈值;

3.demo示例:

  1. import cv2
  2. import mediapipe as mp
  3. if __name__ == '__main__':
  4. mp_pose = mp.solutions.pose
  5. pose = mp_pose.Pose(static_image_mode=True,
  6. model_complexity=1,
  7. smooth_landmarks=True,
  8. # enable_segmentation=True,
  9. min_detection_confidence=0.5,
  10. min_tracking_confidence=0.5)
  11. drawing = mp.solutions.drawing_utils
  12. # read img BGR to RGB
  13. img = cv2.imread("1.jpg")
  14. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  15. cv2.imshow("input", img)
  16. results = pose.process(img)
  17. drawing.draw_landmarks(img, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
  18. cv2.imshow("keypoint", img)
  19. drawing.plot_landmarks(results.pose_world_landmarks, mp_pose.POSE_CONNECTIONS)
  20. cv2.waitKey(0)
  21. cv2.destroyAllWindows()

参考资源

  1. MediaPipe基础(4)Hands(手)_求则得之,舍则失之的博客-CSDN博客_mediapipe
  2. 3D视觉——1.人体姿态估计(Pose Estimation)入门——使用MediaPipe含单帧(Signel Frame)与实时视频(Real-Time Video)_姿态估计标注工具_游客26024的博客-CSDN博客

利用Mediapipe和Unity实现简易的动作捕捉

概述

   通过Python使用Mediapipe进行人体姿态和手势识别,利用UDP通信技术将识别到的关节点数据传输到Unity中,实现人体模型在Unity的同步运动。

参考资源

  1. Mediapipe+OpenCV与Unity引擎实现动作捕捉_unity 动作捕捉_BIGBOSSyifi的博客-CSDN博客
  2. OpenCV+Mediapipe手势动作捕捉与Unity引擎的结合_BIGBOSSyifi的博客-CSDN博客
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/988870
推荐阅读
相关标签
  

闽ICP备14008679号