基于Opencv的面部识别功能

之前跟老师一起做基于openCV相关的项目所做的一些笔记和学习用工具
如果你喜欢这篇文章不妨点个赞+关注,你的支持是我更新的动力

材料:win10的电脑、普通电脑摄像头 、python2.6

库文件:os、keras(以theano作为backend)、opencv、numpy、sklearn

Opencv采用了Haar分类器,其中Haar分类器是Boosting的一个应用,其中boosting算法的核心思想是将弱学习提升成为强学习算法。

弱学习:对一组概念的识别率只比随机识别高一点。

强学习:对一组概念的识别率很高(只要足够的数据,弱学习可变成强学习)。

原理:

本学习内容采用了以OpenCV、以theano为后台的keras深度学习框架为核心采用了python2.7编写,利用了图片是以像素构成,且将每个图片转化成为灰度图片,图片的每个位置表示的是一个像素值,0表示白色,1表示黑色,(0,1)的数值表示不同程度的灰色组成,以两层卷积和两层池化将每张图片进行分类,通过OpenCV的Haar分类器检测出摄像头所捕获到的图片并利用提训练好的haarcascade_frontalface_alt.xml模型直接使用来实现对人脸的检测。

第一步:

利用OpenCV和frontalface分类器剪切图片同时将文件转化为灰度图片保存在指定文件夹中,其中利用OpenCV2中的detectMultiScale函数检测出图片中所有的人脸,其中该部分通过外部函数引入读取图片,其具体功能理解已加注释

基于Opencv的面部识别功能_第1张图片
图1

第二步:

这部分涉及到神经卷积网络,建立一个基于CNN的人脸识别模型,同时模型进行存储和读取的地方应通过hdf5创建一个后缀为h5的model文件。详细创建如下

图2

在dataSet.py文件夹中储存的DataSet这个用于存储和格式化读取训练数据的类其指向的地址为获取到的灰度图片,在def train_model(self)中修改了loss的值等于squared_hinge,由于在执行此文件的时候会报错

图3

第三步:

创建摄像头识别模型,并再次利用OpenCV的haarcascade_frontalface_alt.xml文件对摄像头所捕获到的图形进行识别,同时读取dataset下的子文件。利用opencv的VideoCapture类来调用摄像头,其中prob功能是用于设置对摄像头识别出来的人脸进行对比,并设置显示为模型已有的label概率

基于Opencv的面部识别功能_第2张图片
图4

第四步:

得到图像如下,只添加了一个个人的模型进文件中

基于Opencv的面部识别功能_第3张图片
结果图

如果你喜欢这篇文章不妨点个赞+关注,你的支持是我更新的动力
需要源码不妨私聊我哦~我们一起交流一下

你可能感兴趣的:(基于Opencv的面部识别功能)