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

目录
打赏
0
0
0
0
128
分享
相关文章
基于Python+Vue开发的商城管理系统源码+运行步骤
基于Python+Vue开发的商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
29 7
基于Python+Vue开发的反诈视频宣传管理系统源码+运行步骤
基于Python+Vue开发的反诈视频宣传管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的反诈宣传管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
23 6
基于Python+Vue开发的家具商城管理系统源码+运行步骤
基于Python+Vue开发的家具商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的家具商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
31 8
基于Python+Vue开发的婚恋交友管理系统源码+运行步骤+课程作品
基于Python+Vue开发的婚恋交友管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的婚恋相亲交友系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习问题可以留言哦
28 9
基于Python+Vue开发的鲜牛奶订购管理系统源码+运行
基于Python+Vue开发的鲜牛奶订购管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的牛奶订购管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
17 1
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
51 28
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
17天前
|
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
27 4
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。

热门文章

最新文章