python - 使用 LBPHFaceRecognizer 的人脸识别总是预测为同一个人。即使匿名人面对相机?

标签 python opencv face-recognition

我有自己的数据集。

当我走到相机前时,我的代码运行完美。但是我又用程序预测的未知人物再次测试我。它应该返回 -1 或 null !!!

我在 python3 和来自 opencv 的最新版本的 cv2 中运行。

->检测器.py

import cv2,os
import numpy as np
from PIL import Image 
import pickle,time

# Root directory
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))

recognizer = cv2.face.LBPHFaceRecognizer_create()#cv2.createLBPHFaceRecognizer()
recognizer.read('trainer/trainer.yml')
cascadePath = "Classifiers/face.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
path = 'dataSet'

cam = cv2.VideoCapture(0)
print(cam.isOpened())
#font = cv2.InitFont(cv2.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 1, 1)

#Creates a font
font = cv2.FONT_HERSHEY_SIMPLEX

while True:
    ret, im =cam.read()
    print('im: ',im,' ;ROOT_DIR:',ROOT_DIR)
    print('ret: ',ret)
    gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
    faces=faceCascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(100, 100), flags=cv2.CASCADE_SCALE_IMAGE)
    for(x,y,w,h) in faces:
        nbr_predicted, conf = recognizer.predict(gray[y:y+h,x:x+w])
        cv2.rectangle(im,(x-50,y-50),(x+w+50,y+h+50),(225,0,0),2)
        print("nbr_predicted: ",nbr_predicted)
        if(nbr_predicted==7 or nbr_predicted==8):
             nbr_predicted='Vishesh 1'
        else:
            nbr_predicted="Unknown Person"
        cv2.putText(im,str(nbr_predicted)+"--"+str(conf), (x,y+h),font, 0.8, (0, 255, 0), 2, cv2.LINE_AA) #Draw the text
        cv2.imshow('im',im)
        cv2.waitKey(10)

只有中间的人必须是 Vishesh。但即使是我的兄弟也被预测为 Vishesh。这可能哪里出错了??

enter image description here

最佳答案

ecognizer.predict(gray[y:y+h,x:x+w]) 返回预测索引,该索引显示训练集中的人数以及训练集中所有具有置信度的人的置信度值(value)。 由于你的照片是训练集中唯一的一张照片,它返回的 nbr_predicted 始终是你的 ID,置信度显示图像发送到预测函数的“概率”是你。 因此将您的代码更新为:

    if(nbr_predicted==7 and conf<120):
         nbr_predicted='Vishesh 1'
    else:
        nbr_predicted="Unknown Person"

置信度值通常取决于您的数据,但越低越好。 你应该调整阈值

关于python - 使用 LBPHFaceRecognizer 的人脸识别总是预测为同一个人。即使匿名人面对相机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48790989/

相关文章:

php - 使用php进行人脸识别

python - AWS Kinesis 消费者 Python 3.4 Boto

python - opencv中具有一定像素高度、宽度的视频

api - 如何为媒体分析引擎设计 RESTful API

c++ - Visual Studio 2015 错误 C4996 'std::_Copy_impl' : Function call with parameters that may be unsafe

python - 在Python中查找圆函数和中心

opencv - 使用 Opencv 进行人脸识别

python - ValueError : No such renderer factory . mak - Python Pyramid 错误

python - 将字典列表作为 csv 直接写入 S3

Python:使用shiftgrid改变经度