本文档涵盖了使用 face_recognition 库进行的实时人脸识别,重点关注处理实时视频流和视频文件。它解释了如何在连续视频源(包括网络摄像头和预录制视频文件)中实现人脸识别。有关静态图像中的基本识别,请参阅 基本人脸识别。有关性能优化技术的详细信息,请参阅 性能优化。
实时人脸识别涉及连续处理视频帧以检测、编码和识别面部。 face_recognition 库结合 OpenCV 进行视频处理,为实现此功能提供了一种简单的方法。
来源: examples/facerec_from_webcam.py33-75 examples/facerec_from_webcam_faster.py41-96
该库提供了几种实时人脸识别的方法,每种方法都适用于不同的用例和性能要求。
最常见的方法是处理来自网络摄像头的实时视频。提供了两种主要实现方式
最简单的实现方式以全分辨率处理每一帧
来源: examples/facerec_from_webcam.py33-75
为了获得更好的性能,优化实现会降低帧分辨率并只处理隔帧
来源: examples/facerec_from_webcam_faster.py41-96
对于预录制的视频,实现可以处理和标注视频文件
来源: examples/facerec_from_video_file.py10-86
对于高性能场景,特别是 GPU 加速,批量处理可以显著提高吞吐量
来源: examples/find_faces_in_batches.py17-55
实时识别系统由几个相互连接的组件组成,这些组件处理视频帧并执行人脸识别。
来源: examples/facerec_from_webcam.py12-75 examples/facerec_from_webcam_faster.py14-96 examples/facerec_from_video_file.py10-86
来源: examples/facerec_from_webcam.py13 examples/facerec_from_video_file.py11
在处理视频帧之前,需要加载和编码已知人脸图像
来源: examples/facerec_from_webcam.py16-31 examples/facerec_from_webcam_faster.py17-33
实时识别的核心是帧处理循环
| 步骤 | 基本实现 | 优化实现 |
|---|---|---|
| 帧捕获 | ret, frame = video_capture.read() | ret, frame = video_capture.read() |
| 预处理 | 转换为 RGB | 调整大小并转换为 RGB |
| 人脸检测 | 处理每一帧 | 处理隔帧 |
| 人脸编码 | 全分辨率 | 四分之一分辨率 |
| 可视化 | 绘制矩形和标签 | 将坐标缩放回全分辨率 |
来源: examples/facerec_from_webcam.py33-75 examples/facerec_from_webcam_faster.py41-96
提供两种主要的人脸匹配策略
首次匹配策略(在示例中已注释掉)
最佳匹配策略(推荐)
来源: examples/facerec_from_webcam.py47-60 examples/facerec_from_webcam_faster.py59-74
实时人脸识别可能非常耗费计算资源。示例演示了几种优化技术
以较低分辨率处理帧可以显著提高性能,同时对准确性的影响最小
来源: examples/facerec_from_webcam_faster.py48
处理隔帧可以减少 CPU 负载,同时保持可感知的实时性能
来源: examples/facerec_from_webcam_faster.py76
对于 GPU 加速环境,批量处理帧可以快约 3 倍
来源: examples/find_faces_in_batches.py39-40
完整的实时识别系统整合了 OpenCV 和 face_recognition 库的多个组件
来源: examples/facerec_from_webcam.py12-75 examples/facerec_from_webcam_faster.py14-96 examples/facerec_from_video_file.py10-86
虽然 face_recognition 库本身是核心组件,但实时实现需要额外的依赖项
- OpenCV (cv2) - for video capture and display
- NumPy - for array operations and calculations
来源: examples/facerec_from_webcam.py1-3 examples/facerec_from_webcam_faster.py1-3
实时人脸识别可能非常耗费资源。请考虑以下因素
来源: examples/facerec_from_webcam_faster.py5-9 examples/find_faces_in_batches.py4-15
该库提供了几个完整的实现示例
每个示例都演示了使用 face_recognition 库进行实时人脸识别的各种方法和优化技术。