MediaPipe 人脸检测与模型微调实战:3 步在本地跑通实时推理
【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe
我用MediaPipe在本机笔记本上跑通了人脸检测和模型微调:从装包、识别到调参,前后花了约 40 分钟,全程只用 Python 和 CPU,不需要 GPU 🎯 下面把我上手的完整过程写出来,你可以照着复现。
为什么值得用 MediaPipe 做本地实时推理
它解决的核心问题是"模型不离开设备":输入的图片或视频帧在本地完成推理,不经过任何服务器,单帧延迟可以压到毫秒级。对比传统的"上传图片调云端 API"方案,MediaPipe 把人脸检测、目标检测等能力做成了现成的 Python 包,装完就能调,调参和微调也都有配套工具。
准备工作:跑通 MediaPipe 人脸检测只需要这 4 样
- Python 3.8+ 和 pip:用于安装 MediaPipe 的预编译轮子
- 仓库代码:clone 一份当测试数据源,命令:
git clone https://gitcode.com/GitHub_Trending/med/mediapipe - 2~3 张测试图片:直接用仓库里的现成图即可,比如
mediapipe/calculators/tensor/testdata/face_detection_expected.png - 一个虚拟环境:
python3 -m venv mp_env && source mp_env/bin/activate,装依赖更干净
安装命令只有一条:pip install mediapipe。如果后面要做微调,再补装pip install mediapipe-model-maker,依赖清单见 mediapipe/model_maker/requirements.txt。
实战走查:从安装到微调的完整流程
第 1 步:安装 MediaPipe 并验证导入
在虚拟环境里执行安装后,进 Python 解释器跑一句import mediapipe as mp。
验证结果:不报 ImportError,且能打印出版本号,说明环境就绪。我这边从 pip 下载到装完耗时约 90 秒。
第 2 步:3 行代码跑通第一张人脸检测
核心就三件事:import mediapipe as mp→ 取mp.solutions.face_detection并create()一个检测器 → 对 BGR 图像调用process()。
验证结果:在仓库那张 600x600 的测试图上,返回 1 个检测结果,附带 6 个关键点(双眼、鼻尖、嘴心、左右耳屏点)。参数不用改,默认就能跑。
第 3 步:调整 min_detection_confidence 观察漏检变化
人脸检测器有两个常用设置项:model_selection(0 是 2 米内近景模型,1 是 5 米内全范围模型)和min_detection_confidence(默认 0.5)。我把阈值从 0.5 一档一档提到 0.7、0.9,观察输出数量变化。
我调整到第 3 次时发现:阈值提到 0.7 时测试图还能稳定检出,0.9 时检测框开始出现时消失时——这就是"灵敏度换准确率"的直接代价 ⚡ 想深入看每个参数的说明,可以翻 docs/solutions/face_detection.md。
验证结果:你手里应该有两份输出,一份是 0.5 阈值下的完整检测,一份是高阈值下的变化对比,能直观看到置信度过滤的效果。
第 4 步:用 Model Maker 微调自己的目标检测模型
MediaPipe 仓库自带 Model Maker,可以拿自己的数据重新训练检测模型。我直接用了仓库里的 COCO 测试集mediapipe/model_maker/python/vision/object_detector/testdata/coco_data走通整条链路:
- 用
Dataset.from_coco_folder()读数据,按 0.6 切训练集,剩余再对半分验证/测试 - 选MOBILENET_V2作为骨干网络,
batch_size=1先跑通 - 调用
evaluate()拿到coco_metrics,再export_model()导出.tflite
验证结果:终端打印出 loss 和 AP 分数,导出目录里多了一个可直接部署的 tflite 模型文件。
仓库里手势识别模块也备好了同类训练样本,想换任务,照着改数据集读取方式就行。
常见坑:3 个高频问题的快速解法 ⚠️
Q:pip install mediapipe 装不上?原因:PyPI 没有 aarch64 的预编译轮子,树莓派、Jetson 这类 ARM 设备最容易踩。解法:按 docs/getting_started/python.md 里的流程装好 Bazel 和 OpenCV 后从源码编译安装。
Q:明明有人脸,检测结果却是 0?原因:默认model_selection=0是 2 米内近景模型,人离镜头太远就会被过滤掉。解法:切到model_selection=1(5 米全范围),或把min_detection_confidence降回 0.5。
Q:Model Maker 训练慢得没法看?原因:batch_size=1时每个 epoch 都要跑很久。解法:内存允许的话把 batch_size 提到 4~8,并且先用仓库自带的小数据集验证链路,再换自己的大数据集。
一个动手任务:用仓库自带数据复现完整链路
把face_detection_expected.png(位于mediapipe/calculators/tensor/testdata/)和sergey.png(位于mediapipe/objc/testdata/)这 2 张仓库测试图依次丢给人脸检测器,把每张图的标注结果保存下来。
验收标准:2 张图各输出一份带 6 个关键点的标注图,其中至少 1 张检出人脸;再把阈值从 0.5 提到 0.9 复跑一次,并记录每张图前后检测数量的变化。全部满足就算跑通。
小结
用 MediaPipe 把人脸检测跑起来真的只需要 3 步:装包、process 一张图、调一个阈值;微调模型也只是换个数据集的事。想继续往下走,可以看仓库里mediapipe/examples/coral/下的边缘设备部署示例,那是同一套模型落到硬件上的形态。
【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考