功能描述
本文档详细介绍了如何使用 TRTC Web SDK 的人脸检测插件,实时检测摄像头视频流中的人脸状态变化。该插件采用智能防抖逻辑,仅在人脸出现/消失状态真正变化时触发回调,避免因光线变化或短暂遮挡导致的误报。
前提条件
- TRTC Web SDK 版本 >= 5.15.0
- 需要先开启摄像头视频流
平台兼容性
| 平台 | 操作系统 | 浏览器版本 | 备注 |
|---|---|---|---|
| Web | Windows | Chrome 90+、Firefox 90+、Edge 97+ | 建议使用最新版 Chrome 浏览器(开启浏览器硬件加速) |
| Web | Mac | Chrome 98+、Firefox 96+、Safari 15+ | 2019年及以上 MacBook |
| Web | Android | 微信内嵌浏览器、Chrome、Firefox、小米浏览器 | 建议使用微信内嵌、Chrome 或火狐浏览器等主流浏览器 |
| Web | iOS | 微信内嵌浏览器、Chrome、Safari、Firefox | 建议使用 Chrome 或 Safari 浏览器 |
实现流程
部署静态资源
该插件依赖一些静态资源文件,为保证浏览器可以正常加载和运行这些文件,你需要完成以下步骤:
- 将
node_modules/trtc-sdk-v5/assets目录发布至 CDN 或者静态资源服务器中。 - 在创建 trtc 实例时传入您的 CDN 地址给 assetsPath 参数,例如:
TRTC.create({ assetsPath: 'https://xxxx/assets' }),SDK 会按需加载相关资源文件。
- 若您的版本低于
v5.10.0,您需要下载解压 https://web.sdk.qcloud.com/trtc/webrtc/v5/assets/assets.zip 后,发布至 CDN 或者静态资源服务器中。- 如果目录下文件的 Host URL 与网页应用的 Host URL 不一致,则需要开启访问文件域名的 CORS 策略。
- 不能把目录文件放在 HTTP 服务下,因为在 HTTPS 域名下加载 HTTP 资源会被浏览器安全策略禁止。
引入并注册插件
import { FaceDetection } from 'trtc-sdk-v5/plugins/video-effect/face-detection';
const trtc = TRTC.create({
plugins: [FaceDetection],
assetsPath: 'https://xxxx/assets' // 替换为您的静态资源地址
});
开启本地摄像头
await trtc.startLocalVideo();
开启人脸检测插件
await trtc.startPlugin('FaceDetection', {
onFaceDetectionStateChanged: (hasFace) => {
if (hasFace) {
console.log('检测到人脸出现');
// 执行人脸出现时的业务逻辑
} else {
console.log('检测到人脸消失');
// 执行人脸消失时的业务逻辑
}
},
detectionInterval: 300, // 检测间隔,单位ms (可选,默认300)
minConfidence: 0.8, // 最小置信度阈值 (可选,默认0.8)
missingTimeout: 1000 // 人脸消失确认时间,单位ms (可选,默认1000)
});
按需更新参数
// 更新检测参数 - 提高检测灵敏度
await trtc.updatePlugin('FaceDetection', {
onFaceDetectionStateChanged: (hasFace) => {
console.log('更新后的检测状态:', hasFace);
},
detectionInterval: 200, // 缩短检测间隔,提高实时性
minConfidence: 0.7, // 降低置信度阈值,提高检测灵敏度
missingTimeout: 1500 // 延长消失确认时间,减少误报
});
关闭人脸检测
await trtc.stopPlugin('FaceDetection');
核心特性
智能防抖逻辑
插件采用非对称防抖机制,确保状态变化的准确性:
- 人脸出现(true):立即触发,实时响应
- 人脸消失(false):延迟触发,需满足
missingTimeout条件才确认
该设计有效避免了因以下情况导致的误报:
- 人脸短暂转头或低头
- 光线瞬间变化
- 物体短暂遮挡
视频流状态同步
当本地视频流状态变化时,插件会自动处理:
| 场景 | 插件行为 | 回调触发 |
|---|---|---|
| 视频静音(Mute) | 暂停检测 | 触发一次 hasFace: false |
| 视频恢复(Unmute) | 恢复检测 | 根据实际状态触发相应回调 |
API 说明
trtc.startPlugin('FaceDetection', options)
用于开启人脸检测插件。
options
| Name | Type | Attributes | Description |
|---|---|---|---|
| onFaceDetectionStateChanged | (hasFace: boolean) => void |
必填 | 人脸状态变化回调函数(仅在状态真正变化时触发) |
| detectionInterval | number | 选填 | 检测间隔时间(ms),范围 100-5000,默认 300 |
| minConfidence | number | 选填 | 最小人脸置信度阈值,范围 0-1,默认 0.8 |
| missingTimeout | number | 选填 | 人脸消失确认时间(ms),范围 0-5000,默认 1000 |
Example:
await trtc.startPlugin('FaceDetection', {
onFaceDetectionStateChanged: (hasFace) => {
if (hasFace) {
console.log('人脸出现');
} else {
console.log('人脸消失');
}
},
detectionInterval: 300,
minConfidence: 0.8,
missingTimeout: 1000
});
trtc.updatePlugin('FaceDetection', options)
可修改人脸检测参数。
options
| Name | Type | Attributes | Description |
|---|---|---|---|
| onFaceDetectionStateChanged | (hasFace: boolean) => void |
选填 | 人脸状态变化回调函数 |
| detectionInterval | number | 选填 | 检测间隔时间(ms),范围 100-5000 |
| minConfidence | number | 选填 | 最小人脸置信度阈值,范围 0-1 |
| missingTimeout | number | 选填 | 人脸消失确认时间(ms),范围 0-5000 |
Example:
await trtc.updatePlugin('FaceDetection', {
detectionInterval: 200,
minConfidence: 0.7,
missingTimeout: 1500
});
trtc.stopPlugin('FaceDetection')
关闭人脸检测。
常见问题
1. 如何调整检测的灵敏度?
可以通过以下参数组合调整:
- 提高灵敏度:降低
minConfidence,缩短detectionInterval - 降低灵敏度:提高
minConfidence,延长missingTimeout
2. 视频流恢复后需要重新开启检测吗?
不需要。插件会自动处理视频流状态变化,恢复后会继续检测。