2016-08-19 2 views
0

Я написал сценарий, посмотрев этот сайт, и он работает отлично, но единственная проблема, когда я запускаю его на своем компьютере, - это только определение области глаза. https://pythonprogramming.net/haar-cascade-face-eye-detection-python-opencv-tutorial/faceetection с opencv и python обнаруживает только область глаз

Ниже приведен сценарий, который я написал на основе веб-сайта.

import numpy as np 
import cv2 

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 

image = cv2.imread('frame119.jpg') 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
faces = face_cascade.detectMultiScale(gray, 1.3, 5) 

for (x,y,w,h) in faces: 
    cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2) 
    roi_gray = gray[y:y+h, x:x+w] 
    roi_color = image[y:y+h, x:x+w] 

    eyes = eye_cascade.detectMultiScale(roi_gray) 
    for (ex,ey,ew,eh) in eyes: 
     cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 

cv2.imshow('image', image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Мне нужно добавить дополнительную строку, чтобы исправить проблему? Кроме того, изображение в формате 680x480, я думаю, что, возможно, это одна из причин, по которой он обнаруживает только область глаз изображения, но я не знаю об этом.

Благодарим за помощь.

ответ

1

Невозможно обнаружить глаза, если лицо не обнаружено.

так попробовать эти модификации

import numpy as np 
import cv2 

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 

image = cv2.imread('frame119.jpg') 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
faces = face_cascade.detectMultiScale(gray, 1.3, 5) 

print len(faces) # it will print no of faces detected 
for (x,y,w,h) in faces: 
    cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2) 
    roi_gray = gray[y:y+h, x:x+w] 
    roi_color = image[y:y+h, x:x+w] 
    cv2.imshow('face',roi_color) # It will show a cropped face , if face is detected 
    cv2.waitKey()  
    eyes = eye_cascade.detectMultiScale(roi_gray) 
    for (ex,ey,ew,eh) in eyes: 
     cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 

cv2.imshow('image', image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

Я запустить модифицированный скрипт, который вы даете, но для обрезанного торцевой части, он показывает только глаза, и количество распознанных лиц показывает 2, который, как eyes.I хотели бы сделать программу для обнаружения всего лица и области глаз точно так же, как в примере с сайта, но когда я запускаю программу, оба прямоугольника обнаруживают область глаз. Думаю, это может быть проблема с веб-камерой? Спасибо за помощь. – Ling

+0

probem может быть в файле .xml, plz проверить, является ли он допустимым файлом для обнаружения лица, и он не переименован. –

+0

probem может быть в файле .xml, plz проверить, является ли он действительным файлом для обнаружения лица, и он не переименован, попробуйте с другим изображением, попробуйте с другим классическим каскадным классификатором типа «haarcascade_frontalface_alt_tree.xml» –