共计 2349 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍
微表情是人类短暂且难以控制的面部表情,持续时间通常只有 1 /25 到 1 / 5 秒。它们在心理学、安全审讯和人机交互等领域有着重要应用价值。CASME2 数据集是目前微表情研究领域最权威的公开数据集之一,由中国科学院心理研究所发布,包含 247 个微表情样本,涵盖了多种情绪类别。

数据结构解析
CASME2 数据集采用分层目录结构存储,主要包含以下内容:
- 原始视频:AVI 格式,分辨率为 640×480,帧率 60fps
- 面部区域裁剪视频:聚焦面部区域的裁剪版本
- 标注文件:包含 onset、apex、offset 三个关键帧位置
- AU 标注:面部动作单元(Action Unit)标注
- 情绪标签:包括 disgust、happiness 等基本情绪
数据集的文件命名遵循特定规则,例如 sub01/EP02_01f.avi 表示第 1 个被试的第 2 个微表情样本。
预处理方法
以下是使用 Python 加载和处理 CASME2 数据的基本流程:
import cv2
import os
import numpy as np
# 读取视频文件
def load_video(video_path):
cap = cv2.VideoCapture(video_path)
frames = []
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frames.append(gray)
cap.release()
return np.array(frames)
# 加载标注信息
def load_annotation(anno_path):
with open(anno_path, 'r') as f:
lines = f.readlines()
# 解析关键帧信息
onset = int(lines[0].split(':')[1])
apex = int(lines[1].split(':')[1])
offset = int(lines[2].split(':')[1])
return {'onset': onset, 'apex': apex, 'offset': offset}
特征提取技巧
微表情识别常用的特征提取方法包括:
- 光流特征:计算相邻帧间的运动信息
- LBP-TOP:局部二值模式在三个正交平面的扩展
- 深度特征:使用预训练的 CNN 模型提取深度特征
以下是 LBP-TOP 特征的实现示例:
from skimage.feature import local_binary_pattern
# 计算 LBP-TOP 特征
def compute_lbp_top(video, P=8, R=1):
"""
参数:
video: 输入视频序列 (T, H, W)
P: 邻域点数
R: 邻域半径
返回:
LBP-TOP 特征向量
"""
# 初始化三个平面的特征
xy_feat = []
xt_feat = []
yt_feat = []
# 计算 XY 平面特征
for frame in video:
lbp = local_binary_pattern(frame, P, R, method='uniform')
xy_feat.append(lbp)
# 计算 XT 和 YT 平面特征
# ... (省略实现细节)
# 合并三个平面的特征
return np.concatenate([np.histogram(xy_feat, bins=P+2, range=(0, P+2))[0],
np.histogram(xt_feat, bins=P+2, range=(0, P+2))[0],
np.histogram(yt_feat, bins=P+2, range=(0, P+2))[0]
])
性能考量
处理 CASME2 数据时需要注意以下性能因素:
- 视频解码:OpenCV 的 VideoCapture 效率较低,可考虑使用 FFmpeg
- 内存占用:全视频加载可能消耗大量内存,建议分块处理
- 特征维度:LBP-TOP 等特征维度较高,需要降维处理
避坑指南
- 时间对齐问题:确保标注的关键帧与视频帧索引正确对应
- 面部检测失败:极端表情可能导致面部检测失败,建议手动校正
- 类别不平衡:CASME2 中各类别样本数不均,需要数据增强或重采样
- 时序不一致:不同样本的微表情持续时间差异较大,需归一化处理
应用案例
下面是一个简单的微表情分类示例:
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 假设 X 是特征矩阵,y 是标签
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 训练 SVM 分类器
clf = SVC(kernel='rbf', gamma='scale')
clf.fit(X_train, y_train)
# 评估性能
y_pred = clf.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}")
进一步学习
- 原始论文:《CASME II: An Improved Spontaneous Micro-Expression Database》
- 官方数据集网站:http://fu.psych.ac.cn/CASME/casme2.php
- 相关工具库:OpenFace、Py-FEAT
- 进阶阅读:《Micro-Expression Recognition》专著
通过本文的介绍,相信读者已经对 CASME2 数据集有了全面的了解。微表情识别是一个充满挑战的领域,希望这些实践经验能为你的研究提供帮助。在实际应用中,建议结合多种特征和方法,不断提高模型的识别性能。
正文完
