cv2 人脸识别报错cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale

使用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 获取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


原文出处:/show_1EF5QMNYBuVb.html