当前位置:   article > 正文

Mediapipe框架介绍及使用说明

mediapipe

介绍

        Mediapipe是Google在2019年开发并提出的一款开源的跨平台多媒体处理框架,用于构建基于机器学习的应用程序,特别是涉及到算机视觉、音频处理、姿势估计等领域。Mediapipe实际上是一个集成的机器学习视觉算法的工具库(包含人脸检测、人脸关键点、手势识别、头像分割和姿态识别等各种模型),该库提供了一系列预训练模型和工具,可以帮助开发者快速构建和部署计算机视觉和音频处理应用。它提供了一套易于使用的API,可以用于实时姿势估计、手势识别、面部识别、目标跟踪等任务。

相关网址

参考网址:https://developers.google.cn/mediapipe 

官网地址:https://mediapipe.dev/

Github开源项目地址:https://github.com/google/mediapipe

一些模型的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库的主要特点包括:

  • 实时性能:提供高效的实时处理能力,适用于实时应用程序和流媒体处理,各种模型基本上可以做到实时运行且速度较快。
  • 跨平台支持和多语言支持:支持在多个平台上运行,包括Android、iOS、Windows和Linux等,支持C++,Python,JAVAScript,Coral等主流编程语言。
  • 灵活性:可以根据需要自定义和扩展,适用于各种不同的应用场景。
  • 高质量的预训练模型:提供了一系列经过训练的模型,可以直接用于各种计算机视觉和音频处理任务

开发

使用Mediapipe库进行开发,通常需要以下步骤:

1.安装Mediapipe库:可以使用pip命令来安装Mediapipe库,例如:pip install mediapipe
2.导入Mediapipe库:在Python代码中导入Mediapipe库,例如:import mediapipe as mp
3.加载预训练模型:使用Mediapipe库提供的模型,加载需要的预训练模型,例如:hands = mp.solutions.hands.Hands()
4.处理输入数据:将需要处理的输入数据传递给加载的模型,例如:results = hands.process(image)
5.获取结果:从处理结果中提取需要的信息,例如:landmarks = results.multi_hand_landmarks
6.进行后续处理:根据需要对结果进行进一步处理或应用。

        以上是使用Mediapipe库进行开发的基本步骤。具体的使用方法和示例代码可以参考Mediapipe官方文档和示例代码。

支持的Python版本

      Mediapipe库支持的Python版本包括:

  1. Python 3.7
  2. Python 3.8
  3. Python 3.9
  4. Python 3.10

这些是当前Mediapipe库所支持的Python版本。请注意,某些功能可能仅在特定的Python版本中可用。因此,建议使用最新版本的Python来获得最佳的兼容性和性能。

应用

Mediapipe手势识别

  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()

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。 

 Mediapipe姿态识别

  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()

 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:各帧之间跟踪置信度阈值;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/988852?site
推荐阅读
相关标签
  

闽ICP备14008679号