我正在为iOS开发一个应用程序,需要检测用户打哈欠的动作。
我的做法是使用OpenCV并使用haar级联来检测脸部,然后在脸部内部寻找嘴巴(同样使用haar级联)。
我遇到的问题是,我以为只需要像(face.y - mouth.y) < something = yawn这样简单地检测一下就能成功。但实际上,面部和嘴巴的矩形框“不稳定”,也就是说,每次循环运行时,面部和嘴巴的X和Y值都会(显然)发生变化。
有没有“张嘴”haar级联可以使用,或者如何知道何时用户张嘴?
我正在为iOS开发一个应用程序,需要检测用户打哈欠的动作。
我的做法是使用OpenCV并使用haar级联来检测脸部,然后在脸部内部寻找嘴巴(同样使用haar级联)。
我遇到的问题是,我以为只需要像(face.y - mouth.y) < something = yawn这样简单地检测一下就能成功。但实际上,面部和嘴巴的矩形框“不稳定”,也就是说,每次循环运行时,面部和嘴巴的X和Y值都会(显然)发生变化。
有没有“张嘴”haar级联可以使用,或者如何知道何时用户张嘴?
通常,支持向量机(SVM)用于面部表情识别,例如愤怒、微笑、惊讶等,仍在积极发展中。谷歌搜索可以给您提供很多关于这个话题的论文(甚至我的一位同学就把它作为他的毕业项目)。因此,首先您需要训练SVM,为此,您需要样本图片,包括打哈欠和正常脸部。
打哈欠与惊喜几乎相似,口部在两种情况下都会张开。我建议您查看以下论文的第3页:Real Time Facial Expression Recognition in Video using Support Vector Machines(如果您无法访问该链接,请通过论文名称进行谷歌搜索)。
该论文(甚至我的同学)使用面部特征的位移向量。为此,您需要在脸上找到一些特征点。例如,在论文中,他们使用了瞳孔、眼睑的极值点、鼻尖、嘴巴区域的极值点(嘴唇)等。然后,他们不断跟踪这些特征的位置,并计算它们之间的欧几里得距离。这些数据被用于训练SVM。
请查看以下两篇论文:
看下面的图像,它展示了脸部特征点的意思:
在你的情况下,我想你是在iPhone上实时实现它。因此,你可以避免眼睛处的特征点(虽然这不是一个好主意,因为当你打哈欠时,眼睛会变小)。但与此相比,嘴唇处的特征点显示出更多的变化和显著性。因此,仅在嘴唇上实现可能会节省时间。(当然,这取决于你自己)。
嘴唇分割:已经在SOF中讨论过,查看这个问题:OpenCV Lip Segmentation
最后,我相信你可以在谷歌上找到很多细节,因为这是一个活跃的开发领域,有很多论文可供参考。
另一种选择:
在这个领域的另一个选择是我听说过好几次的主动外观模型
。但我对它一无所知。你可以自己谷歌一下。
OpenCV还具有面部识别/检测功能(请参阅openCV SDK附带的示例)。我认为这些将是更好的查找位置,因为haar级联不会真正分析您需要的面部表情。尝试运行示例并自行查看-您将获得有关检测到的眼睛/嘴巴的实时数据。
祝你好运