基于OpenCV的人脸检测软件(含Python源码+UI界面+图文详解)

简介: 基于OpenCV的人脸检测软件(含Python源码+UI界面+图文详解)

1. 前言

人脸检测(Face Detection),就是给一幅图像,找出图像中的所有人脸位置,通常用一个矩形框框起来,输入是一幅图像img,输出是若干个包含人脸的矩形框位置。它是人脸识别的基础,人脸检测与人脸识别的主要区别在于人脸检测仅需要检测图片中的人脸位置,而人脸识别则是检测到人脸位置后,还需要与数据库中的人脸数据进行匹配,识别出检测到的人脸是属于哪个具体的人。本文基于OpenCV对人脸检测进行了实现与界面展示,后续会进一步更新关于人脸识别相关的功能开发。

下面是博主设计的简洁软件界面,能够实现图片、视频及摄像头的人脸检测功能,还提供了图片、视频检测结果保存功能。感兴趣的小伙伴可以自己试试。

觉得不错的小伙伴,感谢点赞、关注加收藏!如果大家有任何建议或意见,欢迎在评论区留言交流!

软件的初始界面如下图所示:

2. 软件效果演示

首先我们通过动图看一下人脸检测的实际效果,该软件主要实现的功能是对图片、视频和摄像头画面中的人脸位置进行检测,识别的结果可视化显示在界面和图像中,演示效果如下。

2.1 图片人脸检测

本软件可以通过自行选择图片文件进行人脸检测,点击图片选择按钮图标选择图片后,会直接显示人脸检测的结果:包括人脸数量、位置信息,可通过下拉选框查看单独某个人脸的检测结果,并且可以点击保存按钮,保存检测的结果图片。本功能的界面展示如下图所示:

2.2 视频人脸检测

本软件可以通过自行选择一段视频进行人脸检测,点击视频按钮可选择待检测的视频,软件会逐帧检测人脸情况,并将检测结果记录在下方的表格中,并且可以点击保存按钮,保存视频检测的结果。本功能的界面展示如下图所示:

2.3 摄像头人脸检测

在真实使用的场景中,我们往往利用设备摄像头获取实时画面,同时需要对画面中的人脸进行检测,因此本文同样实现了摄像头的人脸检测功能。点击摄像头按钮后即可开启摄像头,软件显示实时画面并开始检测画面中的人脸位置,本功能的界面展示如下图所示:

3. 人脸检测原理介绍

3.1 基本原理

人脸检测主要有两大类算法:基于知识和基于统计。

基于知识的方法主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来检测人脸。常用方法:模板匹配、人脸特征、形状与边缘

、纹理特性、颜色特征。

基于统计的方法则将人脸看作一个整体的模式——二维像素矩阵,从统计的观点通过大量人脸图像样本构造人脸模式空间,根据相似度量来判断人脸是否存在。常用方法:主成分分析与特征脸、神经网络方法、支持向量机、隐马尔可夫模型、Adaboost算法。

本文主要使用OpenCV的Haar分类器对人脸进行检测。Haar分类器实际上是Boosting算法的一个应用,Haar分类器用到了Boosting算法中的AdaBoost算法,只是把AdaBoost算法训练出的强分类器进行了级联,并且在底层的特征提取中采用了高效率的矩形特征和积分图方法。

Haar分类器算法的要点如下:

① 使用Haar-like特征做检测。

② 使用积分图(Integral Image)对Haar-like特征求值进行加速。

③ 使用AdaBoost算法训练区分人脸和非人脸的强分类器。

④ 使用筛选式级联把强分类器级联到一起,提高准确率。

3.2 使用Haar级联检测器对图片进行人脸检测

# coding:utf-8
import cv2
# 绘图展示
def cv_show(name,img):
  cv2.imshow(name, img)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
# 读取图片
img = cv2.imread('images/test1.jpg')
# cv_show('img',img)
# 转为灰度图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# cv_show('gray', img_gray)
# 构造harr检测器
face_detector = cv2.CascadeClassifier('models/haarcascade_frontalface_default.xml')
# 对图像中的人脸进行检测
detections = face_detector.detectMultiScale(img_gray,scaleFactor=1.3)
# 解析并画出人脸方框
for x,y,w,h in detections:
  cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]])

参数说明:

image:待检测图片,一般为灰度图像加快检测速度

scaleFactor:设置一个缩小的比例,对图像进行逐步缩小来检测,这个参数设置的越大,计算速度越快,但可能会错过了某个大小的人脸。默认1.1,其实可以根据图像的像素值来设置此参数,像素大缩小的速度就可以快一点,通常在1~1.5之间。

minNeighbors:确定一个人脸框至少要有n个候选值 越高质量越好(默认为3)

minSize和maxSize用来限制得到的目标区域的范围大小。即人脸框的最大最小尺寸 如minSize=(40,40),表示人脸框最小不得小于40*40。

根据实际情况以及需求,可对以上几个参数进行调整,以达到最佳的检测效果。

基于上述原理,为了便于展示与学习。博主最终开发出了一套完整的UI界面可以对图片、视频及摄像头中的人脸进行检测,并对整个软件进行了详细测试。完整的UI界面、测试图片视频、代码文件,均已打包上传,感兴趣的朋友可以通过下载链接获取。

【获取方式】

本文涉及到的完整全部程序文件:包括python源码、UI文件等(见下图),获取方式见文末:

注意:该代码采用Pycharm+Python3.8开发,运行界面的主程序为MainProgram.py,测试图片脚本可运行img_test.py;测试摄像头脚本可运行cameraTest.py;测试视频脚本可运行videoTest.py。为确保程序顺利运行,请按照requirements.txt配置Python依赖包的版本。

相关文章
|
30天前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
44 3
|
1月前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
38 1
|
1月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
80 1
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能质量检测与控制
使用Python实现深度学习模型:智能质量检测与控制 【10月更文挑战第8天】
165 62
使用Python实现深度学习模型:智能质量检测与控制
|
1月前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
58 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
136 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
12天前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
51 1
|
1月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
59 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
21天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
1月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。