OpenCV 实时人脸检测

简介: 目的试验OpenCV的实时图像捕获实时窗口内对每一帧的图片进行处理识别视频窗口内的人脸,并用一个矩形画出来人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等。

目的

  • 试验OpenCV的实时图像捕获
  • 实时窗口内对每一帧的图片进行处理
  • 识别视频窗口内的人脸,并用一个矩形画出来

人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等。

对于opencv的人脸检测方法,有点是简单,快速;存在的问题是人脸检测效果不好。如图3-1所示,正面/垂直/光线较好的人脸,该方法可以检测出来,而侧面/歪斜/光线不好的人脸,无法检测。因此,该方法不适合现场应用。对于dlib人脸检测方法 ,效果好于opencv的方法,但是检测力度也难以达到现场应用标准。

本文中,我们采用了基于深度学习方法的mtcnn人脸检测系统mtcnn人脸检测方法对自然环境中光线,角度和人脸表情变化更具有鲁棒性,人脸检测效果更好;同时,内存消耗不大,可以实现实时人脸检测。本文中采用mtcnn是基于python和tensorflow的实现(代码来自于davidsandberg,caffe实现代码参见:kpzhang93)。mtcnn检测出人脸后,对人脸进行剪切并resize为(96,96,3)作为facenet输入,如图3-3所示。

设计思路:

通过OpenCV打开本机上的摄像头

cameraCapture = cv2.VideoCapture(0)

开始第一帧图像的捕获,这个方法用来测试当前的摄像头是否可用

success, frame = cameraCapture.read()

把我在“OpenCV初步”中讲述的从静态图片中识别人脸的代码提取出来成为一个show_face函数:

def show_faces (img) :
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 图像灰化
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 识别人脸
    for (x, y, w, h) in faces:
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 在人脸区域画一个正方形出来
    cv2.imshow("Camera", img)

如果第一帧图像捕获成功则可以认为本机的摄像头可以,并建立一个无限循环(退出条件为敲击键盘),继续对下一帧图像进行捕获,然后显示到观察窗口上。

while success and cv2.waitKey(1) == -1:
    success, frame = cameraCapture.read()
    show_faces(frame)

以下为本例的全部代码:

# coding=utf-8

import cv2
img_size = 128
face_cascade = cv2.CascadeClassifier(r'./data/haarcascades/haarcascade_frontalface_default.xml')

# 打开摄像头并开始读取画面
cameraCapture = cv2.VideoCapture(0)
success, frame = cameraCapture.read()

def show_faces (img) :
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 图像灰化
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)  # 识别人脸
    for (x, y, w, h) in faces:
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 在人脸区域画一个正方形出来
    cv2.imshow("Camera", img)

while success and cv2.waitKey(1) == -1:
    success, frame = cameraCapture.read()
    show_faces(frame)

cameraCapture.release() # 关闭摄像头
cv2.destroyAllWindows() # 释放所有被打开的窗口资源
相关文章
|
4月前
|
算法 IDE 开发工具
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
7月前
|
计算机视觉 C++ Python
OpenCV人脸检测打卡系统
OpenCV人脸检测打卡系统
53 0
|
4月前
|
XML 算法 计算机视觉
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
98 1
|
1月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
159 0
|
4月前
|
编解码 计算机视觉 Ruby
Python图像处理(二)opencv人脸检测
人脸检测部分,我们需要使用到opencv,看清楚,是opencv,不是opencv_python 首先,我们打开opencv的官网:opencv.org/# 当然,纯英文的。 我们找到library目录下的release目录: 选择你需要的版本,下载对应的平台就好。如下图所示,我当然要尝试最新版的了。 下载完成之后,双击安装就可以了。 我理解的人脸检测呢,其实就是opencv根据采集到的图像与其库中预置的人脸特征去比对,有符合人脸特征的,就说明采集到的图像是有人脸的。初学,我也不清楚我说的是否正确。 有不对的地方,欢迎大佬指出。
48 0
|
8月前
|
文字识别 算法 IDE
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
11月前
|
机器学习/深度学习 人工智能 算法
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测
214 0
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
|
机器学习/深度学习 算法 Shell
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
93 0
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
|
机器学习/深度学习 人工智能 数据处理
基于opencv的人脸检测
基于opencv的人脸检测
154 0
基于opencv的人脸检测
|
机器学习/深度学习 数据可视化 计算机视觉
人脸检测实战高级:使用 OpenCV、Python 和 dlib 完成眨眼检测
今天,我们使用面部标记和 OpenCV 检测视频流中的眨眼次数。 为了构建我们的眨眼检测器,我们将计算一个称为眼睛纵横比 (EAR) 的指标,该指标由 Soukupová 和 Čech 在他们 2016 年的论文《使用面部标记的实时眨眼检测》中介绍。
362 0
人脸检测实战高级:使用 OpenCV、Python 和 dlib 完成眨眼检测