网站首页 > 技术文章 正文
大家好,今天要讲的内容是,识别并分析视频中人物的面部表情。
在本节课中,我们将详细讨论,如何使用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生气的等等,都有相应的结果。
那么到这里,识别并分析视频中人物的面部表情就讲完了,感谢大家的观看,我们下节课再会。
猜你喜欢
- 2024-12-09 基于OpenCV的相机捕捉视频进行人脸检测--米尔NXP i.MX93开发板
- 2024-12-09 OpenCV之形态学操作(膨胀、腐蚀、开运算、闭运算、顶帽、黑帽)
- 2024-12-09 OpenCV入门第一课
- 2024-12-09 [常用工具] OpenCV获取网络摄像头实时视频流
- 2024-12-09 用 Python 和 OpenCV 创建视频编辑器
- 2024-12-09 半小时教你手搓AI视频通话,还有懒人版代码已开源
- 2024-12-09 C# 使用OpenCV库把多张图片合成视频
- 2024-12-09 OpenCV-Python实现绿幕图像抠图
- 2024-12-09 计算机视觉系列_2、OpenCV基础讲解
- 2024-12-09 【AI&ML】如何使用Google Colaboratory进行视频处理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)