top of page
アンカー 1

一、前言

mediapipe模块还提供了面部468个特征点的检测,所以拿来试试做一个面部表情的检测。

这次要实现两个目标:

1.面部检测

2.微笑表情检测


二、算法原理

1.面部检测

依旧是采用谷歌的mediapipe模块来获取面部的468个特征点。然后根据需要提取出我们想要的特征点坐标。

※确定468个特征点分别是脸部的哪个位置,实在是个比较繁琐的工作。


2.微笑表情检测

微笑表情的话,其实网上有很多范例,但是大多都是基于嘴巴裂开的程度以及眼睛眉毛的位置变化来检测。虽然也可以实现,但是感觉精度并不是很高。

于是本人淡定的对着镜子揣摩了几天,有了以下思路:

①微笑的时候,嘴巴并不会张开,眉毛眼睛也并不会动。

②无论微笑或者大笑,只要你笑,你的法令纹必然会出现。(很残酷的事实)

基于以上两点,我决定通过提取法令纹部位的像素值,然后检测法令纹是否出现来判定是否在笑,再通过嘴部张开的程度来判定是大笑或者微笑。


以古帅的脸为例,就是要采集左边两个红点连线以及右边两个红点连线上的像素值,并且判断像素值大小的标准偏差。偏差越大说明法令纹越深,于是可以判定为笑。然后再通过上下嘴唇的高度差来判定嘴巴张开的大小。嘴巴张开很大就表示在大笑,嘴巴没有张开表示在微笑。

※如果对每一帧的检测结果都作为最终结果的话,会导致输出很不稳定(微弱的光强变化都有可能引起结果差异),所以我通过每10帧图像里面哪个结果多就作为最终输出。比如10帧图像里面微笑最多,则最终输出结果为微笑。


三、效果视频

效果还不错,完美的检测到三个表情。(由于本人太丑,就只有面部轮廓图,其余全部屏蔽掉)

※顺便吐槽一下反人类的美颜,在高级美颜的加持下,人在微笑的时候法令纹竟然会消失。。。这不科学


四、总结

如果测试环境固定的话精度还不错,但是如果想要在任意环境下也达到高精度,就需要依赖深度学习,但是深度学习又需要大量数据来训练,等以后有时间再做。


五、源码

https://www.deepvisionzero.com/download

※图像处理第5弹

bottom of page