OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)

目录

概述

具体实现

1.加载分类器

2.打开摄像头并识别人脸

3.处理人脸并检测是否微笑

效果

总结


概述

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,广泛应用于图像处理和视频分析等领域。在OpenCV的众多功能中,人脸微笑检测是一项极具吸引力的技术,它结合了人脸检测技术和表情分析技术,能够自动识别和定位图像或视频中人脸的微笑表情。这一技术在人机交互、情感分析、安全监控以及用户体验研究等领域展现出巨大的应用潜力和价值。

人脸微笑检测的实现过程通常包括两个主要步骤:首先,通过人脸检测技术定位图像或视频中的人脸区域;然后,在检测到的人脸区域上应用微笑检测算法,判断人脸是否呈现微笑表情。

具体实现

1.加载分类器

模型资源在文章开头

python 复制代码
#导入opencv库,安装可用 pip install opencv-python
import cv2
#加载人脸检测模型
face = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#加载微笑检测模型
smile = cv2.CascadeClassifier('./haarcascade_smile.xml')

2.打开摄像头并识别人脸

python 复制代码
cap = cv2.VideoCapture(0)  # 初始化摄像头
while True:  # 处理每一帧
    ret, frame = cap.read()  # 读取一帧
    frame = cv2.flip(frame, 1)  # 图片翻转, 水平翻转
    # 没有读到,直接退出
    if ret is None:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 灰度化(彩色BGR-->灰度Gray)

    face_detect = face.detectMultiScale(gray,  # 人脸检测
                                        scaleFactor=1.1,
                                        minNeighbors=5,
                                        minSize=(5, 5))

objects = cv2.CascadeClassifier.detectMultiScale( image,scaleFactor,minNeighbors, minSize,maxSize)

其中,各个参数及返回值的含义如下。
·image: 待检测图像,通常为灰度图像。
·scaleFactor: 表示在前后两次相继扫描中搜索窗口的缩放比例。识别,扫描,按照不同比例来进行扫描
·minNeighbors: 表示构成检测目标的相邻矩形的最小个数。在默认情况下,该参数的值为 3,

表示有 3 个以上的检测标记存在时才认为存在人脸。如果希望提高检测的准确率可以将该参数的值设置得更大,

但这样做可能会让一些人脸无法被检测到。
·minSize: 目标的最小尺寸,小于这个尺寸的目标将被忽略。
·maxSize: 目标的最大尺寸,大于这个尺寸的目标将被忽略。通常情况下,将该可选参数省略即可。

若 maxSize 和 minSize 大小一致,则表示仅在一个尺度上查找目标。
·objects: 返回值,目标对象的矩形框向量组。该值是一组矩形信息,

包含每个检测到的人脸对应的矩形框的信息 (x轴方向位置、y轴方向位置、宽度、高度)。

3.处理人脸并检测是否微笑

python 复制代码
    # ==================处理每个人脸=======================
    for (x, y, w, h) in face_detect:  #得到人脸所在位置
        #绘制方框
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        # 提取人脸所在区域
        smile_rect = gray[y:y + h, x:x + w]
        # 微笑检测,仅在人脸区域内检测
        smile_detect = smile.detectMultiScale(smile_rect,
                                              scaleFactor=1.5,
                                              minNeighbors=5,
                                              minSize=(50, 50))

        for (sx, sy, sw, sh) in smile_detect:
            # 显示文字"smile"表示微笑了
            cv2.putText(frame, 'smile', (x, y), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255, 0), 2)
    # 显示结果
    cv2.imshow('frame', frame)
    key = cv2.waitKey(1)
    if key == 27:  #27为键盘Esc键
        break

cv2.destroyAllWindows()  #关闭打开的图像窗口
cap.release()  #释放视频捕获对象

cv2.putText(image, ' 绘制内容 ', (绘制位置), 字体类型, 字体大小, (字体颜色), 线条粗细)

效果

该图为打开摄像头后,将手机图片放置摄像头前检测的效果

总结

通过OpenCV实现人脸微笑检测,不仅能够帮助我们更好地理解和分析人类的情感状态,还能够为各种智能应用提供丰富的情感信息支持。例如,在人机交互系统中,通过检测用户的微笑表情,系统可以自动调整交互策略,提供更加贴心、个性化的服务;在安全监控领域,通过实时监测人脸的微笑表情,可以及时发现异常情况,提高安全防范能力。

相关推荐
AI慧聚堂10 分钟前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
盛世隐者11 分钟前
【pytorch】循环神经网络
人工智能·pytorch
cdut_suye23 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
开发者每周简报43 分钟前
微软的AI转型故事
人工智能·microsoft
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
普密斯科技1 小时前
手机外观边框缺陷视觉检测智慧方案
人工智能·计算机视觉·智能手机·自动化·视觉检测·集成测试
四口鲸鱼爱吃盐1 小时前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
lishanlu1361 小时前
Pytorch分布式训练
人工智能·ddp·pytorch并行训练
日出等日落2 小时前
从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互
人工智能·语言模型·自然语言处理
三木吧2 小时前
开发微信小程序的过程与心得
人工智能·微信小程序·小程序