经过4个多月的努力,最终将刘小明博士的论文《Video-based face recognition using adaptive hidden markov models》给实现了。其实核心的部分都是用了open source的函数库,感谢那些开源的伟大的牛叉的友好的外籍人士。下面就将这个系统的实现过程在这里公布,如果对浏览者有帮助,我将会感到无比的自豪与高兴。同样,我不想这个被用于商业用途。

     首先介绍下这个系统的实现所需要的技术支持。

    Opencv的哈尔检测,人脸识别,肯定需要先检测出图像中的人脸,Opencv是一个强大的图像处理的c++函数库,功能十分牛逼,开源免费的,你可以再sourceforge网站上找到他的源代码,然后根据网上的教程安装即可。

    CMU FACEDETECT函数库,这个是卡内基梅隆大学开发的人脸检测函数库,听名字跟哈尔检测有冲突了,但是我这个系统中只是用到了其中人眼定位的功能,后面会介绍为何需要人眼定位。

    人脸有效部位的截取,这部分就需要人眼的定位了,在前面人脸检测出来后,利用CMU的人眼定位,再经过此步骤的人脸不为截取,这样你就获得了图像中最有价值的人脸区域了!!!在接下来的主成分分析降维的时候,你获得数据将会是最可靠的。从而提高了整个系统的识别率。

    Opencv的主成分分析的函数,这个是对你获得的人脸图像进行降维。

    htkwrite这个函数可以再HTK的官网上下载到,不过你要进行部分源代码的调整,这样才能使用。

    HTK工具,这个牛逼了,是此系统的核心!模型的训练与识别都是靠这个了。

    工具与函数库都介绍完了,那我就来介绍我的识别与训练过程了。

    识别过程:

    首先利用哈尔检测进行图像的人脸检测,这样就可以在图像中把人脸的区域给截取出来,而后再利用人眼定位在截取出来的图像中精确定位人眼,保存人眼坐标,以便接下来的人脸有效部位的截取。接下来就是利用一个已成型的EMBG系统还是EGBM系统(我忘了。。。。。。)进行人脸有效部位截取。而后传给主成分分析函数进行降维处理。再传给htkwrite进行HTK数据的头添加,因为HTK他要求数据必须要有他自己认可的数据头,才能进行处理。接下来,你就可以利用网上可搜索到的HTK的训练与识别教程进行模型的训练与识别了。

    还有最重要的!那就是数据如何规制。我的隐马尔科夫模型采用的是45个状态,14张图作为一组观察数据进行训练与识别的。源代码我会留在附件中,另外还会留一个使用文档。千万不要再1.5GHZ以下的CPU上跑,估计会很卡很卡很卡!我个人在Z510P上跑过,惨不忍睹,当然你能进行优化。