【计算机视觉40例】案例30:EigenFaces人脸识别

导读】本文是专栏《计算机视觉40例简介》的第30个案例《EigenFaces人脸识别》的简介,该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

大家可以在公众号“计算机视觉之光”回复关键字【案例30】获取本文案例的源代码及使用的测试图片等资料。

针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

本文简要介绍了本案例的一些基础知识,更详细的理论介绍、代码实现等内容请参考《计算机视觉40例简介》第26章《人脸识别》以获取更详细信息。

EigenFaces就是对原始数据使用PCA方法进行降维,获取其中的主成分信息,从而实现人脸识别的方法。

OpenCV通过函数cv2.face.EigenFaceRecognizer_create()生成EigenFaces特征脸识别器实例模型,然后应用函数cv2.face_FaceRecognizer.train()完成训练,最后用函数cv2.face_FaceRecognizer.predict()完成人脸识别。

在使用EigenFaces模块完成人脸识别时,其流程如图1所示。

【计算机视觉40例】案例30:EigenFaces人脸识别_第1张图片

图1 人脸识别流程

下面使用EigenFaces模块完成一个简单的人脸识别程序。

本例中用于学习的4幅人脸图像如图2所示,从左到右图像的名称分别为e01.png、e02.png、e11.png、e12.png。

【计算机视觉40例】案例30:EigenFaces人脸识别_第2张图片   

图2  用于学习的人脸图像

这4幅图像中,前两幅图像是同一个人,将其标签设定为“0”;后两幅图像是同一个人,将其标签设定为“1”。

在识别时,我们构架一个name=["first","second"]用来与上述标签对应,作为在人像上的辅助说明文字。也就是说:

  1. 当识别结果为标签0所对应的人时,在人像上添加辅助文字“first”(name[0]);
  2. 当识别结果为标签1所对应的人时,在人像上添加辅助文字“second”(name[1]);

当然,这里人像较小,文字较简单,我们可以根据需要调整图像大小,让其显示更为复杂的提示信息。

待识别的人脸图像如图3所示,该图像的名称为eTest.png。

【计算机视觉40例】案例30:EigenFaces人脸识别_第3张图片

图3   待识别的人脸图像

核心代码如下:

# -*- coding: utf-8 -*-
"""
Created on Sat Sep 29 21:33:03 2018

"""
# 读取训练图像
images=[]
images.append(cv2.imread("e01.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e02.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e11.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e12.png",cv2.IMREAD_GRAYSCALE))
# 给训练图像贴标签
labels=[0,0,1,1]
# 读取待识别图像
predict_image=cv2.imread("eTest.png",cv2.IMREAD_GRAYSCALE)
# 识别
recognizer = cv2.face.EigenFaceRecognizer_create()
recognizer.train(images, np.array(labels))  
label,confidence= recognizer.predict(predict_image) 
# 打印识别结果
print("识别标签label=",label)
print("置信度confidence=",confidence)
# 可视化输出
name=["first","second"]  
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(predict_image,name[label],(0,30), font, 0.8,(255,255,255),2)
cv2.imshow("result",predict_image)

运行程序,识别结果为:

识别标签label= 0

置信度confidence= 1600.5481032349048

从输出结果可以看到,eTest.png被识别为标签“0”所对应的人脸图像,即认为图像eTest.png与图像e01.png、e02.png中的人是同一个人。

同时,程序还会输出如图4所示窗口,在窗口显示了当前待识别人脸对应着标签“first”所对应的第一个人(标签0)。

【计算机视觉40例】案例30:EigenFaces人脸识别_第4张图片

图4  识别结果

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第26章《人脸识别》获取详细内容。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。
参考文献:

1、《计算机视觉40例——从入门到深度学习(OpenCV-Python)》,李立宗,电子工业出版社

你可能感兴趣的:(计算机视觉40例简介,计算机视觉,opencv,python,计算机视觉案例,计算机视觉40例)