当前位置:   article > 正文

(二)疲劳驾驶检测---OpenCV其中三种人类识别器Eigenfaces、FisherFace、LBPHFace_lbph eigenfishfaces fisherfaces

lbph eigenfishfaces fisherfaces

1、Eigenfaces人脸识别器:

Eigenface也叫做“特征脸”,通过PCA(主要成分分析)方法将人脸数据转换到另外一种空间维度做相似性运算。在计算过程中,算法可以忽略一些无关紧要的数据,仅识别一些具有代表性的特征数据,最后根据这些特征识别人脸。

(1)创建Eigenfaces人脸识别器:

# num_components:可选参数,PCA方法中保留的分量个数,建议使用默认值。threshold:可选参数,人脸识别器使用的阔值,建议使用默认值
recognizer = cv2.FaceRecognizerSF_create(num_components, threshold) 
  • 1
  • 2

(2)对创建识别器对象后,需用通过对对象的train()方法训练识别器(每个人建议给出2张人脸图像以上作为训练样本),每个图像的尺寸分辨率都需要一致,不然训练不了。

# src:用来训练的人脸图像样本列表,格式为list。样本图像宽、高一致。labels:样本对应的标签,格式为数组,元素类型为整数。数组长度必须与样本列表长度相同,样本与标签一一对应。
recognizer.train(src, labels)
  • 1
  • 2

(3)训练识别器后通过识别器的predict()方法识别人脸,与样本对比,给出最相近的结果和评分。

# 训练识别器后通过识别器的predict()方法识别人脸
# src:需要识别的人脸图像(该图像宽、高必须与样本一致);label:与样本匹配度最高的标签值;confidence:匹配度最高的评分(评分<5000匹配程度较高,0分表示2张图片完全一样)
label, confidence = recognizer.predict(src)
  • 1
  • 2
  • 3

(4)Eigenfaces分类器代码:

import cv2
import numpy as np

photos = list()     # 样本图像列表
lables = list()     # 标签列表

# append()函数只适用于列表list(),对于字典、元组或者集合需要转换成list类型
photos.append(cv2.imread("images\\hdy\\Elvis1.png", 0))   # 记录Elvis1人脸照片
lables.append(0)     # Elvis11对应的标签
photos.append(cv2.imread("images\\hdy\\Elvis2.png", 0))   # 记录Elvis2人脸照片
lables.append(0)     # Elvis12对应的标签
photos.append(cv2.imread("images\\hdy\\Elvis3.png", 0))   # 记录Elvis3人脸照片
lables.append(0)     # Elvis13对应的标签

photos.append(cv2.imread("images\\hdy\\summer1.png", 0))   # 记录summer1人脸照片
lables.append(1)     # summer1对应的标签
photos.append(cv2.imread("images\\hdy\\summer2.png", 0))   # 记录summer2人脸照片
lables.append(1)     # summer2对应的标签
photos.append(cv2.imread("images\\hdy\\summer3.png", 0))   # 记录summer3人脸照片
lables.append(1)     # summer3对应的标签

names = {"0":"Elvis", "1":"summer"}    # 标签对应的名称字典

# 下面是OpenCV级联分类器中
recognizer = cv2.face.EigenFaceRecognizer_create()    # 创建EigenFace特征脸识别器
# recognizer = cv2.face.FisherFaceRecognizer_create()   # 创建FisherFace特征脸识别器
# recognizer = cv2.face.LBPHFaceRecognizer_create()       # 创建FisherFace特征脸识别器

# 要确保需要训练的照片的尺寸大小一致,不然不可以训练
recognizer.train(photos, np.array(lables))   # 识别器开始训练

i = cv2.imread("images\\hdy\\summer4.png", 0)   # 待识别的人脸图像summer4.png
label, confidence = recognizer.predict(i)   # 识别器开始分析人脸图像(label:标签;confidence:置信度)
print("confidence = " + str(confidence))  # 打印置信度
print(names[str(label)])    # 数组字典中里标签对应的名字
cv2.waitKey()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

运行结果
在这里插入图片描述

(4)FisherFace分类器代码:

FisherFace通过LDA(线性判别分析技术)方法将人脸数据转换到另外一个空间维度做投影计算,最后根据不同人脸数据得投影距离判断其相似度。

import cv2
import numpy as np

photos = list()     # 样本图像列表
lables = list()     # 标签列表

