cv2 人脸识别报错cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale 作者:马育民 • 2020-04-28 09:42 • 阅读:10295 # 使用cv2识别人脸,代码如下: ``` import cv2 face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") img = cv2.imread("hjt.jpg") faces = face_cascade.detectMultiScale(img, 1.3, 5) ``` # 执行报错 如下: ``` OpenCV(4.2.0) cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale' ``` # 原因 加载`haarcascade_frontalface_default.xml`时,找不到该文件 ### xml文件所在位置 安装cv2后,`haarcascade_frontalface_default.xml`文件就已经存在: - windows:`python安装目录/lib/site-packages/cv2/data/`文件夹中 - macos:`/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/data` # 解决 ### 复制xml路径 复制xml路径,粘贴到`cv2.CascadeClassifier(xml路径)`是最简单的方法 **缺点:** 安装其他的python版本,路径会有变化。 如:安装python3.8,那上面的路径就会改变 ### 动态获取xml路径 由于 xml 在 cv2模块下,可以通过 [sys.path](https://www.malaoshi.top/show_1EF5QMJ2t6WS.html "sys.path") 获取python的模块搜索路径,根据模块路径获得xml路径 ``` import sys,os def get_cv2_xml(path): xml_path=os.path.join("cv2/data",path) # print(xml_path) for item in sys.path: temp_path=os.path.join(item,xml_path) if os.path.exists(temp_path): # print(xml_path) return temp_path xml_path=get_cv2_xml("haarcascade_frontalface_default.xml") print(xml_path) ``` 执行结果: ``` /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml ``` 感谢: https://blog.csdn.net/appleyuchi/article/details/78638337 原文出处:http://malaoshi.top/show_1EF5QMNYBuVb.html