计算机系统应用教程网站

网站首页 > 技术文章 正文

基于DeepFace和opencv,识别并分析视频中人物的面部表情

btikc 2024-12-09 10:56:53 技术文章 26 ℃ 0 评论

大家好,今天要讲的内容是,识别并分析视频中人物的面部表情。

在本节课中,我们将详细讨论,如何使用DeepFace和opencv提供的python接口。

对一段视频中的人物表情进行分析,提取人物面部的表情变化。


1.DeepFace和opencv

DeepFace 是一个轻量级的面部识别和面部属性分析框架,它基于tensorflow实现。

该框架整合了当前最先进的模型,如VGG-Face、Google FaceNet、OpenFace等等技术。

基于DeepFace,我们可以识别出伤心、愤怒、厌恶、害怕、开心、惊讶、中性等7种表情。

另外实验显示,人类在面部识别任务上的准确率为 97.53%,而deepface项目已经达到并超过了这个水平。

我们可以在github上,找到deepface的开源代码:

有兴趣的同学可以进一步深入研究其中的算法内容,后面我也会安排讲解这个开源项目。

OpenCV,全称Open Source Computer Vision Library,是一个开源的计算机视觉和机器学习软件库。

在本节课中,我们主要使用open-cv的VideoCapture接口,对视频进行读取、标记和保存结果。


2.DeepFace的安装和配置

首先使用conda create创建一个名为emotion的新python环境,其中python版本选择3.10。

创建后激活环境,输入pip install deepface,安装deepface。其中open-cv会随deepface一起安装。

完成安装后,编写如下测试代码:

首先导入deepface模块,接着调用DeepFace的analyze接口,识别图片test.png中的表情。

这里需要传入参数,actions = emotion。最后打印结果。

运行结果是一个字典,其中包括了7种表情的强度数值。

这里happy高兴的,数值最大为99,其他表情强度都较小。

从test.png中也可以看出,图中的人物确实很高兴。


2.视频分析程序的编写

完成deep-face的安装和测试后,编写视频分析程序:

在程序中,首先导入opencv和deepface。

接着设置待分析视频的路径video.mp4,和分析视频的结果emotion.mp4。

使用OpenCV的VideoCapture接口,打开视频文件,返回cap。

cap用于从视频文件或摄像头中捕获视频帧。

接着获取视频帧的速率fps、视频帧的宽度frame_width和视频帧的高度frame_height。

调用VideoWriter定义视频编解码器,指定视频文件的编码格式的。

其中,XVID是一个流行的MPEG-4视频编解码器。

调用cv2.VideoWriter,函数传入输出视频地址output_video、fourcc视频编解码器和视频帧的参数。

后面通过返回的out,可以将处理后的视频帧,保存到输出文件中。

设置frame_cnt,表示当前正在处理第几帧,emodict保存识别出的情绪结果,然后进入视频分析的循环。

在循环中,使用cap.read读取当前的视频帧,保存在frame。

如果返回值ret不是真,说明视频结束了,跳出循环。

调用DeepFace.analyze,对当前帧进行分析,识别出当前视频帧中人物的表情。

这里要注意,需要将enforce_detection设置为False,也就是不强制识别出人脸,否则如果没识别出人脸,会抛出异常。

接着获取结果中强度最高的情感,保存在emotion中,面部区域的位置和宽高,保存在x、y、w和h中。

frame_cnt+=1,记录已经计算的帧数。

接着打印该帧是视频的第几帧,和这一帧对应的表情结果。

使用字典emodict,记录每种表情的数量。

最后,调用cv2.rectangle,将帧frame中的面部区域,使用矩形进行框选。

调用cv2.putText,将表情结果标记在矩形框的旁边。

调用out.write,将标记好的帧frame保存在输出视频中。

完成对视频的每一帧的识别后,打印表情统计结果的字典emodict:

运行程序,可以看到,视频会被一帧一帧的识别:

在这段视频中,一共包含了234帧。

其中表现最多的表情是happy,高兴的,有56帧,占比23.93%。

其他的如,sad悲伤的、surprise吃惊的、fear恐惧的、angry生气的等等,都有相应的结果。

那么到这里,识别并分析视频中人物的面部表情就讲完了,感谢大家的观看,我们下节课再会。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表