2016-09-07 2 views
0

Этот код предназначен для обнаружения с помощью лица и глаз веб-камера, но получаю эту ошибкуНевозможно обнаружить лицо и глаза с OpenCV в Python

Traceback (most recent call last): 
    File "D:/Acads/7.1 Sem/BTP/FaceDetect-master/6.py", line 28, in <module> 
    eyes = eyeCascade.detectMultiScale(roi) 
NameError: name 'roi' is not defined 

, но когда я использую этот код делать обнаружения лица и глаза в образе его рабочего надлежащим образом без ошибок

import matplotlib 
import matplotlib.pyplot as plt 
import cv2 
import sys 
import numpy as np 
import os 

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

video_capture = cv2.VideoCapture(0) 

while True: 
    # Capture frame-by-frame 
    ret, frame = video_capture.read() 

    faces = faceCascade.detectMultiScale(frame) 

    for (x, y, w, h) in faces: 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
     roi = frame[y:y+h, x:x+w] 

    eyes = eyeCascade.detectMultiScale(roi) 
    for (ex,ey,ew,eh) in eyes: 
     cv2.rectangle(roi,(ex,ey),(ex+ew,ey+eh), 255, 2) 

    cv2.imshow('Video', frame) 

    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

video_capture.release() 
cv2.destroyAllWindows() 
+0

Где вы определяете переменную 'roi'? – CoryKramer

+0

У меня не было, но без определения раннего тоже он работал в обнаружении лиц и глаз на изображении – karthik

ответ

2

Я думаю, что это всего лишь проблема отступов.

roi не входит в сферу действия, когда вы выходите из петли faces.

for (x, y, w, h) in faces: 
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
    roi = frame[y:y+h, x:x+w] 

    # eyes detection runs for each face 
    eyes = eyeCascade.detectMultiScale(roi) 
    for (ex,ey,ew,eh) in eyes: 
     cv2.rectangle(roi,(ex,ey),(ex+ew,ey+eh), 255, 2) 
+0

большое спасибо. теперь я могу обнаружить оба лица и глаза с помощью веб-камеры – karthik

+0

@karthik :) повеселиться – Berriel