2016-07-26 2 views
0

OpenCV에서 파이썬의 "얼굴/얼굴의 존재"를 감지하기 위해 다음 코드를 작성했습니다.OpenCV를 사용하는 Python의 FaceDetection

/usr/bin/python3.4 /home/yas/PycharmProjects/Ch10_OpenCV/Example.py 
    init done 
    opengl support available 
    OpenCV Error: Assertion failed (!empty()) in detectMultiScale, file /home/yas/opencv-3.0.0/modules/objdetect/src/cascadedetect.cpp, line 1634 
    Traceback (most recent call last): 
    File "/home/yas/PycharmProjects/Ch10_OpenCV/Example.py", line 32, in <module> 
    faces = faceCascade.detectMultiScale(gray, 1.3, 5) 
    cv2.error: /home/yas/opencv- 3.0.0/modules/objdetect/src/cascadedetect.cpp:1634: error: (-215) !empty() in function detectMultiScale 


    Process finished with exit code 1 
결과, 웹캠 창이 열리지 않는

더 얼굴이 감지되지 확실히 :

import cv2 
import sys 

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 

cv2.namedWindow("preview") 
vc = cv2.VideoCapture(0) 


if vc.isOpened(): # try to get the first frame 
    rval, frame = vc.read() 
else: 
    rval = False 

while rval: 
    rval, frame = vc.read() 

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    faces = faceCascade.detectMultiScale(gray, 1.3, 5) 
    for (x,y,w,h) in faces: 
     frame = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2) 

    # Display the resulting frame 
    cv2.imshow('Preview', frame) 

    key = cv2.waitKey(20) 
    if key == 27: # exit on ESC 
     break 

cv2.destroyWindow("preview") 
cv2.destroyAllWindows() 

나는 다음과 같은 오류가 발생합니다. Linux-Ubtunu에서 일하고 Python 인터프리터 3.4.3을 사용하고 있습니다.

이 오류는 무엇을 의미합니까? 어떻게 해결 될 수 있습니까? 의견을 공유해 주셔서 감사합니다.

+1

은' 'haarcascade_frontalface_default.xml'' 파일을 찾을 수없는 수 있음 전체 완전한 경로를 – ZdaR

+0

감사를 제공합니다 : 그것은 같은 것이 될 것이다. 문제는 언급 한대로였습니다! https://raw.githubusercontent.com/shantnu/Webcam-Face-Detect/master/haarcascade_frontalface_default.xml에서 xml 파일을 수동으로 다운로드하여 현재 작업 디렉토리에 추가했습니다. 이제 프로그램이 얼굴을 잘 감지합니다. 그러나이 xml 파일이 파이썬 기본 배포판 중 하나인지 확인할 수 있습니까? 확인하자, 나는 이것을 확인할 수 없었다. – YAS

+1

의심되는 경우 https://github.com/opencv/opencv/tree/master/data/haarcascades에서 캐스케이드 파일을 다운로드 할 수 있습니다. – ZdaR

답변

0

마지막 두 줄 바로 앞에 vc.release()을 추가해야합니다. ,

vc.release() 
cv2.destroyWindow("preview") 
cv2.destroyAllWindows() 
관련 문제