我研究了微软提供的Kinect SDK和Toolkit。测试了人脸检测示例,成功运行。但是,如何识别这些脸?我了解OpenCV(VS2010)的基础知识。是否有适用于人脸识别的Kinect库?如果没有,有哪些可能的解决方案?是否有任何使用Kinect进行人脸识别的教程可用?
我研究了微软提供的Kinect SDK和Toolkit。测试了人脸检测示例,成功运行。但是,如何识别这些脸?我了解OpenCV(VS2010)的基础知识。是否有适用于人脸识别的Kinect库?如果没有,有哪些可能的解决方案?是否有任何使用Kinect进行人脸识别的教程可用?
我一直在自己研究这个。起初,我只是将Kinect用作网络摄像头,并将数据传递到一个识别器中,该识别器是基于此代码模型构建的(使用Emgu CV进行PCA):
http://www.codeproject.com/Articles/239849/Multiple-face-detection-and-recognition-in-real-ti
虽然那个方法还可以,但我认为我可以做得更好,因为Kinect有如此强大的面部跟踪功能。最终我使用Kinect来找到面部边界、裁剪它,并将其传入该库进行识别。我已经整理了代码并在Github上发布,希望能对其他人有所帮助:
我找到了一个对您有用的项目 - http://code.google.com/p/i-recognize-you/,但不幸的是(对于您来说),它的主页不是英文的。最重要的部分:
- 该项目(包括源代码)位于http://code.google.com/p/i-recognize-you/downloads/list
- 在参考文献中,作者提到了这个网站 - http://www.shervinemami.info/faceRecognition.html。这似乎是一个很好的起点。
Kinect没有内置的面部识别功能。我不知道是否有任何相关教程,但我相信肯定有人尝试过。这在我的待办清单上,希望很快能有时间。
我建议保存面部跟踪信息,并将其与已有信息进行比较以实现识别。您可以编写一个“设置”函数,要求用户盯着Kinect,然后保存面部跟踪器返回给您的点。当您希望识别一个面孔时,用户会看着屏幕,然后将面部跟踪器点与面部数据库进行比较。这大致是Xbox使用的方法。
关键问题在于置信度水平。数字不会完全像之前那样返回,因此您需要为每个特征包含值缓冲区——代码将会返回“我有93%的把握这是Bob”之类的结果。