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