我尝试使用OpenCV提供的文档进行人脸识别。它可以很好地检测多个人脸,但是网站上没有关于3D物体检测或头部跟踪的数据。以下是代码和维基链接: 人脸识别 级联分类器 虽然Wiki提供了足够的关于人脸检测的信息,但是如您所见,未提供3D人脸识别方法。 我想了解与3D人脸识别和跟踪相关的项目,以便查看源代码,并尝试制作相同的项目。
这可能有些晚了,但 Willow Garage 还有另一个名为点云库(Point Cloud Library,PCL)的项目,专门用于 3D 数据处理任务。人脸识别是他们用来推广该项目的其中之一。当然,所有这些都是免费的... http://pointclouds.org
自OpenCV 2.4.2以来,已经有一个用于人脸检测和跟踪的头文件:opencv2/contrib/detection_based_tracker.hpp 该头文件定义了一个名为DetectionBasedTracker的类。它定义的跟踪机制在后台使用haar级联来检测对象。跟踪比OpenCV Haar实现快得多(但是,一些人发现其准确性较低)。我个人在Android设备上发现它工作得非常好。一些实现人脸检测和跟踪的示例代码可以在此处找到: http://bytesandlogics.wordpress.com/2012/08/23/detectionbasedtracker-opencv-implementation/
你应该看一下主动形状模型和主动外观模型,它们是你所描述的任务的模型。 OpenCV只提供2D检测方法,而参考文献中的方法(现在在该领域非常流行)跟踪分布在脸上的一组3D点以及描述其外观的纹理。 维基百科页面会给你一些实现这些方法的链接。 如果你想知道头部在世界坐标系中的3D参数(例如用于凝视检测),那么你应该搜索关键词“3D头部跟踪”和“头部姿态估计”。
有很多方法。我只能指导你正确的方向。人脸识别示例通常提供眼睛的子检测。因此,您实际上知道面部和眼睛的位置。通过类似或其他方式,您还可以检测嘴唇。 现在,当您至少拥有对象(这次是面部)的三个点时,您可以使用三角测量计算其在房间中的3D位置。此示例的一部分存在于随OpenCV一起提供的find_obj.cpp中。只是这个示例使用来自SURF的x点,并基于此信息绘制矩形。还要查看CvFindHomography的其他内容。