【问题标题】:error: OpenCV(4.5.5) error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'错误:OpenCV(4.5.5) 错误:(-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
【发布时间】:2022-06-22 14:16:57
【问题描述】:

我正在尝试在 anaconda 的 spyder 上使用 python 制作一个微笑检测器。该程序向我抛出了一个我作为 python 初学者无法理解的错误。这是错误:

错误:OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty( ) 在函数'cv::CascadeClassifier::detectMultiScale'中

代码如下:

import random , cv2,time
face_cascade=cv2.CascadeClassifier("haarscascade_frontalface_default.xml")
smile_cascade=cv2.CascadeClassifier("smile.xml")
video = cv2.VideoCapture(0)
num=0
def smile_meter(frame,x1,y1):
    global num
    if num>4000:
        x=str(random.randint(0, 100))
        font=cv2.FONT_HERSHEY_SIMPLEX
        color=(255,0,255)
        text=cv2.putText(frame,"your smile is",(int(x1)+15,int(y1)-70),font,1,color,4,cv2.LINE_AA)
        text=cv2.putText(frame,x+"%",(int(x1)+50,int(y1)-20),font,1,color,4,cv2.LINE_AA)
        time.sleep(15)
        num=0
        return num
    else:
        x=str(random.randint(0, 100))
        font=cv2.FONT_HERSHEY_SIMPLEX
        color=(255,0,255)
        text=cv2.putText(frame,"Smile Meter",(int(x1)+15,int(y1)-70),font,1,color,4,cv2.LINE_AA)
        text=cv2.putText(frame,x+"%",(int(x1)+50,int(y1)-20),font,1,color,4,cv2.LINE_AA)
        num=num+5
        return num
while True:
    check,frame=video.read()
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    face=face_cascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5)
    for x,y,w,h in face:
        img=cv2.rectangle(frame,(x,y),(x+(w+20),y+(h-300)),(0,0,255),-1)
        smile=smile_cascade.detectMultiScale(gray,scaleFactor=1.8,minNeighbors=20)
        for x1,y1,w1,h1 in smile:
            img=cv2.rectangle(frame,(x1,y1),(x1+(w1),y1+(h1)),(255,0,0),3)
            smile_meter(frame,x,y)
    cv2.imshow("smile meter",frame)
    key=cv2.waitKey(1)
    if key==ord('q'):
        break
video.release()
cv2.destroyAllWindows

【问题讨论】:

    标签: python


    【解决方案1】:

    您没有正确拼写 frontal_face_cascade。你说:

    face_cascade=cv2.CascadeClassifier("haarscascade_frontalface_default.xml")
    

    什么时候应该:

    face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    

    拼写错误可能会导致您犯错,因此请务必仔细检查一开始的所有内容是否正确。

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2019-06-26
      • 2019-12-07
      • 2020-10-13
      • 2021-04-14
      • 2020-05-17
      • 1970-01-01
      • 2015-08-11
      相关资源
      最近更新 更多