人工智能|计算机视觉——微表情识别(Micro expression recognition)的研究现状

一、简述

微表情是一种特殊的面部表情,与普通的表情相比,微表情主要有以下特点:

  1. 持续时间短,通常只有1/25s~1/3s;
  2. 动作强度低,难以察觉;
  3. 在无意识状态下产生,通常难以掩饰或伪装;
  4. 对微表情的分析通常需要在视频中,而普通表情在图像中就可以分析。

由于微表情在无意识状态下自发产生,难以掩饰或伪装,通常与真实情感直接相关,所以微表情在情感分析中较为可靠,应用前景广阔;另一方面,由于人为识别微表情比较困难,训练难度大且成功率不高,因此需要计算机进行微表情自动识别。

目前微表情识别的工作难点主要有两方面:

  1. 微表情的持续时间短、动作强度低,特征难以提取,因此需要进行合适的数据预处理与特征提取;
  2. 由于微表情的数据采集与鉴定存在困难,现有的微表情数据集较少,这使得深度学习在微表情识别中的应用存在困难。

现有的的微表情识别方法通常基于传统机器学习,设计一种手工特征(Handcrafted Feature)来提取微表情片段中的特征,依照数据预处理——特征提取——特征分类的框架进行微表情分类。随着近年来深度学习在计算机视觉中的发展,使用深度学习方法进行微表情识别的尝试也逐渐增多。

下面我将从数据集、数据预处理、传统方法、深度方法四个角度来简单介绍微表情识别工作。

二、数据集

CASME II数据集包含247条微表情视频片段(在我实际使用的版本中包含255条),使用200FPS的高速摄像机进行拍摄,视频片段的面部分辨率可以达到约280*340像素。CASME II数据集将微表情分为5类进行标注,分别是快乐(Happiness)、恶心(Disgust)、惊讶(Surprise)、压抑(Repression)、其他(Others);除此之外,CASME II数据集中还标注了微表情活动的起点(Onset)、峰值点(Apex)与结束(Offset),其中Apex对于微表情识别有所帮助;除了对情感进行标注外,CASME II数据集还标注了每个微表情的AU(面部活动单元),AU可以作为对微表情进行分类的依据。

  • 对于CASME II数据集的详细介绍可以参照下文:

CASME II: An Improved Spontaneous Micro-Expression Database and the Baseline Evaluation​journals.plos.org/plosone/article?id=10.1371/journal.pone.0086041​编辑

除此之外,目前比较常用的微表情数据集还有SMIC与比较新的SAMM等。对于不同的微表情数据集,主要的区别在于帧率、分辨率与标注方式。

三、数据预处理

在提取微表情的特征前,通常要对微表情视频片段进行数据预处理,首先就是人脸预处理,包括裁剪人脸等;随后,还要进行其他数据预处理,以便于特征的提取。

  • 常使用的数据预处理包括使用TIM算法进行时域图像插值、使用EVM算法进行动作放大。

1.人脸预处理

裁剪人脸时,比较经典的方法是使用ASM或其他算法提取人脸特征点,以左眼的位置以及双眼间的距离作为基准,控制人脸裁剪的位置与范围;

由于微表情数据集中的数据采集自多名受试者,而不同受试者的面部特征分布有所不同,因此为了减少不同受试者之间面部的差异,可以基于面部特征点对所有片段进行面部配准(face register),效果如下图所示:

(a)标准面部 (b)面部配准前的图像 (c)面部配准后的图像

简单来说,face register首先选择一张脸作为标准人脸图像,提取其特征点;对于每个视频片段,提取视频片段中第一帧的面部特征点,并计算一个映射函数(此处使用LWM算法),将这帧图像的特征点映射到标准图像的特征点上;最后,将此映射作用在视频中的所有帧上。这种方法可以使所有视频片段中的人脸特征点位置相同,从而减少不同人脸的差异。

  • 使用python的dlib库识别人脸特征点,进行face register,经过实验发现register可以提高模型在10-fold验证时的效果,但降低了模型在LOSO验证时的效果。由于dlib对于人脸特征点的识别并不是那么准,因此上述现象也可能是由dlib的误差导致。

