一、人脸检测

准备图片

代码

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

运行结果

程序分析

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

二、人脸识别

0、准备图片

1、LBPH人脸识别

代码

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

运行结果

2、EigenFaces人脸识别

代码

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

运行结果

3、Fisherfaces人脸识别

代码

import cv2
import numpy as np #输入被比较人脸图片图片
images=[]
images.append(cv2.imread("PYY1.jpeg",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("PYY2.jpeg",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("WSC1.jpeg",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("WSC2.jpeg",cv2.IMREAD_GRAYSCALE))
labels=[1,1,0,0] #添加标签 recognizer=cv2.face.FisherFaceRecognizer_create() #生成Fisherfaces识别器实例模型
recognizer.train(images,np.array(labels)) #训练数据
predict_image=cv2.imread("dectPYY.jpeg",cv2.IMREAD_GRAYSCALE) #输入待识别人脸图片
label,confidence=recognizer.predict(predict_image) #识别人脸 print("label=",label)
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

OpenCV程序练习(四):人脸识别的更多相关文章

  1. python之OpenCv(四)---人脸识别

    对特定图像进行识别,最关键的是要有识别对象的特征文件.OpenCV已经内置了人脸识别特征文件,我们只要使用OpenCV的CascadeClassifier类即可进行识别. 语法: https://gi ...

  2. python与opencv的结合之人脸识别值

    首先还是要感谢http://www.jb51.net/article/67392.htm这位大神的无私奉献,开源的代码,让我省去了很多事,但是就光系统环境的配置就花去了我将近一个星期的时间,真是不容易 ...

  3. 使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  4. OpenCV学习 物体检测 人脸识别 填充颜色

    介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...

  5. 利用face_recognition,dlib与OpenCV调用摄像头进行人脸识别

    用已经搭建好 face_recognition,dlib 环境来进行人脸识别 未搭建好环境请参考:https://www.cnblogs.com/guihua-pingting/p/12201077. ...

  6. opencv+python3.4的人脸识别----2017-7-19

    opencv3.1  +  python3.4 第一回合(抄代码,可实现):人脸识别涉及一个级联表,目前能力还无法理解. 流程:1.读取图像---2.转换为灰度图---3.创建级联表---4.对灰度图 ...

  7. opencv SVM多分类 人脸识别

    上一篇介绍了OPENCV中SVM的简单使用,以及自带的一个二分类问题. 例子中的标签是程序手动写的,输入也是手动加的二维坐标点. 对于复杂问题就必须使用数据集中的图片进行训练,标签使用TXT文件或程序 ...

  8. java+opencv+intellij idea实现人脸识别

    首先当然是需要安装opencv了,我用的是opencv2.4.13.下载完之后就可以直接安装了,安装过程也很简单,直接下一步下一步就好,我就不上图了. 接下来在opencv下找到jar包,比如我直接安 ...

  9. ios OpenCv的配置和人脸识别技术

    作为一个好奇心非常重的人,面对未知的世界都想去一探到底. 于是做了个人脸识别的demo. 眼下国内的关于opencv技术文章非常少.都是互相抄袭.关键是抄个一小部分还不全.时间又是非常久之前的了,和如 ...

  10. Opencv级联分类器实现人脸识别

    在本章中,我们将学习如何使用OpenCV使用系统相机捕获帧.org.opencv.videoio包的VideoCapture类包含使用相机捕获视频的类和方法.让我们一步一步学习如何捕捉帧 - 第1步: ...

随机推荐

  1. Java ”框架 = 注解 + 反射 + 设计模式“ 之 反射详解

    Java "框架 = 注解 + 反射 + 设计模式" 之 反射详解 每博一文案 无论幸福还是苦难,无论光荣还是屈辱,你都要自己遭遇与承受. ------ <平凡的世界> ...

  2. 最好用的AI换脸软件,rope下载介绍(支持cpu)

    随着AI技术的广泛运用,市面上的换脸软件也多了起来,今天给各位介绍其中的王者Rope! 先上两个动图,给大伙看看效果 rope是如何实现这种自然的效果呢?这得益于机器学习技术的不断发展,rope经过深 ...

  3. windows安装nginx可视化工具nginxWebUI

    一.官网下载ngixn * 官网地址<http://nginx.org/> 选取稳定版(Stable Version)二.解压压缩包三.启动Nginx1.进入安装目录下,找到nginx.e ...

  4. Vue+springboot集成PageOffice实现在线编辑Word、excel文档

    说明: PageOffice是一款在线的office编辑软件,帮助Web应用系统或Web网站实现用户在线编辑Word.Excel.PowerPoint文档.可以完美实现在线公文流转,领导批阅,盖章.可 ...

  5. k8s快捷命令

    查看node使用率: for i in `kubectl get nodes|awk '{print $1}'|sed '1d'`;do  echo "=========>" ...

  6. docker --link容器互联

    目录 一.系统环境 二.docker容器互联概述 2.1 docker容器互联的三种方式 2.2 docker --link使用注意事项 2.3 docker --link原理 三.docker容器互 ...

  7. vue.js的M-V-VM思想

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式. Model 指代的就是vue对象的data属性里面的数据.这里的数据要显示到页面中. View 指代的就 ...

  8. WPF使用WPFMediaKit/AForge调用摄像头示例 .net core 8.0 也支持

    调用摄像头使我们经常会用到的一个功能,可以根据摄像头捕捉到的图像进行分析处理来做很多的东西,比如电子档案.图像识别.AI分析等等. 本示例中主要介绍Nuget最常用的两个调用摄像头的轮子 WPFMed ...

  9. iOS手工Crash解析

    一.测试导出来一份ips crash文件,现在需要进行手工解析 现在需要下载对应的dsym文件,为了确定下载好的dsym文件和crash log是不是一致的,可以先看下dsym文件中的uuid p.p ...

  10. Xcode 最近使用的一些问题

    1.上架的App如何测试推送? 苹果的证书分为开发证书和发布证书,上架AppStore的App应该使用发布证书进行配置,但是发布证书编译出包的App无法安装到手机上 只有一种方式,采用Ad hoc p ...