计算机识别中的人脸检测

一、介绍

本次将使用OpenCV的Haar级联分类器对一张静态图片进行人脸检测,在检测到的每个人脸周围绘制绿色矩形框,并输出检测到的人脸数量和位置坐标。

二、Haar级联分类器工作原理

特征:使用Haar-like矩形特征(边缘、线段、中心特征),通过积分图快速计算。

训练:Adaboost算法挑选关键特征并组合成弱分类器,再级联成强分类器。

检测:滑动窗口在不同尺度的图像金字塔上扫描,每一级快速排除非人脸区域,最终通过所有级的区域被判定为人脸。

三、核心代码讲解

3.1 首先导入cv2,读取图像。

3.2将原图转换为灰度图

Haar级联分类器要求输入为灰度图像(单通道),因为特征计算基于亮度差异,忽略颜色信息可以减少计算量并提高检测稳定性。

cv2.cvtColor()将BGR转换为灰度

3.3加载Haar级联分类器

cv2.CascadeClassifier()创建一个级联分类器对象。

cv2.data.haarcascades是OpenCV自带的预训练Haar特征XML文件所在目录的路径,haarcascade_frontalface_default.xml是用于检测正面人脸的经典模型。

该分类器基于AdaBoost训练,包含多个阶段的强分类器,通过级联方式快速排除非人脸区域。

3.4执行人脸检测

detectMultiScale()是核心检测函数,返回一个列表,每个元素为 (x, y, w, h) 表示人脸矩形左上角坐标和宽高。

scaleFactor=1.05:图像金字塔的缩放比例。每次将图像缩小为原来的 1/1.05 ≈ 0.952,以检测不同大小的人脸。值越接近 1,搜索的尺度越精细,耗时越长,但漏检率降低;值过大(如 1.3)则速度更快但可能漏检小脸。这里 1.05 较精细。

minNeighbors=9:每个候选矩形至少需要多少个邻近检测框才被保留。值越大,对误检的抑制越强,但也会漏掉一些真正的人脸(尤其当人脸被遮挡或角度不佳时)。常用范围 3~6,这里设置为 9 较为严格,适合高精度需求。

minSize=(8,8):检测目标的最小尺寸(像素)。小于该尺寸的人脸会被忽略,可以加快检测速度并过滤噪声。这里 8×8 非常小,几乎能检测任何微小人脸(但实际效果受模型训练尺度影响)。

输出faces是一个二维数组,例如 [[112, 45, 80, 80], [300, 150, 60, 60]]

3.5 绘制矩形框

遍历每个人脸矩形,在原图上绘制绿色边框。

cv2.rectangle()参数:图像、左上角坐标、右下角坐标、颜色(BGR,此处是绿色)、线宽。

相关推荐
PFFstronger1 小时前
基于 Dify 知识库 + Ollama 大模型,自动生成测试用例并导出 XMind 的完整方案
人工智能·python·测试用例·xmind
文心快码BaiduComate1 小时前
从“代码补全”到“自主交付”:文心快码全私有化部署落地中信百信银行核心研发链路
人工智能·程序员·文心快码
__如果1 小时前
Medical Benchmark
人工智能
β添砖java1 小时前
深度学习32Transformer、BERT、
人工智能·深度学习
2601_962387821 小时前
学习笔记DAY1:Python编程从0开始学起,从自学入门到精通
人工智能·网络爬虫·学习笔记·网页开发·python编程
TechEdu2026062 小时前
[人工智能]AI芯片家族:英伟达、AMD、英特尔、高通与华为
人工智能·ai
具身AGI2 小时前
物理AI人类学习路线的答案
人工智能·学习
johnsong2 小时前
AI前沿日报 2026-09-06
人工智能
海鸥812 小时前
AIOps(智能运维)理解
运维·人工智能