4 个端,同一套逻辑:MediaPipe 部署的取舍与快路径

4 个端,同一套逻辑:MediaPipe 部署的取舍与快路径 4 个端同一套逻辑MediaPipe 部署的取舍与快路径【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe同一套推理逻辑换平台就要重新折腾一遍装依赖、调版本、改工程文件。这篇按端把 MediaPipe 部署会卡你的地方一次讲清——一条桌面 bazel 命令、一段双击即跑的网页、两个移动端最常见的坎你照着过就行。选型你到底要跑在哪几个端不用把四个端都配一遍先按你要验证什么挑桌面原型验证有台 Linux 或 macOS 开发机选它。编译一次能直接拿真实数据跑通整条管线是验证想法最快的地方。浏览器内嵌要给别人演示或快速试交互选它。MediaPipe Web 端接入不用装任何东西一个 HTML 文件就能跑。手机端 App要上生产、吃相机实时帧绕不开它。代价是 NDK 和构建配置最费事建议原型稳了再上。桌面端 3 步跑通第一个 Demo装好 OpenCV 和 Bazel 后跑一遍./setup_opencv.sh加 Bazelisk 就行细节看 docs/getting_started/install.md直接跑手部跟踪示例GLOG_logtostderr1 bazel run --define MEDIAPIPE_DISABLE_GPU1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu窗口弹出把--input_video_path指到一段视频手指一抬21 个关键点加骨架线就画出来了——这就是 MediaPipe 桌面端 bazel 构建的完整闭环。Linux 想跑 GPU 版就把 target 换成hand_tracking_gpu记得加 EGL 编译选项见 mediapipe/examples/desktop/hand_tracking。Web 端零编译粘贴即用桌面要编译Web 这边什么都不用装——存成 .html 双击浏览器打开就完事。下面这段不到 20 行是 MediaPipe Web 端接入的最小形态!DOCTYPE htmlbody video idv playsinline/videocanvas idc width640 height480/canvas script srchttps://cdn.jsdelivr.net/npm/mediapipe/hands0.4/hands.min.js/script script srchttps://cdn.jsdelivr.net/npm/mediapipe/drawing_utils0.3/drawing_utils.min.js/script script const hands new Hands({locateFile: f https://cdn.jsdelivr.net/npm/mediapipe/hands0.4/${f}}); hands.setOptions({maxNumHands: 2, modelComplexity: 1, minDetectionConfidence: 0.5}); hands.onResults(r { const ctx document.getElementById(c).getContext(2d); ctx.clearRect(0, 0, 640, 480); ctx.drawImage(r.image, 0, 0, 640, 480); for (const lm of r.multiHandLandmarks ?? []) { drawConnectors(ctx, lm, HAND_CONNECTIONS); drawLandmarks(ctx, lm); } }); navigator.mediaDevices.getUserMedia({video: true}).then(s document.getElementById(v).srcObject s); setInterval(() hands.send({image: document.getElementById(v)}), 100); /script/bodyonResults回调里multiHandLandmarks就是核心每只手的 21 个关键点数组坐标是 0~1 的归一化值乘上 canvas 宽高就能落到像素上drawConnectors负责按骨骼关系把点连成线drawLandmarks画点。API 细节在 docs/getting_started/javascript.md。上移动端之前先过这两道坎AndroidNDK/SDK 版本对齐。最多人卡在这一步脚本会帮你把版本装齐之后构建和安装就是一条命令./setup_android_sdk_and_ndk.sh bazel build -c opt --configandroid_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/handtrackinggpu.apkiOS用 Tulsi 生成 Xcode 工程。别手动建工程——仓库里现成的mediapipe/MediaPipe.tulsiproj就是干这个的Tulsi 装好后用它生成再在 Xcode 里选设备 Build and Run配置全帮你拼好了。子图怎么选按任务 × 硬件两个维度仓库里的预编译子图好比预制菜拆袋加热就能吃——选对口味就行。按检测目标 × 跑在哪挑检测目标CPU 版GPU 版手部关键点无独立显卡、离线批处理选hand_landmark_cpu手机/笔记本实时流选hand_landmark_gpu人脸检测精度优先、设备受限选 CPU 子图高帧率摄像头应用选 GPU 子图多手跟踪原型期先用 CPU 版验证逻辑上设备前切 tracking 的 GPU 版姿态/全身模型大CPU 上只适合低帧率场景实时场景基本必须 GPU子图清单和输入输出定义在 mediapipe/modules/hand_landmark 这类模块目录下同名.pbtxt就是可直接接的图。跑不动时的三个排查方向编译报错九成是 OpenCV 没配对——回WORKSPACE检查*_opencv的path指到哪、版本是不是 3.x改对重跑即可。推理帧率低先降输入分辨率再降模型档位手部检测的model_complexity0/1最后才考虑把 CPU 子图换 GPU 子图。内存/显存爆显存不够就把推理落回 CPU 版子图或把批量、历史帧缓存的窗口调小一条就能救回来。收尾模型跑通之后下一步是拿自己的数据训自定义模型看 mediapipe/model_maker/python 的 Model Maker或者用压测工具量化各端表现见 docs/tools/performance_benchmarking.md。【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考