OpenCV 3.0中的人脸地标提取。有人能推荐一些好的开源库,让我可以提取面部标志吗?

OpenCV 3.0中的人脸地标提取。有人能推荐一些好的开源库,让我可以提取面部标志吗?,opencv,c++11,opencv3.0,Opencv,C++11,Opencv3.0,我目前正在使用OpenCV3.0,希望我能够创建一个可以做3件事的程序。首先,在实时视频提要中查找人脸。其次,使用ASM或AAM提取人脸标志点的位置。最后,利用支持向量机对视频中人脸的表情进行分类 我对此做了大量的研究,但找不到最合适的开源AAM或ASM库来完成此功能。此外,如果可能的话,我希望能够训练AAM或ASM提取我需要的特定面部标志。例如,下面链接的图片中的所有编号点: 如果有任何替代方案,我已经建议获得所需的功能,那么请随时向我建议 提前感谢您的回答,欢迎所有建议帮助我完成此项目。A

我目前正在使用OpenCV3.0,希望我能够创建一个可以做3件事的程序。首先,在实时视频提要中查找人脸。其次,使用ASM或AAM提取人脸标志点的位置。最后,利用支持向量机对视频中人脸的表情进行分类

我对此做了大量的研究,但找不到最合适的开源AAM或ASM库来完成此功能。此外,如果可能的话,我希望能够训练AAM或ASM提取我需要的特定面部标志。例如,下面链接的图片中的所有编号点:

如果有任何替代方案,我已经建议获得所需的功能,那么请随时向我建议


提前感谢您的回答,欢迎所有建议帮助我完成此项目。

AAM和ASM都是非常老派的,结果有点令人失望

大多数面部地标跟踪器使用层叠贴片或深度学习。您有一个DLib,它的性能非常好(+BSD许可证),在github上有一些其他的DLib,或者一些API,可以免费使用


您还可以看看我使用的C++/OpenCV/DLib以及您引用的所有功能,这些功能都非常实用。

我建议您使用该库。它是用C++编写的,使用OpenCV 2。您不会对此感到失望。

在评论中,我看到您选择使用dlib库培训自己的人脸地标检测器。关于dlib使用什么训练集生成他们提供的“shape_predictor_68_face_landmarks.dat”模型,您有一些问题

一些建议:

  • 作者(Davis King)表示,他使用了iBUG 300-W数据集中的注释图像。该数据集共有11167张图像,使用68点约定进行注释。作为一个标准技巧,他还镜像每个图像以有效地将训练集的大小增加一倍,即11167*2=22334个图像。以下是指向数据集的链接:
    • 注:iBUG 300-W数据集包括两个非免费/公开的数据集:XM2VTS和FRGCv2。不幸的是,这些图像占ibug 300-W的大多数(7310张图像,或65.5%)
    • 原始论文仅针对HELEN、AFW和LFPW数据集进行了培训。因此,您应该能够仅在公开可用的图像(HELEN、LFPW、AFW、IBUG)上生成一个相当好的模型,即3857图像。
      • 如果你在谷歌上搜索“一毫秒人脸对齐卡泽米”,这篇论文(和项目页面)将是最热门的
通过阅读dlib博客文章的评论部分,您可以了解更多有关培训过程的详细信息。特别是,他简要讨论了他为培训选择的参数:

考虑到训练集的大小(数千张图像),我认为仅凭少量图像无法获得可接受的结果。幸运的是,有许多公开的人脸数据集,包括上面链接的数据集:)

希望有帮助

  • 尝试Stasm4.0.0。它在脸上给出了大约77个点

规则。您还可以传递它cv::Mat和一个用于te检测的Rect。@berak我想知道为什么这么好的工具不受欢迎,但后来我看到它出现在SF中。@berak经过进一步挖掘后,它现在似乎出现在GitHub上(),尽管他们网站上的一些链接仍然指向SF,这太好了。嘿@dashesy,你能给我发电子邮件吗?我想和你讨论一下计算机视觉(如果可能的话)。谢谢非常感谢您的详细回复,我觉得我现在知道我需要走哪个方向了。非常感谢。我刚刚下载并测试了你的程序,给我留下了非常深刻的印象。我目前使用OpenCV进行人脸检测运行得非常好。你能告诉我下一步需要做什么吗?使用DLib在视频中跟踪我的面部地标(类似于在程序中选择模型1时显示的网格)。最重要的是,我如何提取这些值的坐标?提前感谢您,我感谢您的建议和帮助。请查看文档和演示,但您需要将opencv mat转换为dlib格式,然后使用dlib函数中的face rect、image和model来获取面部标记。很抱歉再次打扰您,但我已经开始使用“形状预测器面部地标.dat“。然而,我想知道是否有可能改变这一点,以更紧密地反映我希望在上面链接的图像中跟踪的几个地标?或者我需要做些什么来实现这些结果。再次感谢您的时间和帮助。别担心,我已经找到了如何训练此类数据文件的示例,不久将亲自尝试。我将使用我自己的包含人脸的图像进行训练。在本例中,他们使用了4张带有多个标记面的图像,以及另外5张带有标记面的图像进行测试。你是否知道有多少张图片包含多少张人脸用于训练和测试是最佳的?或者我应该严格模仿那些用于原始文件培训的文件吗?不要担心,如果你不知道或者不想再回答,我已经给你安装了足够多的窃听器:)我使用简化的标记集对60张图像进行了训练-我想我是认真考虑了相关因素,图像很好,但不管怎样,结果很差。。。不过,请不要从评论中获取太多信息,我不知道我对实现流程有什么不知道的。