# append()函数只适用于列表list(),对于字典、元组或者集合需要转换成list类型
photos.append(cv2.imread("images\\hdy\\Elvis1.png", 0))   # 记录Elvis1人脸照片
lables.append(0)     # Elvis11对应的标签
photos.append(cv2.imread("images\\hdy\\Elvis2.png", 0))   # 记录Elvis2人脸照片
lables.append(0)     # Elvis12对应的标签
photos.append(cv2.imread("images\\hdy\\Elvis3.png", 0))   # 记录Elvis3人脸照片
lables.append(0)     # Elvis13对应的标签

photos.append(cv2.imread("images\\hdy\\summer1.png", 0))   # 记录summer1人脸照片
lables.append(1)     # summer1对应的标签
photos.append(cv2.imread("images\\hdy\\summer2.png", 0))   # 记录summer2人脸照片
lables.append(1)     # summer2对应的标签
photos.append(cv2.imread("images\\hdy\\summer3.png", 0))   # 记录summer3人脸照片
lables.append(1)     # summer3对应的标签

names = {"0":"Elvis", "1":"summer"}    # 标签对应的名称字典

# 下面是OpenCV级联分类器中
# recognizer = cv2.face.EigenFaceRecognizer_create()    # 创建EigenFace特征脸识别器
recognizer = cv2.face.FisherFaceRecognizer_create()   # 创建FisherFace特征脸识别器
# recognizer = cv2.face.LBPHFaceRecognizer_create()       # 创建FisherFace特征脸识别器

# 要确保需要训练的照片的尺寸大小一致,不然不可以训练
recognizer.train(photos, np.array(lables))   # 识别器开始训练

i = cv2.imread("images\\hdy\\summer4.png", 0)   # 待识别的人脸图像
label, confidence = recognizer.predict(i)   # 识别器开始分析人脸图像
print("confidence = " + str(confidence))  # 打印评分
print(names[str(label)])    # 数组字典中里标签对应的名字
cv2.waitKey()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在这里插入图片描述

(4)FisherFace分类器代码:

Local BInary Pattern Histogram (LBPH),即二进制模式直方图,善于捕捉局部纹理特征。Eigenfaces和Fisherfaces人脸识别算法都受光线影响,在现实生活中,我们无法保证完美的光照条件。 LBPH人脸识别器是克服这个缺点的一种改进。

在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np

photos = list()     # 样本图像列表
lables = list()     # 标签列表
photos.append(cv2.imread("images\\hdy\\hdy1.png", 0))   # 记录hdy1人脸照片
lables.append(0)     # hdy1对应的标签
photos.append(cv2.imread("images\\hdy\\hdy2.png", 0))   # 记录hdy2人脸照片
lables.append(0)     # hdy2对应的标签
photos.append(cv2.imread("images\\hdy\\hdy3.png", 0))   # 记录hdy3人脸照片
lables.append(0)     # hdy3对应的标签

photos.append(cv2.imread("images\\hdy\\pig1.png", 0))   # 记录pig1人脸照片
lables.append(1)     # pig1对应的标签
photos.append(cv2.imread("images\\hdy\\pig2.png", 0))   # 记录pig2人脸照片
lables.append(1)     # pig2对应的标签
photos.append(cv2.imread("images\\hdy\\pig3.png", 0))   # 记录pig3人脸照片
lables.append(1)     # pig3对应的标签

names = {"0":"hdy", "1":"pig"}    # 标签对应的名称字典

# 下面是OpenCV级联分类器中
# recognizer = cv2.face.EigenFaceRecognizer_create()    # 创建EigenFace特征脸识别器
# recognizer = cv2.face.FisherFaceRecognizer_create()   # 创建FisherFace特征脸识别器
recognizer = cv2.face.LBPHFaceRecognizer_create()       # 创建FisherFace特征脸识别器

# 不一定需要训练的照片的尺寸大小一致,都可以训练
recognizer.train(photos, np.array(lables))   # 识别器开始训练

i = cv2.imread("images\\hdy\\pig4.png", 0)   # 待识别的人脸图像
label, confidence = recognizer.predict(i)   # 识别器开始分析人脸图像
print("confidence = " + str(confidence))  # 打印评分
print(names[str(label)])    # 数组字典中里标签对应的名字
cv2.waitKey()
cv2.destroyAllWindows()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述

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

闽ICP备14008679号