使用DeepFace+YOLOv8人脸识别时遇AttributeError错误求助
问题原因与解决方案
问题根源
你遇到的错误是因为默认的YOLOv8目标检测模型不输出人脸关键点,DeepFace调用的普通YOLOv8模型(如yolov8n.pt)只能检测人脸框,没有keypoints属性,导致代码尝试访问result.keypoints.xy时触发NoneType错误。
解决步骤
1. 切换到YOLOv8人脸专用模型
YOLOv8有专门的人脸检测分支(YOLOv8-face),该模型会输出人脸框+5个关键点(双眼、鼻子、嘴角),完全匹配DeepFace的需求:
- 先升级ultralytics库(YOLOv8官方依赖):
pip install --upgrade ultralytics
- 该库会自动下载YOLOv8-face模型,无需手动操作。
2. 调整DeepFace调用逻辑
DeepFace默认的yolov8后端指向普通目标检测模型,需手动指定使用人脸专用模型,两种实现方式:
方式一:通过环境变量临时指定
import os from deepface import DeepFace # 告诉DeepFace使用YOLOv8-face模型 os.environ["YOLOV8_FACE_MODEL"] = "yolov8n-face.pt" result = DeepFace.verify( model_name='VGG-Face', detector_backend='yolov8', img1_path='img1.jpg', img2_path='img2.jpg' )
方式二:修改DeepFace检测器源码(可选)
如果环境变量方式无效,找到DeepFace的YOLOv8检测器文件(路径通常为deepface/detectors/YoloV8Detector.py),修改模型加载行:
# 原代码 self.model = YOLO("yolov8n.pt") # 修改为 self.model = YOLO("yolov8n-face.pt")
3. 版本兼容排查
若问题仍存在,检查版本匹配度:
- DeepFace建议用0.0.79及以上版本
- ultralytics建议用8.0.100及以上版本
可执行以下命令固定版本:
pip install deepface==0.0.79 pip install ultralytics==8.0.150
4. 图片有效性验证
确保输入图片满足基础要求:
- 人脸清晰无严重遮挡
- 图片格式为JPG/PNG等常见格式
- 人脸区域占比不小于图片的1/10
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

