基于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依赖包的版本。

相关文章
|
9天前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
29 4
|
4天前
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
40 19
|
10天前
|
达摩院 语音技术 异构计算
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
|
11天前
|
异构计算 Python
30行代码实现一个带UI界面的图片背景移除工具:并附带web网页
人工智能技术正处于蓬勃发展中,移除图片背景的方法众多,涵盖了各式各样的实现途径和模型。然而,这些方法往往在安装和配置环境方面稍显复杂。今天,介绍一种极其简便的方法——大约30行代码,就能实现这一功能。虽然相比之下可能稍显简单,但对于不太苛刻的需求来说,这种方法颇为方便实用。
Pycharm主题切换(禁用)导致UI界面显示异常解决
问题记录 UI显示异常 安装多个主题时,当禁用某些主题,切换回one dark theme时,发现代码编辑窗口背景变成白色,菜单栏其他地方背景为黑色 问题原因 查看Settings>Editor>Color Scheme>General,发现方案被改为-Classic Light
|
26天前
|
机器学习/深度学习 监控 自动驾驶
如何使用 Python 和 OpenCV 进行实时目标检测
如何使用 Python 和 OpenCV 进行实时目标检测
|
23天前
|
算法 计算机视觉 Python
python+opencv实现车牌定位
python+opencv实现车牌定位
|
25天前
|
机器学习/深度学习 监控 算法
使用Python和OpenCV实现简单的人脸识别系统
使用Python和OpenCV实现简单的人脸识别系统
27 0
|
1月前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第4章 深度估计与分割
openCV 3计算机视觉 Python语言实现 笔记 第4章 深度估计与分割
|
1月前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像