此前写过一篇文章《利用OpenCV实现人脸识别案例》,主要是利用openCV和dlib类库检测视频流里的人脸,眼睛和嘴巴标识出来,利用已经训练好的数据来做,其实并不难。
中国人古代儒家先贤孟子说“泰山崩于前而色不变,麋鹿兴于左而目不瞬”,这个是大英雄大豪杰大圣贤的境界了,而我们一般人是做不到的,情绪在脸部表情上都能表现出来。
通过大量人脸面部表情数据分析,一般嘴巴张开距离占面部识别框宽度的比例越大,说明这个人的情绪越是激动,可能他/她很开心,或者是极度愤怒。而眉毛上扬越厉害,可能表示这个人很惊讶,眉毛的倾斜角度不同,表现出的情绪也是不一样的,开心时眉毛上扬,愤怒时眉毛皱起来并且压下来。最后,人的眼睛会说话,人在开心大笑的时候不自觉地会眯起眼睛,而在愤怒或者惊讶的时候会瞪大眼睛。
当然了,通过这些脸部特征,只能大致判断出一个人的情绪是开心,愤怒,惊讶,还是自然等等,要做出更加准确的判断,就要捕捉脸部细微的表情变化,加上心率检测,语音检测等等进行综合评价。
实施这个案例的第一步是要利用dlib类库来检测和识别人脸,在这个案例里我使用的是已经训练好的人脸识别检测器shape_predictor_68_face_landmarks.dat来标定人脸的特征点。标定的方法是使用opencv的circle方法,在特征点的坐标上面添加水印,内容就是特征点的序号和位置。然后根据这个特征点的位置来计算嘴巴是否张大,眼睛是否眯起来,眉毛是上扬的还是压下来的,根据这些计算判断出这个人的情绪。
这个案例的代码比较复杂,虽然处理逻辑清晰,但写出来代码还是有接近100行,在这里只贴出部分代码来:
两个function,第一个用来做人脸识别,第二个用来做面部表情分析,程序运行结果如下:
最近这段时间工作很忙,晚上回家学习的时间被挤压了不少,这个案例其实从上个周末就开始搞了,搞了这么长时间才终于搞定了,情绪其实都很开心,不过在逻辑判断的时候就呆板了些,嘴巴没有张开的就是nature状态,嘴巴张开了,那就是happy状态。另外一点就是我带着眼镜,分析了一下这个做计算和分析的时候也受到一些影响。
在这个案例中用到了两种技术,第一个是利用OpenCV做人脸识别,第二个是利用Dlib标识出的68个脸部特征点位置做计算和分析,简单做面部情绪判断。这两种技术是人工智能人脸识别这个领域都很重要,非常值得研究和学习。
这个案例可以应用到各个不同的应用场景,例如抓拍,像我这样的“拍照天才”经常会拍出一些特别的相片然后被揍,有了这个人脸面部情绪自动识别,在开心的一刻自动把镜头拍下来,留作永恒的纪念。另外,这个案例还可以应用在自闭症患者的辅助治疗上,帮助这些自闭症患者学会笑,学会做表情,缓解自闭症的症状。脑洞一下,这个案例还可以用在演员教学和培养上,帮助演员学会控制面部表情,要笑就笑得酣畅淋漓,要哭就哭得稀里哗啦!最后,开发一些交互式得游戏,根据对人脸面部表情得判断决定接下来得游戏环节,从而提高游戏体验等等。
在刚开始研究人工智能技术的时候,有一个想法,就是搞一个视频会议人工智能系统,AI自动识别参加视频会议的人的身份然后标注出来(技术上已经基本搞定了,估计这几天就能搞出一个简单的demo),然后AI自动记录参加视频会议的所有人的发言(Convert Speech to Text,此前利用微软Azure认知服务和百度AI开放平台的服务已经实现了这个功能,效果还可以),记录发言之后自动翻译成各种文字(这个方面的open source解决方案正在研究,需要一些时间才行),然后AI在视频会议参加者的要求下给予一些建议(智能会议助手,这个方面最近在研究图灵机器人,搞了一段时间了,方向基本确定,技术方案也基本上可以确定下来了,需要花一些时间搞出一个Demo来)。
在这个信息化时代,虚拟办公已经成为常态,视频会议更是很多大公司的标配,这个人工智能驱动的视频会议平台的市场应用前景非常大,开发出来会有非常大的价值,更重要的是研究这个平台的过程中需要解决的各种技术问题涉及到了人工智能的几个关键场景,从自然语言识别,语音服务,图像识别(人脸识别),知识库,搜索等各个领域上提高对于人工智能知识和技能的掌握,而这些技能不只是用于开发这个视频会议智能平台。Learn from doing,就是这个道理。
领取专属 10元无门槛券
私享最新 技术干货