J'essaie de travailler sur un système de reconnaissance de visage en Python OpenCV mais j'obtiens toujours l'erreur suivante
"! empty () dans la fonction 'cv :: CascadeClassifier :: detectMultiScale'"
Voici le code que j'utilise:
import cv2
import os
import numpy as np
from PIL import Image
import pickle
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
image_dir = os.path.join(BASE_DIR, "foto")
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create()
current_id = 0
label_ids = {}
y_labels = []
x_train = []
for root, dirs, files in os.walk(image_dir):
for file in files:
if file.endswith("png") or file.endswith("jpg"):
path = os.path.join(root, file)
label = os.path.basename(root).replace(" ", "-").lower()
#print(label, path)
if not label in label_ids:
label_ids[label] = current_id
current_id += 1
id_ = label_ids[label]
#print(label_ids)
#y_labels.append(label) # some number
#x_train.append(path) # verify this image, turn into a NUMPY
arrray, GRAY
pil_image = Image.open(path).convert("L") # grayscale
size = (550, 550)
final_image = pil_image.resize(size, Image.ANTIALIAS)
image_array = np.array(final_image, "uint8")
#print(image_array)
faces = face_cascade.detectMultiScale(image_array, scaleFactor=1.5, minNeighbors=5)
for (x,y,w,h) in faces:
roi = image_array[y:y+h, x:x+w]
x_train.append(roi)
y_labels.append(id_)
#print(y_labels)
#print(x_train)
with open("pickles/face-labels.pickle", 'wb') as f:
pickle.dump(label_ids, f)
recognizer.train(x_train, np.array(y_labels))
recognizer.save("recognizers/face-trainner.yml")
Qu'est-ce que je fais de mal?
4 Réponses :
Le fichier XML est manquant.
Essayez de donner directement le chemin complet comme ceci.
face_cascade = cv2.CascadeClassifier('C:\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')
plus important encore, le fichier doit être dans le répertoire C strong >
Vous devez mettre le chemin complet du fichier. Exemple:
face_cascade = cv2.CascadeClassifier('C:\\working_Dir\\data\\codes\\OpenCV\\classifiers\\haarcascade_frontalface_alt2.xml')
Vous pouvez télécharger ces codes depuis le dépôt github ici: Détection de visage avec Python à l'aide d'OpenCV
J'ai eu le même problème, vous devez ajouter des doubles barres obliques au lieu de simples.
git clone https://github.com/opencv/opencv.git p>
faceCascade = cv2.CascadeClassifier ('opencv / data / haarcascades / haarcascade_frontalface_default.xml')
Veuillez expliquer les différences subtiles avec les autres réponses, comment elles fonctionnent et pourquoi elles résolvent le problème. Essayez de faire ressortir les avantages de votre solution par rapport aux autres.
Veuillez inclure la pile d'erreur complète.
Fichier "bllablla.py", ligne 36, dans faces = face_cascade.detectMultiScale (image_array, scaleFactor = 1.5, minNeighbors = 5) cv2.error: OpenCV (3.4.5) C: \ projects \ opencv-python \ opencv \ modules \ objdetect \ src \ casca dedetect.cpp: 1698: erreur: (-215: échec de l'assertion)! vide () dans la fonction 'cv :: CascadeClassifier :: detectMultiScale'