Python OpenCV 未在训练数据中检测人脸

问题描述 投票:0回答:0

最近在做一个opencv的人脸检测算法,一开始还挺顺利的。我上传了 4 张我自己的 JPG(在一个有我名字的文件夹中),它认出我是我自己。我也尝试添加我兄弟的 4 张照片(在一个单独的文件夹中,上面写着他的名字),这很奇怪,把他认成了我而不是他。然后我删除了我的文件夹,这样只有他的文件夹里有图像。我很快尝试诊断问题,这是因为我的代码没有检测到他照片中的人脸(我打印的 x_train 的长度为 0)。我进行了一些谷歌搜索,这些照片似乎满足了检测人脸的所有“要求”;所以现在我想知道为什么这不起作用。

import os
from PIL import Image
import numpy
import pickle
import cv2

face_cascade = cv2.CascadeClassifier('Cascades/data/haarcascade_frontalface_alt2.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create()


base_dir = os.path.dirname(os.path.abspath(__file__))
img_dir = os.path.join(base_dir, "images")


curr_id = 0

label_ids = {}

y_labels = []
x_train = []

for root, dirs, files in os.walk(img_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()

            if not label in label_ids:
                label_ids[label] = curr_id
                curr_id += 1

            id = label_ids[label] 



            pil_image = Image.open(path).convert("L")
            image_array = numpy.array(pil_image, "uint8")

            final_image = cv2.resize(image_array, (550, 550), interpolation=cv2.INTER_AREA)
            equalized_image = cv2.equalizeHist(final_image)
            final_image = cv2.normalize(final_image, numpy.zeros((300, 300)), 0, 255, cv2.NORM_MINMAX)

            

            faces = face_cascade.detectMultiScale(image_array, scaleFactor = 1.1, minNeighbors = 10)

            for (x, y, width, height) in faces:
                roi = image_array[y:y+height, x:x+width]
                x_train.append(roi)
                y_labels.append(id)

print(len(x_train))

with open("labels.pickle", "wb") as f:
    pickle.dump(label_ids, f)

recognizer.train(x_train, numpy.array(y_labels))
recognizer.save("trainer.yml")

我也遇到了这个错误: 追溯(最近一次通话): 文件“d:\ProgrammingProjects\Python\FacialRegognition aces-train.py”,第 57 行,位于 recognizer.train(x_train, numpy.array(y_labels)) cv2.error: OpenCV(4.7.0) D: \opencv-python\opencv-python\opencv_contrib\modules ace\src\lbph_faces.cpp:362: error: (-210:Unsupported format or combination of formats) 空训练给出了数据。您将需要多个样本来学习模型。在函数'cv::face::LBPH::train'中

当它认出他是我时,我试图删除有我照片的文件夹,并希望它能认出他是他,然而,它开始抛出错误,我意识到它没有检测到他照片中的脸。

python opencv image-processing face-detection
© www.soinside.com 2019 - 2024. All rights reserved.