2.时域图像插值(TIM算法)

由于微表情持续时间较短,我们希望有一种方法能在保持微表情特征的同时,延长微表情的持续时间,这样有利于特征的稳定提取,因此我们需要对视频片段进行时域上的插值,增加微表情片段所包含的图像数,相当于变相延长了微表情的持续时间。

由于在现实世界中,人的表情是连续变化的,但是在摄像机拍摄的视频中所包含的图像帧是不连续的。我们可以将现实世界中的连续表情变化视为图像空间上的一条连续曲线,曲线的每一个点都代表着人脸在一个瞬间时的表情,而摄像机拍摄的视频则可以视为在这条连续曲线上进行采样。只要能找到这条曲线,并在曲线上重新进行更加密集的采样,便能用更多的图像表示同一段表情。

时域插值模型(Temporal Interpolation Model,TIM)算法是一种时域上的图像插值算法。该方法首先将视频片段视为一个图(graph),并用图中的节点代表一帧图像,视频中相邻的帧在图中也是相邻的节点,视频中不相邻的帧在图中也不相邻;随后,使用图嵌入(graph embedding)算法将该图嵌入到一个低维的流形中,最后代入图像向量,计算出这条高维的连续曲线。在曲线上重新进行采样,便可以得到插值后的图像序列。

  • TIM算法的细节可以参考下文:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转合宙Luat教程 基础篇④——程序基础(库、线程、定时器和订阅/发布)

文章目录 一、前言二、库三、线程四、定时器五、订阅/发布5.1 回调函数5.2 堵塞等待一、前言 教程目录大纲请查阅:玩转合宙Luat教程——导读 写一写Lua程序基础的东西。 包括如何调用库,如何创建线程、如何创建定时器,如何使用订阅/发布事件。 二、库 程序从main.lua开始通…

嵌入式系统与OpenCV

目录 一、OpenCV 简介 二、嵌入式 OpenCV 的安装方法 1. Ubuntu 系统下的安装 2. 嵌入式 ARM 系统中的安装 3. Windows10 和树莓派系统下的安装 三、嵌入式 OpenCV 的性能优化 1. 介绍嵌入式平台上对 OpenCV 进行优化的必要性。 2. 利用嵌入式开发工具,如优…

CentOS环境上离线安装python3及相关包

0. 准备操作系统及安装包 准备操作系统环境: 首先安装依赖包,安装相应的编译工具 [rootbigdatahost bin]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…

在 Ubuntu 上安装 MinIO 并设置密码

在 Ubuntu 上安装 MinIO 并设置密码 1. 更新系统2. 设置时区为中国大陆3. 安装 MinIO3.1 下载 MinIO3.2 赋予执行权限3.3 移动 MinIO 到系统路径 4. 创建 MinIO 用户和数据目录4.1 创建用户4.2 创建数据目录4.3 设置权限 5. 配置 MinIO5.1 创建配置文件 6. 创建 Systemd 服务文…

数学建模_基于对数和傅里叶变换的多通道图像增强模型(处理模糊)Matlab代码包教会使用,直接替换数据即可

图像增强模型:基于对数和傅里叶变换的多通道增强 模型简介 本博客介绍一种基于对数变换(Logarithmic Transformation)和傅里叶变换(FFT)的图像增强方法。该方法结合多尺度高斯滤波器和拉普拉斯模糊度分布评估&#xf…

Qt交叉编译x86和arm心得

最近一直在Linux上开发qt程序,主要工作是在x86的Ubuntu上开发编译调试程序,确定没有问题后交叉编译到arm的linux系统上运行 1.环境 Qt的交叉编译环境厂家已经提供了,嵌入式的同事帮我安装调试的,具体就是装了厂家给的gcc编译套件…

LeetCode739. 每日温度(2024冬季每日一题 15)

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatu…

React(五)——useContecxt/Reducer/useCallback/useRef/React.memo/useMemo

文章目录 项目地址十六、useContecxt十七、useReducer十八、React.memo以及产生的问题18.1组件嵌套的渲染规律18.2 React.memo18.3 引出问题 十九、useCallback和useMemo19.1 useCallback对函数进行缓存19.2 useMemo19.2.1 基本的使用19.2.2 缓存属性数据 19.2.3 对于更新的理解…

