当前位置: 首页 > article >正文

微表情识别系统

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年11月25日8点23分


神秘男子影,
  秘而不宣藏。
泣意深不见,
男子自持重,
   子夜独自沉。

论文链接

点击开启你的论文编程之旅icon-default.png?t=O83Ahttps://www.aspiringcode.com/content?id=17045219032707&uid=48d99f80fab04fb5bd5b01763f272a4c

概述

面部表情图像预处理是面部表情识别的重要步骤,主要目的是在于提取特征之前排除一切与面部表情无关的干扰因素。例如,环境光照、姿势和不同背景等。在干扰排除后,将人类面部直接与公共参考系相对接、使每个面部特征对应的语义位置精准无误。人脸检测、人脸对齐、数据增强、人脸一是实现面部表情图像预处理的主要方法。

核心逻辑

人脸检测:

# 初始化字典,并保存Haar级联检测器名称及文件路径
detectorPaths = {
    "face": "haarcascade_frontalface_default.xml"
}
'''
加载Haar级联检测器:
创建一个空字典detectors,用于存储加载的检测器。
使用cv2.CascadeClassifier()加载XML文件,并将检测器存储在detectors字典中。
'''
# 初始化字典以保存多个Haar级联检测器
print("[INFO] loading haar cascades...")
detectors = {}

# 遍历检测器路径
for (name, path) in detectorPaths.items():
    # 加载Haar级联检测器并保存到map
    path = os.path.sep.join([args["cascades"], path])
detectors[name] = cv2.CascadeClassifier(path)
'''
图像处理:
从磁盘读取输入图像,使用imutils.resize函数将图像宽度调整为500像素。
将图像转换为灰度图以便进行人脸检测。
'''
# 从磁盘读取图像,缩放,并转换灰度图
print(args['image'])
image = cv2.imread(args["image"])
image = imutils.resize(image, width=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
'''
执行面部检测:
使用人脸检测器执行面部检测,得到面部的边界框坐标。
'''
# 使用合适的Haar检测器执行面部检测
faceRects = detectors["face"].detectMultiScale(
    gray, scaleFactor=1.05, minNeighbors=5, minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE)
'''
眼睛和嘴巴检测:
对于每个检测到的面部,分别在面部ROI中应用眼睛和嘴巴检测器,得到相应的边界框坐标。
'''
# 遍历检测到的所有面部
for (fX, fY, fW, fH) in faceRects:
    # 提取面部ROI
    faceROI = gray[fY:fY + fH, fX:fX + fW]
    # 在面部ROI应用左右眼级联检测器
    eyeRects = detectors["eyes"].detectMultiScale(
        faceROI, scaleFactor=1.1, minNeighbors=10,
        minSize=(15, 15), flags=cv2.CASCADE_SCALE_IMAGE)
    # 在面部ROI应用嘴部检测
    smileRects = detectors["smile"].detectMultiScale(
        faceROI, scaleFactor=1.1, minNeighbors=10,
        minSize=(15, 15), flags=cv2.CASCADE_SCALE_IMAGE)

多人脸检测:

Haar是一种特征描述,随着时代的进步Haar也从Haar Basic的三种简单特征扩展到了Haar-Like以及到现在的Haar Extended。但是万变不离其宗,我们笼统得把他们分成三类:中心特征,线性特征, 边缘特征。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。

Haar原来就是一些固定的特征模型,在人脸识别这个特助的领域中可以局部的契合图像特征。

微表情识别 :
卷积神经网络,FaceCNN 类:
初始化:定义了一个包含卷积层、批量归一化、RReLU激活函数、池化层和全连接层的卷积神经网络结构。
前向传播方法 (forward):定义了模型的前向传播过程。

使用方式

功能分别是中文显示识别结果以及用英文显示识别结果以及相应的置信度计算结果展示。
英文显示:

中文显示:

导入中文字体:
设置中文字体

font = cv2.FONT_HERSHEY_SIMPLEX
font_chinese = cv2.FONT_HERSHEY_SIMPLEX

指定中文字体文件路径,替换成你自己的中文字体文件路径

font_path = ''
font_chinese = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText()

确保你已经下载并设置好中文字体文件路径。
修改中文文字输出的位置和格式:
在矩形框上部,输出中文分类文字和置信度

text = f"{} ()"
cv2.putText()

将 cv2.putText 函数的 font 参数替换为 font_chinese,以确保使用中文字体。
置信度计算:

直接点击按钮运行,再运行界面按“z”停止程序。
模型训练文件在百度云盘下载,替换相应的相对路径位置后运行。

部署方式

main.ipynb 为运行文件。
路径文件不是相对地址,请用户自行调整路径后为项目存放地址后运行。
用户请先请阅读readme.txt文件。

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子


http://www.kler.cn/a/409574.html

相关文章:

  • 07-SpringCloud-Gateway新一代网关
  • pringboot自动装配原理是?
  • IEC61850读服务器目录命令——GetServerDirectory介绍
  • ISAAC Gym 7. 使用箭头进行数据可视化
  • spring源码解析-@Autowired
  • Vite基本概要
  • 基于springboot的来访管理系统的设计与实现
  • H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件
  • 【JSON】package.json与package-lock.json
  • 【可变参数,lambda,function,bind】
  • RabbitMQ 消息队列代码实战1
  • STL之哈希
  • arm学习总结
  • 【Electron学习笔记(一)】Electron基本介绍和环境搭建
  • mac Parallels Desktop 20 20.1.1-55740安装windows10教程
  • 基于yolov8、yolov5的智能零售柜商品检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • [极客大挑战 2019]BabySQL--详细解析
  • 数据库-基础理论
  • git bash是什么,git是什么,git中的暂存区是什么,git中的本地仓库是什么,git中工作目录指的是什么
  • 长三角文博会:Adobe国际认证体系推动设计人才评价新标准
  • 【C语言】深入解析assert 断言机制
  • Spring Boot 2 和 Spring Boot 3 中使用 Spring Security 的区别
  • 微信小程序页面配置详解:从入门到精通
  • MATLAB实现garch模型(广义自回归条件异方差)
  • LayaBox1.8.4实现自定义3DMesh
  • PyOCD 的基本使用