facedetector 是 chrome 92+ 等 chromium 浏览器支持的实验性 api,需 https/localhost 环境,通过 detect() 返回人脸数组,长度即人数;不支持 firefox/safari,生产环境建议用服务端或 tensorflow.js 替代。

FaceDetector 是 HTML5 中实验性的人脸检测 API,但目前仅在部分 Chromium 内核浏览器(如 Chrome 92+)中支持,且需在安全上下文(HTTPS 或 localhost)中启用。它不能直接统计“上传照片中的人脸数量”,而是通过调用 detect() 方法返回人脸位置和特征数组,你需手动计算数组长度来获得数量。
确认浏览器支持与启用条件
FaceDetector 尚未成为标准 Web API,使用前必须检查兼容性并满足运行环境要求:
- 仅 Chrome 92+(桌面版)及基于新版 Chromium 的 Edge 支持;Firefox、Safari 完全不支持
- 必须运行在 HTTPS 网站或
localhost下(HTTP 非本地域会静默失败) - 需用户主动授权摄像头权限(若后续扩展为实时检测),但静态图片检测无需权限
- 部分 Chrome 版本需手动开启实验性功能:
chrome://flags/#enable-experimental-web-platform-features
加载图片并调用 detect() 获取人脸数据
FaceDetector 只能处理 <img>、<canvas></canvas> 或 ImageBitmap 对象,不接受文件路径或 base64 字符串。需先将用户上传的 File 转为可绘制图像对象:
- 用
FileReader读取上传的图片文件,得到 data URL - 创建
Image对象,监听load事件,在回调中将其绘制到<canvas></canvas>上(确保跨域安全) - 调用
faceDetector.detect(canvas),返回 Promise,解析后得到FaceDetectionResult[] - 数组长度即为人脸数量(注意:可能为空数组,表示未检测到人脸)
基础代码示例(含错误处理)
以下为最小可行实现,省略 UI 和样式,聚焦核心逻辑:
<input type="file" accept="image/*" id="upload"><div id="result"></div>
<script>
const upload = document.getElementById('upload');
const result = document.getElementById('result');
// 检查 FaceDetector 是否可用
if (typeof FaceDetector === 'undefined') {
result.textContent = '当前浏览器不支持 FaceDetector';
} else {
const faceDetector = new FaceDetector({ fast: true });
upload.addEventListener('change', async (e) => {
const file = e.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = async () => {
const img = new Image();
img.onload = async () => {
// 绘制到 canvas(避免跨域限制)
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
ctx.drawImage(img, 0, 0);
try {
const faces = await faceDetector.detect(canvas);
result.textContent = `检测到 ${faces.length} 张人脸`;
} catch (err) {
result.textContent = '检测失败:' + err.message;
}
};
img.src = reader.result;
};
reader.readAsDataURL(file);
});
}
</script>
注意事项与替代方案建议
FaceDetector 在实际项目中稳定性低、覆盖范围窄,生产环境不推荐依赖:
- 检测精度有限,对侧脸、遮挡、低光照、小尺寸人脸容易漏检或误检
- 无公开文档说明算法细节,行为可能随 Chrome 版本变化
- 服务端方案更可靠:如 Python + OpenCV / dlib,或调用云 API(腾讯云人脸检测、阿里云视觉智能)
- 前端替代库可考虑 TensorFlow.js BlazeFace,纯 JS 实现,兼容性好,支持离线运行
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











