OpenCV中的微笑检测

一、介绍

本次实验处理流程:

1.加载OpenCV预训练的人脸检测级联分类器和微笑检测级联分类器。

2.逐帧读取视频,对每帧进行灰度转换。

3.先检测人脸(用绿色矩形框出),然后截取人脸区域(ROI)。

4.在人脸ROI内检测微笑(用蓝色矩形框出),并在画面左上角显示"smile"文字。

5.实时显示处理后的画面,按ESC键退出。

二、核心代码

2.1导入库与加载级联分类器

cv2.CascadeClassifier用于加载Haar特征级联分类器(基于Viola-Jones算法)。

cv2.data.haarcascades指向OpenCV自带的预训练分类器存放路径。

haarcascade_frontalface_default.xml:检测正脸。

haarcascade_smile.xml:检测微笑(在脸部区域内的嘴部特征)。

这两个文件是训练好的XML模型,用于快速目标检测。

2.2主循环:逐帧处理

cap.read()返回两个值:ret(布尔值,表示是否成功读取帧)和image(当前帧图像,BGR格式)。

cv2.flip(image,1):沿Y轴水平翻转图像,效果类似镜像。这样做可能是为了视频中人物动作方向与观众视角一致,但取决于视频内容。如果视频本身不是镜像拍摄,翻转后会导致左右颠倒,可能影响检测效果

2.3灰度转换与多尺度人脸检测

cvtColor将BGR转为灰度图,因为Haar级联检测器输入要求灰度图.

detectMultiScale参数:

gray:输入灰度图像。

scaleFactor=1.1:图像金字塔的缩放比例,每次缩小为原来的1/1.1,值越大检测速度越快但可能漏检。

minNeighbors=15:每个候选矩形至少需要多少个邻近检测框才被保留(值越大,误报越少,但可能漏检)。

minSize=(5,5):检测目标的最小尺寸(像素),太小会忽略。

返回值为矩形列表,每个矩形代表人脸位置。

2.4遍历每个人脸

在原图上绘制绿色矩形框出人脸。(0,255,0)表示绿色,线宽2。

从灰度图中截取人脸区域roi_gray_face。

cv2.imshow('lian',roi_gray_face)额外显示一个人脸区域的独立窗口,可用于调试,但这里每一帧都会更新,若不需要可注释掉。

2.5在人脸区域内检测微笑

使用smile分类器在roi_gray_face中检测微笑,参数:

scaleFactors=1.5,表示缩放步长大,检测更快,但可能漏掉小尺寸的微笑。

minNeighbors,代表"最小邻居数",它是用来筛选候选框的一个阈值参数。

minSize=(50,50):微笑区域最小50*50像素,如果人脸很小,可能检测不到。

对于检测到的每个微笑矩形(sx,sy,sw,sh),其坐标是相对于人脸ROI的,所有要转换到全局坐标:a=X+sx,b=y+sy。

在原图上用蓝色矩形(255,0,0)绘制微笑区域。

在人脸左上角(x,y)位置用黄色文字(0,255,255)显示"smile"字样。

三、总结

本次学习的是一个典型的OpenCV级联分类器应用示例,能够实现基础的实时微笑检测。它展示了:1.级联分类器的加载与使用。2.多尺度目标检测的参数调优。3.ROI截取与坐标交换。4.视频流处理与显示。

相关推荐
国科安芯3 小时前
四重证据,一条逻辑链:商业航天级微控制器MCU抗辐射验证方法学综述——以国科安芯AS32S601为例
人工智能·单片机·嵌入式硬件·mcu·安全·抗辐射
dk_tjy3 小时前
AI驱动的自动化攻击背景下:企业端点安全体系的技术架构与建设路径
网络·人工智能·安全·自动化·终端安全管理·数据防泄漏
布吉岛的石头4 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
2601_965454234 小时前
用AI把开源项目功能清单做成MG动画介绍视频
人工智能·开源·音视频
风雅GW4 小时前
局域网访问为何少一半配置页:DSH 的安全边界设计复盘
人工智能
衡石科技4 小时前
同一句业务问题,怎样持续问对数?衡石 ChatBI 的语义准备与回归验证
人工智能·数据挖掘·回归·chatbi
新新学长搞科研4 小时前
【会议征稿 | 杭州站】第七届机器学习与计算机应用国际学术会议 (ICMLCA 2026)
人工智能·机器学习·计算机
找方案4 小时前
从用户画像到智能定价:81页方案拆解“大数据决策与支撑平台”怎么落地
大数据·人工智能·数据分析·智慧城市·用户画像
紧跟先前的步伐4 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
一只爱撸猫的程序猿5 小时前
我让 Agent 干活,自己只做审核:一个真实项目的六次"人审拦截"
人工智能