当前位置:   article > 正文

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

opencv笑脸识别

目录

概述       

 具体实现

1.加载分类器

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

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

效果

总结


概述       

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

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

 具体实现

1.加载分类器

模型资源在文章开头

  1. #导入opencv库,安装可用 pip install opencv-python
  2. import cv2
  3. #加载人脸检测模型
  4. face = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
  5. #加载微笑检测模型
  6. smile = cv2.CascadeClassifier('./haarcascade_smile.xml')

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

  1. cap = cv2.VideoCapture(0) # 初始化摄像头
  2. while True: # 处理每一帧
  3. ret, frame = cap.read() # 读取一帧
  4. frame = cv2.flip(frame, 1) # 图片翻转, 水平翻转
  5. # 没有读到,直接退出
  6. if ret is None:
  7. break
  8. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 灰度化(彩色BGR-->灰度Gray)
  9. face_detect = face.detectMultiScale(gray, # 人脸检测
  10. scaleFactor=1.1,
  11. minNeighbors=5,
  12. 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.处理人脸并检测是否微笑

  1. # ==================处理每个人脸=======================
  2. for (x, y, w, h) in face_detect: #得到人脸所在位置
  3. #绘制方框
  4. cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
  5. # 提取人脸所在区域
  6. smile_rect = gray[y:y + h, x:x + w]
  7. # 微笑检测,仅在人脸区域内检测
  8. smile_detect = smile.detectMultiScale(smile_rect,
  9. scaleFactor=1.5,
  10. minNeighbors=5,
  11. minSize=(50, 50))
  12. for (sx, sy, sw, sh) in smile_detect:
  13. # 显示文字“smile”表示微笑了
  14. cv2.putText(frame, 'smile', (x, y), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255, 0), 2)
  15. # 显示结果
  16. cv2.imshow('frame', frame)
  17. key = cv2.waitKey(1)
  18. if key == 27: #27为键盘Esc键
  19. break
  20. cv2.destroyAllWindows() #关闭打开的图像窗口
  21. cap.release() #释放视频捕获对象

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

效果

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

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/945794
推荐阅读
相关标签
  

闽ICP备14008679号