“Mediapipe”的版本间的差异
Liangdaozheng(讨论 | 贡献) (→Mediapipe Python的安装和应用) |
Liangdaozheng(讨论 | 贡献) |
||
第20行: | 第20行: | ||
#安装Mediapipe <br> 1)安装OpenCV,终端执行pip install opencv-contrib-python <br> 2)安装Mediapipe,终端执行pip install mediapipe,或者使用国内镜像 pip install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple/br | #安装Mediapipe <br> 1)安装OpenCV,终端执行pip install opencv-contrib-python <br> 2)安装Mediapipe,终端执行pip install mediapipe,或者使用国内镜像 pip install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple/br | ||
==应用== | ==应用== | ||
− | + | *Mediapipe手势识别 | |
− | 1 | + | 1.OpenCV调用摄像头: |
import cv2 | import cv2 | ||
cap = cv2.VideoCapture(0) #OpenCV调用摄像头,0 == 摄像头,文件路径 == 打开视频 | cap = cv2.VideoCapture(0) #OpenCV调用摄像头,0 == 摄像头,文件路径 == 打开视频 | ||
第29行: | 第29行: | ||
cv2.imshow("Image", image) #CV2窗体,显示摄像头获取到的视频流 | cv2.imshow("Image", image) #CV2窗体,显示摄像头获取到的视频流 | ||
cv2.waitKey(1) #关闭窗体 | cv2.waitKey(1) #关闭窗体 | ||
− | 2 | + | 2.调用mediapipe中的hands模块: |
mp_drawing = mp.solutions.drawing_utils | mp_drawing = mp.solutions.drawing_utils | ||
mp_drawing_styles = mp.solutions.drawing_styles | mp_drawing_styles = mp.solutions.drawing_styles | ||
第43行: | 第43行: | ||
1.static_image_mode=True适用于静态图片的手势识别,Flase适用于视频等动态识别,比较明显的区别是,若识别的手的数量超过了最大值,True时识别的手会在多个手之间不停闪烁,而False时,超出的手不会识别,系统会自动跟踪之前已经识别过的手。默认值为False;<br> 2.max_num_hands用于指定识别手的最大数量。默认值为2;<br> 3.min_detection_confidence 表示最小检测信度,取值为[0.0,1.0]这个值约小越容易识别出手,用时越短,但是识别的准确度就越差。越大识别的越精准,但是响应的时间也会增加。默认值为0.5; | 1.static_image_mode=True适用于静态图片的手势识别,Flase适用于视频等动态识别,比较明显的区别是,若识别的手的数量超过了最大值,True时识别的手会在多个手之间不停闪烁,而False时,超出的手不会识别,系统会自动跟踪之前已经识别过的手。默认值为False;<br> 2.max_num_hands用于指定识别手的最大数量。默认值为2;<br> 3.min_detection_confidence 表示最小检测信度,取值为[0.0,1.0]这个值约小越容易识别出手,用时越短,但是识别的准确度就越差。越大识别的越精准,但是响应的时间也会增加。默认值为0.5; | ||
4.min_tracking_confience 表示最小的追踪可信度,越大手部追踪的越准确,相应的响应时间也就越长。默认值为0.5。 | 4.min_tracking_confience 表示最小的追踪可信度,越大手部追踪的越准确,相应的响应时间也就越长。默认值为0.5。 | ||
− | + | 3.一个手部识别的简单代码: | |
− | |||
− | 3 | ||
import cv2 | import cv2 | ||
import mediapipe as mp | import mediapipe as mp | ||
第79行: | 第77行: | ||
break | break | ||
cap.release() | cap.release() | ||
+ | *Mediapipe姿态识别 | ||
+ | 1.OpenCV调用摄像头(同手势识别) | ||
+ | 2.调用Mediapipe中的pose模块 | ||
+ | import mediapipe as mp | ||
+ | mp_pose = mp.solutions.pose | ||
+ | |||
+ | pose = mp_pose.Pose(static_image_mode=True, | ||
+ | model_complexity=1, | ||
+ | smooth_landmarks=True, | ||
+ | enable_segmentation=True, | ||
+ | min_detection_confidence=0.5, | ||
+ | min_tracking_confidence=0.5) |
2022年11月20日 (日) 06:54的版本
百科首页 | 3D虚拟世界 | 音乐与人工智能 | 人工智能机器人 | 关于我们 | 网站首页
Mediapipe简介
Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用ML(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坐标。
- 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 Python的安装和应用
安装
- 安装python 3.7以上版本,下载地址:https://www.python.org/getit
(python安装教程,引自CSDN https://blog.csdn.net/weixin_49237144/article/details/122915089) - 安装Mediapipe
1)安装OpenCV,终端执行pip install opencv-contrib-python
2)安装Mediapipe,终端执行pip install mediapipe,或者使用国内镜像 pip install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple/br
应用
- Mediapipe手势识别
1.OpenCV调用摄像头:
import cv2 cap = cv2.VideoCapture(0) #OpenCV调用摄像头,0 == 摄像头,文件路径 == 打开视频 while True: success, image = cap.read() img = cv2.cvtColor(iamge,cv2.COLOR_BGR2RGB) #cv2图像初始化 cv2.imshow("Image", image) #CV2窗体,显示摄像头获取到的视频流 cv2.waitKey(1) #关闭窗体
2.调用mediapipe中的hands模块:
mp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solutions.drawing_styles mp_hands = mp.solutions.hands hands = mp_hands.Hands( static_image_mode=False, max_num_hands=2, min_detection_confidence=0.75, 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.一个手部识别的简单代码:
import cv2 import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils mp_hands = mp.solutions.hands hands = mp_hands.Hands( static_image_mode=False, max_num_hands=2, min_detection_confidence=0.75, min_tracking_confidence=0.75)
cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 因为摄像头是镜像的,所以将摄像头水平翻转 # 不是镜像的可以不翻转 frame = cv2.flip(frame, 1) results = hands.process(frame) # process()是手势识别最核心的方法,通过调用这个方法,将窗口对象作为参数,mediapipe就会将手势识别的信息存入到res对象中 frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) if results.multi_handedness: for hand_label in results.multi_handedness: print(hand_label) if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks: print('hand_landmarks:', hand_landmarks) # 关键点可视化 mp_drawing.draw_landmarks( frame, hand_landmarks, mp_hands.HAND_CONNECTIONS) cv2.imshow('MediaPipe Hands', frame) if cv2.waitKey(1) & 0xFF == 27: break cap.release()
- Mediapipe姿态识别
1.OpenCV调用摄像头(同手势识别) 2.调用Mediapipe中的pose模块
import mediapipe as mp mp_pose = mp.solutions.pose pose = mp_pose.Pose(static_image_mode=True, model_complexity=1, smooth_landmarks=True, enable_segmentation=True, min_detection_confidence=0.5, min_tracking_confidence=0.5)