使用DeepFace.analyze()的SSD后端时出现cv2.dnn无readNetFromCaffe属性错误
解决cv2.dnn.readNetFromCaffe属性错误(DeepFace+OpenCV 4.9.0)
问题场景
已安装环境:
- opencv-python 4.9.0.80
- opencv-contrib-python 4.9.0.80
- deepface 0.0.81
运行代码:
DeepFace.analyze('Img.jpg', ['race'], detector_backend = 'ssd', enforce_detection= False, silent = False)
触发错误:
AttributeError: module 'cv2.dnn' has no attribute 'readNetFromCaffe'
解决方案
方案1:修复Anaconda环境冲突(优先尝试)
Anaconda环境中,pip安装的OpenCV可能与conda自带的OpenCV包冲突,导致dnn模块方法无法正常加载:
- 卸载所有OpenCV相关包:
pip uninstall -y opencv-python opencv-contrib-python conda uninstall -y opencv
- 用conda重新安装兼容版本的OpenCV:
conda install -c conda-forge opencv=4.8.0
- 重新安装deepface:
pip install deepface==0.0.81
- 重启Jupyter Notebook后再次运行代码。
方案2:修改DeepFace的SSDWrapper代码
如果不想更换OpenCV版本,可直接修改DeepFace的SSD检测器封装代码:
- 定位到文件路径:
~/anaconda3/lib/python3.11/site-packages/deepface/detectors/SsdWrapper.py - 将第46行的
cv2.dnn.readNetFromCaffe替换为cv2.dnn.readNet:
# 原代码 face_detector = cv2.dnn.readNetFromCaffe( home + "/.deepface/weights/deploy.prototxt", home + "/.deepface/weights/res10_300x300_ssd_iter_140000.caffemodel", ) # 修改后 face_detector = cv2.dnn.readNet( home + "/.deepface/weights/deploy.prototxt", home + "/.deepface/weights/res10_300x300_ssd_iter_140000.caffemodel", )
- 保存文件后,重启Jupyter Notebook运行代码。
方案3:降级OpenCV到兼容版本
OpenCV 4.9.0对部分旧API有调整,降级到4.8.x版本可解决兼容性问题:
- 卸载现有OpenCV包:
pip uninstall -y opencv-python opencv-contrib-python
- 安装指定兼容版本:
pip install opencv-python==4.8.0.74 opencv-contrib-python==4.8.0.74
- 重启Jupyter Notebook后测试代码。
内容的提问来源于stack exchange,提问作者Dai
相关产品推荐
相关产品推荐

