计算机视觉OpenCV中的FisherFace人脸识别

一、介绍

本次实现了一个基于OpenCV的FisherFace人脸识别的小示例,先读取几张已知人脸作为训练集,再读取一张待识别图片,训练FisherFace模型并预测它属于谁,最后把识别结果用中文画在图片上显示。

二、核心代码讲解

2.1导入库

cv2:OpenCV,用于读图、缩放、人脸识别、显示图像。

numpy:用于数值操作,训练标签需要转成np.array。

PIL:Python Imaging Library,这里主要用来在OpenCV图像上绘制中文,因为OpenCV自带的cv2.putText不支持中文。

2.2中文绘制函数

cv2AddChineseText这个函数的作用是:在OpenCV图像上写中文。

img:OpenCV图像。

text:要写的中文。

position:文字左上角坐标,例如(30,10)。

textColor:RGB颜色,默认绿色(0,255,0)。

textSize:字号。

关键点:

1.OpenCV默认颜色顺序是BGR,而PIL默认是RGB。

所以先用cv2.cvtColor(img,cv2.COLOR_RGB2BGR)把OpenCV图像转成PIL能正确显示的颜色。

2.使用**ImageFont.truetype("simsun.ttc", textSize, encoding="utf-8")**加载宋体字体。

3.**draw.text(position, text, textColor, font=fontStyle)**在指定位置画文字。

4.最后再转回OpenCV的BGR格式,方便cv2.imshow显示。

2.3读取并预处理训练图片

cv2.imread(img,0):以灰度图方式读取图片。

FisherFace训练通常使用灰度图,因为颜色信息对身份识别帮助不大,还会增加计算量。

cv2.resize(a,(120 180)):把图片统一缩放成宽120、高180。所有人脸图片必须尺寸一致,否则无法训练。

images.append(a):把处理后的图片加入全局列表images。

2.4准备训练数据并读取待预测图片

前两张是黎明,标签为0。

后两张是安志杰,标签为1。

读取待识别图片liming.png,同样转灰度并缩放到120*180

模型理想情况下应预测为0,即"黎明"。

2.5创建FisherFace识别器

这行创建一个FisherFace人脸识别模型。

FisherFace的核心思想是:

使用LDA,线性判别分析。

它不只想PCA那样保留最大方差方向,而是利用类别标签,让同类样本尽量聚在一起,不同类样本尽量分开。

因此,FisherFace通常比EigenFace更适合做分类。

OpenCV内部通常会先做PCA降维,再做LDA,避免类内散度矩阵不可逆。

threshold=5000是预测阈值:

predict()会返回一个confidence,可以理解为距离或置信度,越小表示越可信。

如果最小距离大于5000,模型就认为无法识别,返回标签-1。

2.6训练模型和预测

images:训练图片列表,每张都是120*180的灰度图。

labels:对应标签,必须转成np.array。

训练后,模型会学习如何把不同人脸投影到一个更容易区分的空间。

label:预测出的类别标签。

confidence:置信度,越小越好。

2.7结果

相关推荐
澳鹏Appen1 小时前
AppenTalk | 当AI推理不再只是模型的事:Dan Roth谈智能体的真正边界
人工智能·大语言模型·智能体·大模型推理
Mr数据杨1 小时前
二手车价格预测实战解析 从 Kaggle 回归赛题到可落地估价方案
人工智能·数据分析·kaggle竞赛
Zzj_tju1 小时前
Embodied Agent 小环境:用状态日志解释成功、绕路与超时
人工智能·深度学习·机器学习·自然语言处理
微财经观圈2 小时前
AI 3D生成角色怎样套用预设动作?自动绑骨与动作测试步骤
人工智能·3d
是翎2 小时前
图解大语言模型部署
人工智能·驱动开发·深度学习·开源协议·imagen
joinwell522 小时前
写了“始终审批”,AI 为什么还是执行了?
人工智能
腾渊信息科技公司2 小时前
腾渊科技重磅出品——智能体交易信任架构实战:从KYA到可追溯审计的完整方案
人工智能·科技·aiagent·腾渊科技·腾渊信息科技
知几蜗牛2 小时前
AI写歌有了工程图:YuE2把旋律和和弦放回可编辑层
人工智能
CIO_Alliance2 小时前
AI微调系列(2)| QLoRA:一张卡微调700亿参数,显存是怎么省下来的
大数据·人工智能·深度学习·ai·企业ai转型·企业cio联盟