调用face_recognition.face_encodings致Python实时人脸识别程序崩溃求助
问题原因分析
1. 版本兼容性冲突
face_recognition 1.2.8是2019年的旧版本,未针对Python 3.10做适配,其依赖的dlib库在Python 3.10环境下编译时可能出现二进制接口不兼容,导致compute_face_descriptor()方法接收的参数格式不符合预期,触发TypeError并直接崩溃。
2. OpenCV后端警告(qt.qpa.plugin)
该警告是OpenCV的Qt GUI后端加载异常导致的,虽不是崩溃的直接原因,但会影响摄像头画面的正常显示,可能和系统Qt环境缺失、OpenCV编译时未正确关联Qt组件有关。
3. 核心功能缺失导致无法识别
移除face_encodings语句后,程序跳过了人脸特征提取的核心步骤,自然无法完成人脸识别,这属于正常现象,不是独立问题。
解决方法
方案一:调整版本适配(优先推荐)
- 降级Python到3.8或3.9版本:face_recognition 1.2.8对这两个版本的兼容性经过验证,可避免dlib接口不兼容问题。
- 或升级face_recognition到最新兼容版本:安装
face_recognition>=1.3.0(该版本支持Python 3.10),同时确保dlib版本匹配(需>=19.22.0,可通过pip install dlib --upgrade更新)。
方案二:修复图像格式转换
确认官方示例中的BGR转RGB步骤是否正确执行,OpenCV读取的摄像头帧为BGR格式,而face_recognition要求输入RGB格式图像,需在代码中添加:
rgb_frame = frame[:, :, ::-1]
确保在调用face_recognition.face_encodings(rgb_frame)前完成格式转换,避免因图像格式错误触发compute_face_descriptor()的参数异常。
方案三:解决OpenCV Qt后端警告
- Linux环境:在运行程序前设置环境变量:
export QT_QPA_PLATFORM=xcb - Windows环境:在代码开头添加:
import os os.environ['QT_QPA_PLATFORM'] = 'windows' - 通用方法:强制OpenCV使用其他显示后端,比如在代码开头添加:
cv2.setUseOptimized(True) cv2.setNumThreads(0)
内容的提问来源于stack exchange,提问作者Stacy
相关产品推荐
相关产品推荐

