一、前言
之前基于OpenCV断断续续写了几篇关于人脸识别的博客。最开始是写了三篇一系列整套的流程。后来由于问问题的人太多,就又针对一些问题写了些东西,后来OpenCV3出来之后把程序又改成了OpenCV3版本。并且把程序修改的极其容易上手运行,我觉得改的不能更简单了,因为配置好之后其实修改下路径只需要点运行就差不多了。再后来,OpenCV3.3出来之后,人脸识别模块的API发生了变化,于是继续写出来通知大家。但是由于很多人看博客的时候只是看了最初的三篇,而且有些人没有看完之后再去看作者其他文章的习惯,所以会问一些已经解决的问题。本文中我把所有的有用的文章整合起来,以方便大家查阅。
二、经常需要解释的东西
OpenCV先有的三种人脸识别方法是非常经典但是也是非常传统的基于特征的方法,这就意味着,它的正确率不会太高,而且对于场景要求比较严格。说白了,OpenCV的人脸识别程序仅仅能够满足大家的学习需要,能够让大家知道做人脸识别的流程和框架。如果真要做考勤系统或者说人脸识别打卡这些商用的或者产品级东西,光靠本博客的内容是远远不够的。还需要在这个框架下做许多细节优化的东西。当然,真正需要做产品的人估计也不会来我这里看OpenCV学习的内容了。本博客只保证在同一场景下(训练图片和测试图片在同一场景)有较好的识别率。如果还要深入研究的朋友,请学习了传统方法之后,继续研究基于深度学习的方法。
OpenCV2、3、3.3人脸识别部分的API均有所变化,如果遇到不能识别人脸识别模块某些函数(只是某些不是所有,不然就是配置问题了)的问题,应该根据自己配置的OpenCV版本,查看本版本的API,然后修改我的代码。
OpenCV一定要配置编译了contrib模块的,配置的时候记得添加环境变量,最后重启电脑。
三、人脸识别系列博客整理
Visual Studio 2015一分钟配置opencv及CMake编译OpenCV3.1(含opencv-contrib)
OpenCV实践之路——人脸识别之一数据收集和预处理
OpenCV实践之路——人脸识别之二模型训练
OpenCV实践之路——人脸识别之三识别自己的脸
OpenCV之识别自己的脸——C++源码放送
人脸识别源码运行指南
OpenCV3.3人脸识别模块的API的变化
四、下面的话适合运行成功之后再看
常言道,授之以鱼不如授之以渔,希望大家能在本系列学习的过程中学习到一些属于自己的东西,而不是仅仅是能够运行成功别人的程序。
学习别人的程序的一种好方法是自己再敲一遍,很多直接运行的时候遇到的问题,也许再敲一遍之后,就不再是问题了。
而且,本文提供的方法参考的是OpenCV官方教程中的方法,这种方法我认为是不太友好的,毕竟里面用到了Python脚本和at.txt这种东西,我觉得这些东西都是非必要的,完全可以用C++程序完成Python和at.txt的功能。实际上,我也这么尝试了,完全是可行的,纯C++程序,无需Python和at.txt这种不太友好的东西。大家可以学习完之后把这个当成一个练习来做。而且里面用到的相关技术我也已经发到博客里了。这个我就不喂到嘴里了,感兴趣的可以自己找找。
如果你真的做了以上工作还有兴趣的话,我推荐你去深入了解下OpenCV人脸识别几种方法的原理,然后去读OpenCV人脸识别部分的源代码。
如果你真的做了以上工作还有兴趣,我推荐你摆脱OpenCV的contrib模块,自己重新实现一个人脸识别模块出来。实现的时候可以尝试不同的方法,比如尝试不同的特征,尝试不同的相似性度量方法,或者尝试不同的框架,比如LBP+SVM。笔者读完源码之后,基于源码尝试重新实现了LBP人脸识别方法,然后又尝试了LBP+SVM进行人脸识别。对于人脸识别以及其他任何东西的识别方法都有了更深的理解。
如果你的研究课题或者工作内容就是人脸识别,那么肯定的,你需要转向深度学习进行人脸识别方法了。这个由于我的研究方向不是这个,研究不深,只是指个方向。
现在事情太多时间紧张,很多东西暂时没时间写出来。以后有时间的话再说。
五、欢迎关注公众号和知识星球
知识星球发一些我自己平时遇到不足以成文的小问题解答和我平时学习的时候遇到的好的资料。
领取专属 10元无门槛券
私享最新 技术干货