2016-09-04 2 views
2

J'essaye de créer une détection de visage et d'oeil en utilisant la bibliothèque d'OpenCV. C'est le code avec lequel je travaillais. Il fonctionne en douceur sans erreur, mais le seul problème ne montrant aucun résultat aucun visage et les yeux se trouvent avec ce codePython - Impossible de détecter le visage et les yeux?

import cv2 
import sys 
import numpy as np 
import os 

# Get user supplied values 
imagePath = sys.argv[1] 


# Create the haar cascade 
faceCascade = cv2.CascadeClassifier('C:\Users\Karthik\Downloads\Programs\opencv\sources\data\haarcascades\haarcascad_frontalface_default.xml') 
eyeCascade= cv2.CascadeClassifier('C:\Users\Karthik\Downloads\Programs\opencv\sources\data\haarcascades\haarcascade_eye.xml') 

# Read the image 
image = cv2.imread(imagePath) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

# Detect faces in the image 
faces = faceCascade.detectMultiScale(
    gray, 
    scaleFactor=1.2, 
    minNeighbors=5, 
    minSize=(30, 30), 
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE 
) 

print "Found {0} faces!".format(len(faces)) 

# Draw a rectangle around the faces 
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 = eyeCascade.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("Faces found", image) 
print image.shape 
cv2.waitKey(0) 

Répondre

2

Pour moi, il travaille dans mon carnet de jupyter sur Ubuntu 15.10 en utilisant OpenCV 3.1.0-dev avec python 3.4

Se pourrait-il que vous ayez une simple faute de frappe?

haarcascad_frontalface_default.xml =>haarcascade_frontalface_default.xml

et ici:

eyes = eyeCascade.detectMultiscale(roi_gray) =>eyeCascade.detectMultiScale(roi_gray)

C'est mon code de travail:

%matplotlib inline 

import matplotlib 
import matplotlib.pyplot as plt 

import cv2 
import sys 
import numpy as np 
import os 

# Create the haar cascade 
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
eyeCascade= cv2.CascadeClassifier('haarcascade_eye.xml') 

# Read the image 
image = cv2.imread('lena.png', 0) 

if image is None: 
    raise ValueError('Image not found') 

# Detect faces in the image 
faces = faceCascade.detectMultiScale(image) 

print('Found {} faces!'.format(len(faces))) 

# Draw a rectangle around the faces 
for (x, y, w, h) in faces: 
    cv2.rectangle(image, (x, y), (x+w, y+h), 255, 2) 
    roi = image[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) 


plt.figure() 
plt.imshow(image, cmap='gray') 
plt.show() 

enter image description here

+0

Merci beaucoup son fonctionnement parfaitement bien pour moi quand je cours ce code à travers cmd son affichage des résultats, mais quand je lance le programme par IDLE son montrant une erreur de [Traceback (dernier appel dernier): Fichier "D: \ Acads \ 7.1 Sem \ BTP \ FaceDetect-maître \ 3.py ", ligne 19, en gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) erreur: .. \ .. \ .. \ .. \ opencv \ modules \ imgproc \ src \ color.cpp: 3739: erreur: (-215) scn == 3 || scn == 4 dans la fonction cv :: cvtColor] après cette erreur j'ai enlevé [gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)] maintenant son fonctionnement sans erreurs pouvez-vous m'aider avec cela aussi – karthik

+0

Si vous avez maintenant un drapeau 0 dans votre 'cv2.imread (fichier, 0)' vous allez déjà lire l'image d'entrée en niveaux de gris pour que votre image ait seulement 1 canal (scn). C'est pourquoi cvtColor dit "Non, je ne peux pas convertir une image BGR 3 canaux en 1 canal gris car c'est déjà 1 canal et j'ai besoin de' scn == 3 ou scn == 4' ". Donc, retirez le 0 de imread si vous voulez l'image couleur et grayscaled dans votre code. – Fabian

+1

Pour de futures erreurs comme ceci, utilisez 'print (image.shape)' qui vous donnera (hauteur, largeur, canaux) de votre image. Si elle ne renvoie qu'un tuple avec (hauteur, largeur) que votre image est grayscaled. – Fabian