计算机识别中的人脸检测

一、介绍

本次将使用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,此处是绿色)、线宽。

相关推荐
民乐团扒谱机16 分钟前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
怎么全是重名1 小时前
VerdictAD
人工智能·异常检测·few-shot·zsas·异常分割
Bode_20021 小时前
具身智能机构设计的质量控制
人工智能
阿里云大数据AI技术1 小时前
EMR Serverless StarRocks × Lance:多模态分析与检索的云上实践
人工智能
SelectDB2 小时前
数据不能出境的数仓选型与迁移落地:四问框架、可复算成本与迁移三段式
人工智能
李青菜2 小时前
一个人 + AI,用 Tauri 2 和 Rust 写了个开源的 Windows 效率工具:提醒 + 笔记 + 启动器
人工智能
泯泷2 小时前
做 AI 产品,路线图该数“实验”,而不是数“功能”
人工智能·llm·产品
百度Geek说2 小时前
AI 内容核查怎么做:智能内容 AI 核查系统实践
人工智能
武子康3 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习