当前位置:   article > 正文

OpenCV程序练习(四):人脸识别_opencv中可以用来进行人脸训练的算法

opencv中可以用来进行人脸训练的算法

一、人脸检测

准备图片

代码

  1. import cv2
  2. img=cv2.imread("Faces.jpeg")
  3. faceCascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #加载级联分类器
  4. gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转为灰度模式
  5. faces=faceCascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(5,5)) #人脸检测
  6. print("发现{0}个人脸".format(len(faces)))
  7. #圆形标注检测到的人脸
  8. for(x,y,w,h) in faces:
  9. cv2.circle(img,(int((x+x+w)/2),int((y+y+h)/2)),int(w/2),(0,255,0),2)
  10. cv2.imshow("dect",img)
  11. cv2.waitKey(0)
  12. cv2.destroyAllWindows()

 运行结果

 程序分析

        本程序进行人脸检测时,使用了OpenCV中已经训练好的级联分类器haarcascade_frontalface_default.xml检测正面人脸,调用函数cv2.CascadeClassifier加载该级联分类器,然后使用函数faceCascade.detectMultiScale检测出图片中所有的人脸,该函数由分类器对象调用。

 

二、人脸识别

0、准备图片

1、LBPH人脸识别

代码

  1. import cv2
  2. import numpy as np
  3. #输入被比较人脸图片图片
  4. images=[]
  5. images.append(cv2.imread("Green1.jpeg",cv2.IMREAD_GRAYSCALE))
  6. images.append(cv2.imread("Green2.jpeg",cv2.IMREAD_GRAYSCALE))
  7. images.append(cv2.imread("WSC1.jpeg",cv2.IMREAD_GRAYSCALE))
  8. images.append(cv2.imread("WSC2.jpeg",cv2.IMREAD_GRAYSCALE))
  9. labels=[1,1,0,0] #添加标签
  10. recognizer=cv2.face.LBPHFaceRecognizer_create() #生成LBPH识别器实例模型
  11. recognizer.train(images,np.array(labels)) #训练数据
  12. predict_image=cv2.imread("dectGreen.jpeg",cv2.IMREAD_GRAYSCALE) #输入待识别人脸图片
  13. label,confidence=recognizer.predict(predict_image) #识别人脸
  14. print("label=",label)
  15. print("confidence=",confidence)

运行结果

2、EigenFaces人脸识别

代码

  1. import cv2
  2. import numpy as np
  3. #输入被比较人脸图片图片
  4. images=[]
  5. images.append(cv2.imread("PYY1.jpeg",cv2.IMREAD_GRAYSCALE))
  6. images.append(cv2.imread("PYY2.jpeg",cv2.IMREAD_GRAYSCALE))
  7. images.append(cv2.imread("WSC1.jpeg",cv2.IMREAD_GRAYSCALE))
  8. images.append(cv2.imread("WSC2.jpeg",cv2.IMREAD_GRAYSCALE))
  9. labels=[1,1,0,0] #添加标签
  10. recognizer=cv2.face.EigenFaceRecognizer_create() #生成特征脸识别器实例模型
  11. recognizer.train(images,np.array(labels)) #训练数据
  12. predict_image=cv2.imread("dectPYY.jpeg",cv2.IMREAD_GRAYSCALE) #输入待识别人脸图片
  13. label,confidence=recognizer.predict(predict_image) #识别人脸
  14. print("label=",label)
  15. print("confidence=",confidence)

运行结果

3、Fisherfaces人脸识别

代码

  1. import cv2
  2. import numpy as np
  3. #输入被比较人脸图片图片
  4. images=[]
  5. images.append(cv2.imread("PYY1.jpeg",cv2.IMREAD_GRAYSCALE))
  6. images.append(cv2.imread("PYY2.jpeg",cv2.IMREAD_GRAYSCALE))
  7. images.append(cv2.imread("WSC1.jpeg",cv2.IMREAD_GRAYSCALE))
  8. images.append(cv2.imread("WSC2.jpeg",cv2.IMREAD_GRAYSCALE))
  9. labels=[1,1,0,0] #添加标签
  10. recognizer=cv2.face.FisherFaceRecognizer_create() #生成Fisherfaces识别器实例模型
  11. recognizer.train(images,np.array(labels)) #训练数据
  12. predict_image=cv2.imread("dectPYY.jpeg",cv2.IMREAD_GRAYSCALE) #输入待识别人脸图片
  13. label,confidence=recognizer.predict(predict_image) #识别人脸
  14. print("label=",label)
  15. print("confidence=",confidence)

运行结果

4、程序分析

(1)三种人脸识别方法介绍

①LBPH(Local Binary Patterns Histogram , 局部二值模式直方图):
       使用的模型基于局部二值模式(Local Binary Patterns , LBP)算法。LBP最早是被作为一种有效的纹理描述算子提出的,在表述图像局部纹理特征上效果出众。

②EigenFaces:
       通常也被称为特征脸,它使用主成分分析(Principal Component Analysis , PCA)方法,将高维的人脸数据处理为低维数据(降维)后,再进行数据分析和处理,获取识别结果。

③Fisherfaces:
       采用线性判别分析(Linear Discriminant Analysis , LDA)方法实现人脸识别,也被称为“Fisher判别分析法”。

(2)label
       函数recognizer.predict在对一个待测人脸图像进行判断时,会寻找与当前图像距离最近的人脸图像。与哪个人脸图像最接近,就将待测图像识别为其对应的标签。

(3)confidence
置信度评分用来衡量识别结果与原有模型之间的距离。0表示完全匹配。
在LBPH中:通常情况下,认为小于50的值是可以接受的,如果该值大于80则认为差别较大。
在EigenFaces中:值通常在0~20000之间,只要低于5000都被认为是相当可靠的识别结果。
在Fisherfaces中:值通常在0~20000之间,只要低于5000都被认为是相当可靠的识别结果。

(4)特别注意
       使用LBPH人脸识别,对被比较图片和待识别图片为要求。但使用EigenFaces和Fisherfaces人脸识别,被比较图片和待识别图片必须为相同的size

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/278531
推荐阅读
相关标签
  

闽ICP备14008679号