当前位置: 首页 > news >正文

基于OpenCV的人脸识别:EigenFaces算法

文章目录

    • 引言
    • 一、概述
    • 二、代码解析
      • 1. 准备工作
      • 2. 加载训练图像
      • 3. 设置标签
      • 4. 准备测试图像
      • 5. 创建和训练识别器
      • 6. 进行预测
      • 7. 显示结果
    • 三、代码要点
    • 总结

引言

人脸识别是计算机视觉领域的一个重要应用,今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFaces算法实现简单的人脸识别系统。

一、概述

本文演示了如何使用OpenCV的**EigenFaceRecognizer对预先准备好的面部图像进行训练,然后对新的测试图像进行识别。我们使用了名为为"linyuner"和"chendulin"的多张照片作为训练集,然后测试系统能否正确识别新输入的照片。

二、代码解析

1. 准备工作

首先导入必要的库:

import cv2
import numpy as np

2. 加载训练图像

我们创建了一个空列表images来存储训练图像,并确保所有图像大小一致:

images = []  # 读取训练图像,注意:图片大小要一致
a = cv2.imread('linyuner 1.jpg', 0)  # 以灰度模式读取图像
a = cv2.resize(a,(120,180))  # 统一调整大小为120×180
b = cv2.imread('linyuner 2.jpg', 0)
b = cv2.resize(b,(120,180))
c = cv2.imread('chendulin 1.jpg', 0)
c = cv2.resize(c,(120,180))
d = cv2.imread('chendulin 2.jpg', 0)
d = cv2.resize(d,(120,180))images.append(a)
images.append(b)
images.append(c)
images.append(d)

3. 设置标签

为每张训练图像分配对应的标签:

labels = [0,0,1,1]  # 0代表linyuner,1代表chendulin

4. 准备测试图像

加载并预处理待识别的图像:

pre_image = cv2.imread('chendulin 3.jpg', 0)
pre_image = cv2.resize(pre_image,(120,180))

5. 创建和训练识别器

使用OpenCV的EigenFaceRecognizer:

recognizer = cv2.face.EigenFaceRecognizer_create(threshold=5000)
recognizer.train(images,np.array(labels))

6. 进行预测

label,confidence = recognizer.predict(pre_image)

7. 显示结果

将识别结果标注在原始图像上并显示:

dic={0:'linyuner',1:'chendulin',-1:'无法识别'}
print("这人是:",dic[label])
print('置信度为:',confidence)aa = cv2.putText(cv2.imread('chendulin 3.jpg').copy(), dic[label], (10, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.9, (0,0,255), 2)
aa = cv2.resize(aa,dsize=None,fy=0.6,fx=0.6)
cv2.imshow('xx',aa)
cv2.waitKey(0)

我们选择一张陈都灵的照片来进行验证
在这里插入图片描述
在这里插入图片描述

三、代码要点

  1. EigenFaces算法:这是基于PCA(主成分分析)的人脸识别方法,通过提取人脸图像的主要特征分量来进行识别。

  2. 图像预处理:所有图像被转换为灰度并调整为相同尺寸,这是大多数机器学习算法对输入数据的基本要求。

  3. 阈值设置threshold=5000参数设置了识别阈值,当置信度超过此值时,识别结果为"无法识别"。

  4. 置信度:置信度数值越小表示匹配度越高。

总结

通过这个简单的例子,我们展示了如何使用OpenCV快速实现一个基础的人脸识别系统。虽然EigenFaces算法相对简单,但它很好地演示了人脸识别的基本原理,对于理解更复杂的系统有很大帮助。

希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言讨论。

相关文章:

  • 【愚公系列】《Manus极简入门》028-创业规划顾问:“创业导航仪”
  • TB6600HG-富利威
  • AI与自然语言处理(NLP):从BERT到GPT的演进
  • NextPolish1.4.1 安装与使用-bioinformatics tools54
  • 按位宽提取十六进制值
  • 【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻
  • 催缴机器人如何实现停车费追缴“零遗漏”?
  • 【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
  • 2025数维杯数学建模B题完整限量论文:马拉松经济的高质量发展思路探索
  • 动态创建链表(头插法、尾插法)
  • Oracle链接服务器导致SQL Server异常终止
  • 相机的方向和位置
  • 波特五力分析——AI与思维模型【99】
  • 软件工程之软件项目管理深度解析
  • The 2024 ICPC Kunming Invitational Contest G. Be Positive
  • 人工智能 机器学习期末考试题
  • 8.1.Kubernetes进阶
  • 事务失效的场景
  • 【推荐笔记工具】思源笔记 - 隐私优先的个人知识管理系统,支持 Markdown 排版、块级引用和双向链接
  • Swagger 3.0 中注解详细示例
  • 冯德莱恩:欧美贸易谈判前不会前往美国会见特朗普
  • 人民财评:网售“婴儿高跟鞋”?不能让畸形审美侵蚀孩子身心
  • 深圳两家会所涉卖淫嫖娼各被罚7万元逾期未缴,警方发催告书
  • “降息潮”延续!存款利率全面迈向“1时代”
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神
  • 习近平同俄罗斯总统普京茶叙