人脸识别(二)——训练分类器

上一篇简单整理了下人脸识别的相关基础知识,这一篇将着重介绍利用pencv(2.4.9)已有的模型进行分类器训练。

一、关于ORL人脸数据库

ORL是一个40个人,每人采取10张人脸头像构成的一个人脸数据库,尺寸全部为92*112。分为40个文件夹,即每个文件夹中包含有10张人脸照片,为pgm格式。

其中s41为拍好并处理好的自己人脸图像。

值得一提的是,图片为pgm格式,许多软件无法读取,但是别忘了我们的opencv可是图片处理能力十分强大的噢!如果想看下这些人脸图是怎样的,可以使用opencv的imshow函数进行读取哦……

二、添加进自己的人脸数据

上面截图中可以看出,笔者采集了自己的照片,这一步需要有几个注意点:

1.放入的图片格式不一定要pgm格式

2.放入的图片尺寸大小一定要一致(92*112)

3.图片不需要自己一张张的拍摄,可以写一段程序进行拍摄,并进行预处理达到要求, 之后放到ORL库里一起整合。

参考拍照程序:(为方便截图取消了代码行隔开)

此程序拍得的照片已经将人脸处理成了92*112的大小。

三、利用已有模型进行训练

1. 一个小测试

笔者参照了不少博客大神,受益匪浅。在正式开始实践前,先做了个小测试,即用较少的人脸数据进行训练和识别测试。做小测试的时候,我是首先从ORL中选择了2个人的各自5张图片和自己的5张图片,共3个人15张人脸图片进行训练。(11-15.jpg对应的是我自己,即上图中1-5.jpg,此处人为复制出来进行命名进行小测试)

其中a1-a5对应一类(0),b1-b5对应一类(1 ),c1-c5对应一类(2),之后要做的就是将这些人脸图压进栈,即将照片(image.表示人脸图像)和标签(label表分类结果)下面以a类为例压进栈。

在之后就是模型的训练了,opencv自带的Facerecognizer类。其中有人脸识别接下来会用到的几个函数(train、load、save、predict)。

同时opencv自带了三个人脸识别算法:Eigenfaces,Fisherfaces 和局部二值模式直方图 (LBPH)。直接调用这三种算法很简单,一般都是三句话足够:

之后就可以直接测试了,以第一种模型为例:

2. 数据量较大的情况

小测试中共涉及了15张图片,即使让你人为命名写路径也不算很麻烦,可是人脸识别需要的数据往往很大,这就不可能说人为的去一张张图片的处理了。但是整体的流程和上面小测试是相同的,这里主要介绍一种csv文件的使用方法:

我们需要读取人脸和人脸对应的标签。直接在数据库中读取显然是低效的。所以我们用csv文件读取。csv文件中包含两方面的内容,一是每一张图片的位置所在,二是每一个人脸对应的标签,就是为每一个人编号。这个at.txt就是我们需要的csv文件。生成之后它里面是这个样子的:(指定到人脸存储路径即可)

这里网上有许多教程可以自动生成csv文件,笔者是直接下载别人的,然后查找替换成自己路径下即可,关键我们要学会的是怎么利用csv文件去访问图片和标签。

这里可以参考笔者的程序,先定义子函数,之后在主程序中调用即可:

之后便是一些处理,将摄像头采集到的图像检测出人脸,再将人脸处理成指定格式,调用predict函数进行识别,和库内数据比较即可。

具体全面的程序和项目代码将在下一篇给出!

原文发布于微信公众号 - 小小詹同学(xiaoxiaozhantongxue)

原文发表时间:2018-01-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 如何在浏览器使用synaptic.js训练简单的神经网络推荐系统

40440
来自专栏PPV课数据科学社区

TensorFlow必知基础知识​

TensorFlow概要 Google第一代分布式机器学习框架DistBelief1,在内部大规模使用后并没有选择开源。而后第二代分布式机器学习系统Tenso...

45660
来自专栏XAI

Java分布式神经网络库Deeplearning4j 环境搭建和运行一个例子

DeeplearningforJava简单介绍: deeplearning4j是一个Apache 2.0-licensed,开源的,分布式神经网络库编写的jav...

48280
来自专栏企鹅号快讯

基于自搭建BP神经网络的运动轨迹跟踪控制(二)

1 前言 朋友们~好久没见~。在上一篇基于自搭建BP神经网络的运动轨迹跟踪控制(一)中,首次给大家介绍了如何将BP神经网络模型用于运动控制,并基于matlab做...

30590
来自专栏机器之心

开源 | 深度安卓恶意软件检测系统:用卷积神经网络保护你的手机

选自GitHub 机器之心编译 参与:Panda 恶意软件可以说是我们现代生活的一大威胁,为了保护我们电子设备中的财产和资料安全,我们往往需要寻求安全软件的帮助...

31270
来自专栏云时之间

深度学习与神经网络:基于自建手写字体数据集上的模型测试

在上一篇文章中,我们使用mnist数据集去做了一个识别的小型神经网络,在今天的这篇文章里,我们将要通过使用自建数据集去检验上一篇文章的模型,从而真正的可以去应用...

94770
来自专栏YoungGy

ML基石_9_LinearRegression

linear regression problem linear regression algorithm 优化问题 求梯度 算法 generalization...

25860
来自专栏SIGAI学习与实践平台

【免费线上实践】动手训练模型系列:条件GAN

从无序的输出到按照类别输出,Conditional Generative Neural Networks到底借助了什么样的魔(xin)法(xi)?点击下方小程序...

14850
来自专栏新智元

【代码+教程】重现“世界模型”实验,无监督方式快速训练

13720
来自专栏AI科技大本营的专栏

重磅消息 | 深度学习框架竞争激烈 TensorFlow也支持动态计算图

今晨 Google 官方发布消息,称 TensorFlow 支持动态计算图。 原文如下: 在大部分的机器学习中,用来训练和分析的数据需要经过一个预处理过程,输入...

28450

扫码关注云+社区

领取腾讯云代金券