获取摄像头图像流
- 使用 OpenCV(C++/Python)、GStreamer 或系统自带的 Camera HAL 获取视频流。
- 将每帧图像或视频流片段传递给人脸检测推理接口。
人脸检测推理
- 加载 RKNN 模型
- 在应用程序初始化时,使用 RKNPU SDK 加载已经转换好的人脸检测模型 (face_detection.rknn)。
- 建立推理上下文,准备输入输出缓冲区。
- 图像预处理
- 对摄像头捕获的图像进行缩放、通道变换(BGR->RGB)和归一化(mean/std),与模型训练时的预处理保持一致。
- 需要考虑分辨率、对齐方式等,以便匹配模型输入大小(例如 320x320、640x480 等)。
- 推理执行
- 调用 RKNPU SDK 接口 rknn_run() 或类似 API,在 NPU 上进行推理。
- 获取输出结果(人脸位置框坐标、置信度、关键点坐标等)。
- 后处理
- 解析模型输出:将网络输出的特征图或 bounding box 映射回原图坐标。
- 根据置信度 (confidence) 筛选有效的人脸检测框(一般设定阈值,如 0.5)。
- 执行 NMS (Non-Max Suppression) 去除重复框。
- 最终得到人脸在图像中的位置信息(矩形框)及可选的关键点信息(眼睛、嘴巴等)。
结果展示与后续处理
- 图像叠加:在画面中以方框标记检测到的人脸区域,并在屏幕或输出图像流中进行展示。
- 其他模块对接:若后续需要人脸识别或人脸跟踪,可在检测结果基础上进行下一步处理,比如截取人脸区域、特征提取、跟踪 ID 分配等。
- 性能监控:监控推理帧率、CPU / NPU 占用率等指标,及时进行优化。