OpenCV中的表情识别

一、介绍

本次是一个基于dlib68点人脸关键点的简单表情识别程序。它从视频中逐帧读取画面,检测人脸,提取嘴部、脸颊、下巴等关键点,计算三个几何比例特征,再通过阈值判断表情:正常、大笑、哭泣、微笑,最后在嘴部画凸包并显示中文标签。

二、核心代码讲解

2.1整体功能与依赖

numpy:数组和向量计算。

dlib:人脸检测和68点关键点预测。

cv2:OpenCV,读取视频、显示图像、画轮廓。

eucliden_distances:计算两个点之间的欧式距离。

PIL:在OpenCV图像上绘制中文文字。

2.2三个表情特征函数

2.2.1.MAR(shape):嘴部宽高比,用于检测大笑。

dlib68点中,48到67是嘴部区域。

shape48和shape54是左右嘴角;

shape50、shape51、shape52是上唇附近的点;

shape56、shape57、shape58是下唇附近的点;

A、B、C分别计算上唇到下唇三组垂直距离,取平均值,表示嘴张开的程度。

D是左右嘴角的水平距离,表示嘴的宽度。

MAR=平均上下唇距离 / 嘴角宽度

2.2.2.MJR(shape):嘴宽与脸颊宽比值,用于检测微笑

M:左右嘴角距离,即嘴宽。

J:shape3和shape13是下颌轮廓左右两侧的点,近似脸宽。

MJR = 嘴宽 / 脸宽

2.2.3.MDR(shape):嘴角下垂比,用于检测哭泣

mouth_corner_y:左右嘴角的平均y坐标。

upper_lib_y:上唇某一点的y坐标。

face_height:shape8是下巴,shape33是鼻尖,二者距离近似脸高。

图像坐标中y轴向下增大,所以嘴角越靠下,mouth_corner_y越大,drop_ratio越大。

2.3中文绘制函数cv2AddChineseText

OpenCV自带的cv2.putText()不支持中文,所以这里用PIL绘制。

流程:1.OpenCV图像是BGR格式,先转成RGB。

2.用ImageDraw和黑体字绘制中文。

3.再转回OpenCV的BGR格式。

如果找不到黑体,会回退到默认字体,但默认字体通常不支持中文,可能显示方框。

2.4主程序流程

detector:dlib正脸检测器

predictor:68点关键点预测器。

cap:读取指定路径的视频。

每次读取一帧,然后检测所有人脸。

第二个参数0表示不做上采样,速度快,但小脸可能漏检。

将dlib的关键点对象转成numpy坐标数组,形状为(68,2),每一行是(x,y)。

1.先判断大笑:MAR大于0.5.

2.再判断哭泣:MDR大于0.02.

3.再判断微笑:MJR大于0.55

4.都不满足则为正常。

2.5画嘴部凸包并添加中文标签

shape48:61取嘴部48到60号点。

cv2.convexHull计算嘴部凸包。

mouthHull0,0作为文字显示位置,通常是凸包第一个点。

cv2.drawContours画出绿色嘴部轮廓。

三、总结

它是一个入门级的计算机视觉表情识别示例,适合学习 dlib 关键点、OpenCV 视频处理和简单几何特征分类。实际项目中需要调整阈值、增加鲁棒性,并考虑使用更先进的表情识别模型。

相关推荐
程序人生8885 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
HUANGZHENXUAN1238 小时前
代码解析(一):从 `opencv_basics/` 说起
opencv
词却1 天前
OpenCV学习:MediaPipe 人脸网格检测
opencv·学习
richard_yuu1 天前
OpenCV 实战第 8 篇:几何测量算子族,从 boundingRect 到亚像素定位
人工智能·opencv·计算机视觉
程序人生8881 天前
从“把隐私文件上传到别人云端“到本地可控:DocConverter Web 立项初心与架构选型
前端·图像处理·人工智能·opencv·架构·ocr·文心一言
ab1237682 天前
OpenCV 学习笔记
笔记·opencv·学习
咯哦哦哦哦2 天前
opencv复现 Halcon 双相机拼接
人工智能·数码相机·opencv
源码学社2 天前
图像去水印实测:OpenCV inpainting vs LaMa,传统算法和 AI 模型差距有多大
人工智能·opencv·算法·去水印·图片水印·ai去水印
richard_yuu2 天前
OpenCV 实战第 7 篇:Canny 阈值自适配、findContours 层级与 approxPolyDP
人工智能·opencv·计算机视觉
这张生成的图像能检测吗4 天前
(论文速读)FE-CLIP:把频域信息注入 CLIP,做零样本异常检测与分割
人工智能·opencv·目标检测·计算机视觉·缺陷检测·异常检测