当前位置: 首页 > 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算法相对简单,但它很好地演示了人脸识别的基本原理,对于理解更复杂的系统有很大帮助。

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

http://www.xdnf.cn/news/359155.html

相关文章:

  • 变桨系统升级新引擎:CAN转ModbusTCP协议转换技术破解风电数字化困局
  • 在 Spring Boot 中实现动态线程池的全面指南
  • Github 2025-05-09 Java开源项目日报 Top10
  • Error parsing column 10 (YingShou=-99.5 - Double) dapper sqlite
  • 坐席业绩可视化分析工具
  • AbMole:QS-21的作用机理及免疫应用
  • J-Scope的RTT模式
  • 智慧工会服务平台建设方案Word(23页)
  • 智慧农业运维平台养殖—传感器管理监控设计—仙盟创梦IDE
  • AI日报 · 2025年5月09日|OpenAI Deep Research 上线 GitHub Connector Beta
  • 爬虫学习————开始
  • 健康养生:雕琢生命的细腻艺术
  • springboot3 + mybatis-plus3 创建web项目实现表增删改查
  • isaacsim基础基础教程,以及如何添加fixedjoint,在Isaacsim中什么是prim,什么是xform
  • IoT无线组网模块,万物互联的底层通信基石
  • OpenHarmony 以太网卡热插拔事件接口无效
  • 【高级IO】多路转接之单线程Reactor
  • 实验-有限状态机2(数字逻辑)
  • 【数据结构】算法的复杂度
  • Web前端VSCode如何解决打开html页面中文乱码的问题(方法2)
  • UE5.3 C++ 房屋管理系统(一)
  • 《计算机三级(网络技术)备考攻略》
  • ubuntu 24.04 error: cannot uninstall blinker 1.7.0, record file not found. hint
  • Kaggle图像分类竞赛实战总结详细代码解读
  • MySQL如何优雅的执行DDL
  • 关于大数据的基础知识(二)——国内大数据产业链分布结构
  • K8S扩缩容及滚动更新和回滚
  • EasyPoi相关文档与使用工具类
  • MySQL 8.0 OCP 英文题库解析(二)
  • JAVA包装类