【OpenCV-Python】18 使用OpenCV进行人脸检测
在静态图像或视频中检测人脸的操作十分相似。视频人脸检测只是从摄像头读出每帧图像,然后采用静态图像中人脸检测方法进行检测。视频中人脸检测还涉及到其他概念,例如跟踪,而静态图像中的人脸识别就没有这样的概念,但它们的基本理论一致。
静态图像的人脸检测
人脸检测首先是加载图像并检测人脸,这也是最基本的一步。为了使所得到的结果有意义,可在原始图像的人脸周围绘制矩阵框。
其中项目中cascades/haarcascades文件夹包含了所有OpenCV的人脸识别的XML文件,用于检测静止文件、视频、摄像头所得到图像中的人脸。
树状图
.
├── image_detection.py
├── video_detection.py
├── images
│ └──people.jpg
└──cascades├── haarcascade_frontalface_default.xml └── haarcascade_eye.xml
代码
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 1 21:07:47 2021@author: gkm0120
"""
# image_detection.py
import cv2filename = 'D:/Python/Test_code/pycv/images/people.jpg'def detect(filename):face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')img = cv2.imread(filename)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# face_cascade.detectMultiScale(image,scaleFactor,minNeighbor)# 参数2是人脸检测过程中每次迭代图像的压缩率,参数3是每个人脸矩形保留近邻数目的最小值faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x,y,w,h) in faces:# cv2.rectangle允许通过坐标来绘制矩形(x和y表示左上角的坐标,w和h表示人脸矩形的宽度和高度)img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)# 创建namedWindow的实例,并显示处理后的图像cv2.namedWindow('Face Detection!!')cv2.imshow('Face Detection!!', img)cv2.imwrite('./face_detection.jpg', img)cv2.waitKey(0)detect(filename)
图例
people.jpg | face_detection.jpg |
视频中的人脸检测
在视频的帧上重复静态人脸检测的过程就能完成视频(如摄像头的输入或视频文件)中的人脸检测。
以下代码主要是:打开摄像头,读取帧,检测帧中的人脸,扫描检测到的人脸的眼睛,对人脸绘制蓝色的矩形框,对眼睛绘制绿色的矩形框。
代码
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 2 10:59:15 2021@author: gkm0120
"""
# video_detection.py
import cv2def detect():face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')camera = cv2.VideoCapture(0)# 初始化摄像头,0表示使用第一个摄像头# 捕获帧,转换为灰度图像。read()函数返回两个值:布尔值(表示是否成功读取帧)、帧本身。while (True):ret, frame = camera.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 5)#img = cv2.imread(frame)for (x,y,w,h) in faces:img = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)roi_gray = gray[y:y+h, x:x+w]# 限制对眼睛搜索的最小尺寸为40*40像素,可去掉所有假阳性。然后调试参数(特征的最大尺寸、比例因子、近邻的数量),达到预期。eyes = eye_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40,40))# 循环输出检测眼睛的结果,并绘制绿色的矩形框for (ex,ey,ew,eh) in eyes:cv2.rectangle(img,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(0,255,0),2)cv2.imshow("camera", frame)if cv2.waitKey(1000 // 12) & 0xff == ord("q"):breakcamera.release()cv2.destroyAllWindows()if __name__ == "__main__":detect()
图例
注:在眼睛检测中还有另外几个参数。detectMultiscale()函数有许多可选参数:在人脸检测中。默认选项足以检测人脸。但是眼睛是一个比较小的人脸特征,并且胡子或鼻子的本身阴影(self-casting shadow)以及帧的随机阴影都会产生假阳性(false positive)。
【OpenCV-Python】18 使用OpenCV进行人脸检测相关推荐
- OpenCV中基于LBP算法的人脸检测测试代码
下面是OpenCV 3.3中基于CascadeClassifier类的LBP算法实现的人脸检测,从结果上看,不如其它开源库效果好,如libfacedetection,可参考 https://blog. ...
- 【OpenCV】Pyqt界面+摄像头实现人脸检测+安全帽识别,最终导出为exe文件
文章目录 前言 一.界面设计 二.相关代码 三.导出exe文件 总结 前言 接上节的内容.设计好的界面如下: 实现的功能: 1.通过摄像头进行截图,把截图上传到OneNetAI服务器进行人脸检测. 2 ...
- opencv python考勤_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)
一. 门禁考勤系统硬件设计 1 .硬件总体结构 PC端的intel处理器作为硬件平台的核心,是衡量系统能否达到标准的主要标志.本文结合考勤系统,采用intel i5处理器的PC与51单片机共同构建了门 ...
- 使用 OpenCV与 HAAR 级联算法进行人脸检测和人脸识别
AI人脸识别是一种从数字图像或视频帧中识别或验证人脸的技术.人类可以毫不费力地快速识别面部.这对我们来说是一项轻松的任务,但对计算机来说却是一项艰巨的任务.因为存在各种复杂性,例如低分辨率.遮挡.光照 ...
- Python 3 利用 Dlib 实现人脸检测和剪切
0. 引言 利用 Python 开发,借助 Dlib 库进行人脸检测 / face detection 和剪切: 1. crop_faces_show.py : 将检测到的人脸剪切下来,依次排序平 ...
- python 图像iou_Python MTCNN(人脸检测)项目附代码讲解(2)-NMS/IOU工具介绍
对于MTCNN中使用的原理工具,这一节分为代码的三部分(NMS,IOU,框的改变),对于图像金字塔.三个网络(R.P.ONET)和数据集的处理部分放在模型搭建中来讲,要不突然讲起来感觉太虚空,没办法很 ...
- 关于OpenCV for Python入门-DNN模块实现人脸检测
OpenCV在OpenCV增加了DNN模块,DNN模块可以加载预先训练好的Caffe/tensorflow等模型数据,基本支持所有主流的深度学习框架训练生成与导出模型数据加载. 下面用到的SSD人脸检 ...
- 如何用OpenCV在Python中实现人脸检测
选自towardsdatascience 作者:Maël Fabien 机器之心编译 参与:高璇.张倩.淑婷 本教程将介绍如何使用 OpenCV 和 Dlib 在 Python 中创建和运行人脸检测算 ...
- 25 行 Python 代码实现人脸检测——OpenCV 技术教程
安装 OpenCV 首选,你需要找到对应你的操作系统的正确设置文件. 我发现,安装 OpenCV 是最难的一个环节.如果你遇到奇怪的.无法解释的错误,有可能是库崩溃了.32 与 64 比特的兼容问题等 ...
- 基于opencv的人脸检测与识别(python)(1)
基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...
最新文章
- 机器学习梯度下降法举例
- AI 摄像头翻车:把光头裁判误为足球,观众花钱看了个寂寞...
- spring整合webservice
- PHP版本区别5与7:性能 64位 运算符 输入类型 返回类型 匿名类;7改进1.变量存储空间2.数组结构3.函数调用机制
- Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
- 计算机科普小知识——U盘格式化
- 易生信转录组培训第一期总结
- mysql的sql执行过程和explain语句
- 高级GIT教程-如何使用GIT调试代码?
- 10_官方例子程序01
- centos rpm
- 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导
- AJPFX关于子类父类中的构造
- 数据结构 严蔚敏 习题总结
- 华为 鸿蒙出处,华为商标名“鸿蒙”原来出自《山海经》,网友直呼:“太燃了”...
- 特殊字符存入mysql_数据库中特殊字符的存取
- sql查询实例1(学生表_课程表_成绩表_教师表)
- w10共享网络没有计算机,win10网络共享找不到对方电脑怎么办
- 什么是通信原理?原来这么简单
- Java游戏碟中谍_MapRedcue的demo(协同过滤)