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

相关文章
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
412 1
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
682 10
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
535 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
800 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
数据可视化 测试技术 Linux
基于Python后端构建多种不同的系统终端界面研究
【10月更文挑战第10天】本研究探讨了利用 Python 后端技术构建多样化系统终端界面的方法,涵盖命令行界面(CLI)、图形用户界面(GUI)及 Web 界面。通过分析各种界面的特点、适用场景及关键技术,展示了如何使用 Python 标准库和第三方库(如 `argparse`、`click`、`Tkinter` 和 `PyQt`)实现高效、灵活的界面设计。旨在提升用户体验并满足不同应用场景的需求。
329 1
|
机器学习/深度学习 计算机视觉 Python
opencv环境搭建-python
本文介绍了如何在Python环境中安装OpenCV库及其相关扩展库,包括numpy和matplotlib,并提供了基础的图像读取和显示代码示例,同时强调了使用Python虚拟环境的重要性和基本操作。
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
4301 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
343 4
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)

推荐镜像

更多
下一篇
开通oss服务