OpenCV 面部检测出现此错误

问题描述

我不断收到此错误

faces = face_cascade.detectMultiScale(gray,1.3,5)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wvn_it83\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion Failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'

尝试运行此代码

import cv2
import numpy as np

face_cascade = cv2.CascadeClassifier('haarcascase_frontalface_default.xml')

cap = cv2.VideoCapture(0)

while 1:
    ret,img = cap.read()
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray,5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0),2)
        roi_gray = gray[y:y+h,x:x+w]
        roi_color = img[y:y+h,x:x+w]

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

我在 [this[(https://www.youtube.com/watch?v=88HdqNDQsEk&t=432s) YouTube 视频中找到了代码

解决方法

可能是 haarcascase_frontalface_default.xml 文件丢失或必须以其他方式指定路径。

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml

.xml 可以在脚本的目录中并从中调用它,也可以指定绝对路径。

两者都适用于我的测试运行,即使用绝对路径:

face_cascade = cv2.CascadeClassifier(r"Z:\py\haarcascade_frontalface_default.xml")

见:

error: (-215) !empty() in function detectMultiScale

,

我相信这是由于缺少 .xml 文件造成的。你能检查一下你的 .xml 文件的路径是否正确吗?

或者你从别处开始这个程序?因为路径将从您运行程序的位置开始。

例如,即使您的 python 文件与 .xml 文件位于同一目录中。如果您从 python folder/app.py 等其他目录运行 python,它将抛出错误。您必须将 xml 路径更改为“文件夹/模型.xml”。