STM32设计学生宿舍监测控制系统-分享

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 本项目旨在利用STM32单片机为核心,结合传感器技术、无线通信技…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的,最近优化下无线网络,说新的设备用华为的,然后我是直到要部署的当天才知道用华为设备的,就很无语了,一点准备没有,以下为这次的实际操作记录吧&…

Java学习,继承(1)

Java继承是面向对象的编程特性,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的字段和方法。通过继承,子类可以获得父类的所有公共(public)和保护(protecte…

二刷代码随想录第13天

二叉树的递归遍历 递归三部曲1.确定递归函数的参数和返回值 2.确定终止条件 3.确定单层的递归逻辑前中后序遍历只需要改一下位置即可 class Solution { public:vector<int> inorderTraversal(TreeNode* root) {vector<int> vec;traversal(root, vec);return vec;…

Linux麦克风录音实战

在 Linux 上使用麦克风进行录音可以通过多种方式实现&#xff0c;包括使用命令行工具、图形界面应用程序以及编程接口。下面我将介绍几种常见的方法&#xff0c;从简单的命令行工具到使用 PortAudio 库进行编程。 一. 使用arecord命令行工具 arecord 是 ALSA&#xff08;Adva…

虚拟苹果系统MacOS中新建自定义C++Dylib并用C++测试程序测试

前言 苹果系统中Dylib的建立和使用是一个非常基础的功能。本博客使用苹果虚拟机MacOS Ventura 13.6.7&#xff0c;XCode15.2&#xff0c;来复现这个过程。供参考。 1、Dylib框架的建立 2、增加一个函数 注意&#xff0c;向导自动生成的Helloworld函数中嵌套了一个函数Helloworl…

Windows系统电脑安装TightVNC服务端结合内网穿透实现异地远程桌面

文章目录 前言1. 安装TightVNC服务端2. 局域网VNC远程测试3. Win安装Cpolar工具4. 配置VNC远程地址5. VNC远程桌面连接6. 固定VNC远程地址7. 固定VNC地址测试 前言 在追求高效、便捷的数字化办公与生活的今天&#xff0c;远程桌面服务成为了连接不同地点、不同设备之间的重要桥…

树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL

树莓派2代的Model B采用Broadcom BCM2836 900MHz的四核SoC&#xff0c;1GB内存&#xff0c;是新一代开拓者&#xff0c;兼容1代B。相比之下&#xff0c;树莓派2的性能比1代提升6倍&#xff0c;内存翻了一番。Raspberry Pi 2不仅能跑全系列ARM GNU/Linux发行版&#xff0c;而且支…

ThingsBoard规则链节点:Azure IoT Hub 节点详解

目录 引言 1. Azure IoT Hub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 设备管理 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备…

MySQL获取数据库内所有表格数据总数

在 MySQL 中&#xff0c;要获取数据库内所有表格的数据总数&#xff0c;可以编写一个查询脚本来遍历每个表并计算其行数。你可以使用 INFORMATION_SCHEMA 数据库&#xff0c;它包含了关于数据库元数据的表格&#xff0c;如 TABLES 和 COLUMNS。 以下是一个示例脚本&#xff0c…

如何利用 Puppeteer 的 Evaluate 函数操作网页数据

介绍 在现代的爬虫技术中&#xff0c;Puppeteer 因其强大的功能和灵活性而备受青睐。Puppeteer 是一个用于控制 Chromium 或 Chrome 浏览器的 Node.js 库&#xff0c;提供了丰富的 API 接口&#xff0c;能够帮助开发者高效地处理动态网页数据。本文将重点讲解 Puppeteer 的 ev…

开发工具 - VSCode 快捷键

以下是一些常用的 VS Code 快捷键&#xff08;Windows、macOS 和 Linux 均适用&#xff0c;略有不同&#xff09;&#xff1a; 常用快捷键 功能Windows/LinuxmacOS打开命令面板Ctrl Shift P 或 F1Cmd Shift P打开文件Ctrl OCmd O保存文件Ctrl SCmd S全部保存Ctrl K,…