尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MediaPipe 跨平台人脸检测、手势跟踪与姿态估计实战指南

MediaPipe 跨平台人脸检测、手势跟踪与姿态估计实战指南 MediaPipe 跨平台人脸检测、手势跟踪与姿态估计实战指南【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe⏱️ 把一帧摄像头画面喂给 MediaPipe约 20 ms 内就能拿到 21 个手部关键点、6 个人脸关键点和边界框——人脸检测与手势跟踪同一套 API 就能跑通跨 Android / iOS / 桌面 / Web 不用重写业务逻辑。这篇文章带你从装包到组合多个模型讲清楚高频参数怎么调。它到底能干什么检测器 跟踪器两级流水线MediaPipe 的核心套路是两级流水线BlazeFace / BlazePose 这类轻量检测器先在整帧里定位 ROI人脸或躯干区域再由关键点模型在裁剪后的 ROI 上直接回归坐标视频流里检测器只在首帧和跟丢时重新工作。这就是它能在手机上做到实时推理的原因。上面这类普通照片帧就是 MediaPipe 的典型输入一次 process 同时产出人脸边界框、6 关键点以及手势跟踪所需的 ROI。同一套 graph 在 Android、iOS、桌面 C、Python、JavaScript 和 Coral 六端跑mediapipe/graphs/ 里每个 solution 都有对应的.pbtxt所以本文的调参思路跨平台通用。5 分钟跑通第一个人脸检测 demo⚙️ 最短路径只有两步装预编译的 Python 包然后打开摄像头拿结果。python3 -m venv mp_env source mp_env/bin/activate pip install mediapipe预编译 wheel 已含 OpenCV不必再单独装如果cv2报错通常是系统缺视频解码库详见 docs/getting_started/troubleshooting.md。 接下来这段 20 行左右的代码就是一个可运行的实时人脸检测import cv2 import mediapipe as mp mp_face_detection mp.solutions.face_detection mp_drawing mp.solutions.drawing_utils cap cv2.VideoCapture(0) with mp_face_detection.FaceDetection( model_selection0, min_detection_confidence0.5) as fd: while cap.isOpened(): ok, frame cap.read() if not ok: continue frame cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results fd.process(frame) if results.detections: for d in results.detections: mp_drawing.draw_detection(frame, d) cv2.imshow(MediaPipe Face Detection, cv2.flip(frame, 1)) if cv2.waitKey(5) 0xFF 27: break cap.release()这段代码做的事打开 0 号摄像头 → 逐帧 BGR 转 RGB →process拿results.detections→ 画框显示。值得动的参数就两个model_selection0 是 2 米内短距模型1 是 5 米内全距模型和min_detection_confidence默认 0.5调高更准但会漏脸。参数定义见 docs/solutions/face_detection.md。人脸检测FaceDetection 两个参数决定检测距离核心类mp.solutions.face_detection.FaceDetectionPython 侧支持model_selection与min_detection_confidence两个配置项JS 端参数名换成model字符串详见 docs/solutions/face_detection.md。model_selection0 短距2 米内精度优先1 全距5 米内用 sparse 模型提速。摄像头应用选 0会议室选 1。min_detection_confidence检测成功的最小置信度默认 0.5。调高减少误检调低覆盖更多小脸、糊脸。输出是results.detections每个检测包含归一化边界框和 6 个关键点右眼、左眼、鼻尖、嘴中心、左右耳屏。import cv2 import mediapipe as mp image cv2.imread(photo.jpg) image cv2.cvtColor(image, cv2.COLOR_BGR2RGB) with mp.solutions.face_detection.FaceDetection( model_selection0, min_detection_confidence0.5) as fd: res fd.process(image) if res.detections: nose mp.solutions.face_detection.get_key_point( res.detections[0], mp.solutions.face_detection.FaceKeyPoint.NOSE_TIP) print(f鼻尖归一化坐标: ({nose.x:.3f}, {nose.y:.3f}))这段在做什么对单张图片做检测并取出鼻尖坐标——x / y是相对宽高的归一化值乘上image.shape就是像素坐标。model_selection是最值得先调的旋钮脸离镜头超过 2 米时切到 1 会明显更稳。手势跟踪Hands 的 21 个关键点怎么读核心类mp.solutions.hands.Hands关键参数static_image_modeFalse默认按视频流跟踪跟丢了才重新检测True每帧都跑检测适合批处理互不相关的静态图。max_num_hands最大检测手数默认 2。只关心单手时设 1 能省算力。min_tracking_confidence跟踪成功的最小置信度默认 0.5调低更黏手但会容忍漂移static_image_modeTrue时该项被忽略。输出results.multi_hand_landmarks是每只手 21 个x / y / z关键点x / y归一化到[0, 1]z以手腕为原点的相对深度另有multi_handedness给左右手标签。完整说明见 docs/solutions/hands.md。import cv2 import mediapipe as mp mp_hands mp.solutions.hands mp_drawing mp.solutions.drawing_utils image cv2.cvtColor(cv2.imread(photo.jpg), cv2.COLOR_BGR2RGB) with mp_hands.Hands(static_image_modeTrue, max_num_hands2, min_detection_confidence0.5) as hands: res hands.process(image) if res.multi_hand_landmarks: lm res.multi_hand_landmarks[0] h, w image.shape[:2] tip lm.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP] print(食指指尖像素坐标:, int(tip.x * w), int(tip.y * h)) mp_drawing.draw_landmarks( image, lm, mp_hands.HAND_CONNECTIONS)这段在做什么把手部 21 关键点画出来并用枚举索引INDEX_FINGER_TIP取食指指尖转成像素坐标。max_num_hands是第二个值得动的旋钮——会议场景里只跟主讲人的手设 1 即可。人体姿态估计Pose 33 个关键点 可选分割掩码核心类mp.solutions.pose.Pose关键参数model_complexity0 / 1 / 2精度和时延都随它上升默认 1移动端优先 0桌面再考虑 2。smooth_landmarks跨帧滤波减少抖动默认True静态图模式下被忽略。enable_segmentationTrue时额外输出全身分割掩码results.segmentation_mask默认False。输出 33 个全身 3D 关键点含面部与躯干x / y同样归一化到[0, 1]。参数全表以 docs/solutions/pose.md 为准。import cv2 import numpy as np import mediapipe as mp mp_pose mp.solutions.pose mp_drawing mp.solutions.drawing_utils image cv2.cvtColor(cv2.imread(photo.jpg), cv2.COLOR_BGR2RGB) with mp_pose.Pose(model_complexity1, enable_segmentationTrue, min_detection_confidence0.5) as pose: res pose.process(image) if res.pose_landmarks: mp_drawing.draw_landmarks( image, res.pose_landmarks, mp_pose.POSE_CONNECTIONS) if res.segmentation_mask is not None: mask np.stack([res.segmentation_mask] * 3, axis-1) 0.1 image np.where(mask, image, cv2.GaussianBlur(image, (55, 55), 0))这段在做什么画 33 个姿态关键点再用分割掩码把背景高斯模糊、只留人物——enable_segmentationTrue才有掩码输出model_complexity直接决定这一帧多快低端机上先降它。组合技人脸 手势同帧协作的伪代码骨架实战场景视频会议里同时回答画面里有几张脸主讲人现在做了什么手势。把两个 solution 挂到同一帧上即可骨架如下≤15 行cap cv2.VideoCapture(0) mp_face_detection mp.solutions.face_detection mp_hands mp.solutions.hands with mp_face_detection.FaceDetection(model_selection1, min_detection_confidence0.5) as fd, \ mp_hands.Hands(max_num_hands2) as hands: while cap.isOpened(): ok, frame cap.read() if not ok: break rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) faces fd.process(rgb).detections hands_res hands.process(rgb) # 例faces 非空且 hands_res.multi_handedness 有 Right 手势 # - 触发主讲人右手确认事件两个高频坑帧复用process前必须 BGR→RGB 且同一份rgb喂给所有模型各 solution 的输入尺寸必须一致否则人脸框画在错误的位置上。坐标系对齐detections的框、手部landmarks的x / y都是归一化坐标统一× w, × h转像素后再参与业务判断另外multi_handedness默认假设输入是镜像自拍图非镜像输入要自己交换左右手标签见 docs/solutions/hands.md。设备档位 → 推荐参数速查按设备档位给参数的短清单时延参考 docs/solutions/pose.md 中 Pose 官方实测Lite 20 ms / Full 25 ms / Heavy 53 ms Pixel 3 GPU设备档位推荐参数说明低端机Android / iOSmodel_complexity0、max_num_hands1先保帧率精度靠调min_detection_confidence找平衡中端机model_complexity1默认视频流场景保持static_image_modeFalse利用跟踪省检测桌面 / 静态图批处理model_complexity2、static_image_modeTrue精度优先每帧都检测各平台接入各看一行文档即可Python · Android · iOS · C 桌面 · JavaScript · Coral。三句话总结MediaPipe 用检测器 跟踪器两级流水线把人脸检测、手势跟踪、姿态估计压进 20 ms 级实时推理三个高频类FaceDetection / Hands / Pose的参数就那几个取值影响都在 docs/solutions/ 写清楚了跨六端部署时同一份 graph 直接复用调参思路一致。下一步可以试用 Holistic 把面部、手、姿态合并进一个 graph减少多次 process 的开销用仓库里的 Model Maker 对自己的手势数据集微调手势识别模型打开 docs/tools/tracing_and_profiling.md 和 docs/tools/performance_benchmarking.md用 trace 定位 pipeline 里最慢的 calculator。【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表