cv2.CascadeClassifier.detectMultiScale() 失败并显示 -215:断言失败

cv2.CascadeClassifier.detectMultiScale() failing with -215:Assertion failed

我在 Windows 10 上使用 Python v3.8.3 和 OpenCV v4.5.1。我想做的就是通过尝试检测人脸来验证 OpenCV 是否正常工作。这是 input image. I've seen this answer 但这并不能解决我的问题。

import cv2

# Load the cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
print(f"face: {face_cascade}")

# Read the input image
img = cv2.imread('./images/female_frontal.jpg')
print(f"img: {img}")

# Convert into grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(f"gray: {gray}")

# Detect faces
faces = face_cascade.detectMultiScale(gray)
print(f"faces: {faces}")

输出:

$ python profile_dectector.py
face: <CascadeClassifier 019F3220>
img: [[[197 174 128]
  [196 173 127]
  [196 173 127]
  ...
  [105  61  37]
  [108  64  40]
  [114  66  42]]]

gray: [[163 162 162 ... 171 168 166]
 ...
 [166 156 153 ...  59  62  64]]
Traceback (most recent call last):
  File "profile_dectector.py", line 18, in <module>
    faces = face_cascade.detectMultiScale(gray)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\pip-req-build-xeqjxthj\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'

使用这行代码解决了我的问题:

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')