使用OpenCV实现基于EigenFaces的人脸识别

news2024/10/17 11:32:26

引言

人脸识别技术近年来得到了飞速的发展,它被广泛应用于安全监控、门禁系统、智能设备等领域。其中,基于特征脸(EigenFaces)的方法是最早期且较为经典的人脸识别算法之一。本文将介绍如何使用Python和OpenCV库实现一个简单的人脸识别系统,并通过具体的例子演示其使用方法。

环境准备

在开始之前,请确保已经安装了opencv-pythonnumpy库。如果还未安装,可以使用pip命令进行安装:

 

bash

深色版本

pip install opencv-python numpy

代码实现

下面是一个简单的使用EigenFaces方法进行人脸识别的例子。我们将从几个训练图像中提取特征,并利用这些特征来识别一个新的图像。

读取训练图像

import cv2
import numpy as np

images = []  # 读取训练图像,注意:图片大小需要一致
a = cv2.imread('data\\hg1.png', 0)
a = cv2.resize(a, (120, 180))
b = cv2.imread('data\\hg2.png', 0)
b = cv2.resize(b, (120, 180))
c = cv2.imread('data\\pyy1.png', 0)
c = cv2.resize(c, (120, 180))
d = cv2.imread('data\\pyy2.png', 0)
d = cv2.resize(d, (120, 180))

images.append(a)
images.append(b)
images.append(c)
images.append(d)

labels = [0, 0, 1, 1]

训练数据

初始化预测图像

pre_image = cv2.imread('data\\hg.png', 0)
pre_image = cv2.resize(pre_image, (120, 180))

预测数据

创建并训练EigenFaces识别器

# 创建Eigenfaces人脸识别器
recognizer = cv2.face.EigenFaceRecognizer_create()

# 使用训练数据(images和labels)来训练识别器
recognizer.train(images, np.array(labels))

进行人脸识别预测

# 对预测图像(pre_image)进行人脸识别预测
label, confidence = recognizer.predict(pre_image)

dic = {0: 'hg', 1: 'pyy'}
print('这人是:', dic[label])
print('置信度为:', confidence)

显示结果

# 使用OpenCV在图像上标注识别结果
aa = cv2.putText(cv2.imread('data\\hg.png').copy(), dic[label], (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
cv2.imshow('xx', aa)
cv2.waitKey(0)

输出结果

代码解析

  1. 读取训练图像:从指定路径读取训练图像,并统一调整大小以适应算法需求。
  2. 初始化预测图像:同样,读取预测图像并调整大小。
  3. 创建识别器:使用cv2.face.EigenFaceRecognizer_create()创建一个EigenFaces人脸识别器对象。
  4. 训练识别器:通过调用recognizer.train()方法,并传入训练图像和对应的标签来训练识别器。
  5. 预测:利用训练好的识别器对预测图像进行分类,并得到预测结果和置信度。
  6. 结果显示:在预测图像上标注识别结果,并显示图像。

总结

通过上述代码,我们实现了基于EigenFaces的人脸识别。尽管EigenFaces方法在处理光照变化和姿势变化等方面存在局限性,但它依然是理解人脸识别原理的一个很好的起点。随着深度学习技术的发展,如今已经有更为先进的方法如Deep Learning-based方法能够达到更高的准确率。然而,对于初学者来说,从经典的算法开始学习仍然是非常有益的。希望这篇博客能够帮助你入门人脸识别技术,并激发你探索更复杂算法的兴趣。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】每日一题 2024_10_15 三角形的最大高度(枚举、模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:三角形的最大高度 代码与解题思路 久违的简单题 这道题读完题目其实不难想到有两条路可以走: 1、题目很明显只有两种情况,枚举是第一个球是红球还是蓝球这两种情…

导数的概念及在模型算法中的应用

一. 导数概念与计算 1. 导数的物理意义: 瞬时速率。一般的,函数yf(x)在x处的瞬时变化率是 2. 导数的几何意义: 曲线的切线,当点趋近于P时,直线 PT 与曲线相切。容易知道,割线的斜率是当点趋近于 P 时&…

UE5学习笔记25-游戏中时间同步

一、原因 1.由于网络问题会导致服务器上的时间和客户端上获得的时间不一致 二、解决方法 在程序启动时向服务器请求服务器的时间返回给客户端并获得客户端发送消息的往返的时间,在获得客户端上的时间,用服务器上获得的时间加上往返时间减去客户端上的时…

稳字诀! 洞见 强者的社交格局:从不恋战——早读(逆天打工人爬取热门微信文章解读)

都是文字 引言Python 代码第一篇 洞见 强者的社交格局:从不恋战第二篇 稳字诀结尾 引言 今天很奇怪 一直都挺烦造的 好像有很多事情忙 但是就是忙着找不定 不能定下心来 主要还是在股市 其他方面应该没啥 计划表还是不够给力 没办法把心在约定住 稳字诀 勤燃香,奋…

深入 IDEA 字节码世界:如何轻松查看 .class 文件?

前言: 作为一名 Java 开发者,理解字节码对于优化程序性能、调试错误以及深入了解 JVM 运行机制非常重要。IntelliJ IDEA 作为最流行的开发工具之一,为开发者提供了查看 .class 文件字节码的功能。在本文中,我将带你一步步探索如何…

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步:更新依赖项以使用 EhCache Spring 注解第 2 步:设置自定义缓存管理器第 3 步:配置 EhCache第 4 步:测试缓存 刷新缓存总结推荐阅读文章 EhCache…

AD报错failed to add class member\net

什么原因导致的我到现在还没弄懂,总之解决方法是在PCB端删除所有现有的并且可删除的nets与components。下次问题复现了再补充截图(不想再遇到了球球了这种玄学问题)。 网络截图: 解决步骤:设计->类 把可删除的网络…

【论文翻译】HTVGNN:一种用于交通流量预测的混合时间变化图神经网络

题目A Novel Hybrid Time-Varying Graph Neural Network For Traffic Flow Forecasting论文链接https://arxiv.org/pdf/2401.10155v4关键词交通流预测,图神经网络,Transformer,多头自注意力 摘要 实时且精确的交通流量预测对于智能交通系统的…

OpenAI的Swarm是一个实验性质的多智能体编排框架

先上文档,然后解释,然后是代码 OpenAI的Swarm是一个实验性质的多智能体编排框架,旨在简化多智能体系统的构建、编排和部署。以下是对Swarm的详细介绍: 一、核心概念和特点 智能体(Agent): Swar…

目标检测——Libra R-CNN算法解读

论文:Libra R-CNN: Towards Balanced Learning for Object Detection (2019.4.4) 作者:Jiangmiao Pang, Kai Chen, Jianping Shi, Huajun Feng, Wanli Ouyang, Dahua Lin 链接:https://arxiv.org/abs/1904.02701 代码:https://git…

计算机毕业设计 基于Python的汽车销售管理系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Android Settings 设置项修改

Settings 设置项 在 Android 系统上,WRITE_SETTINGS 这个权限从 API 1 就已经开始有了。 通过在 app 中设置权限 android.permission.WRITE_SETTINGS 允许 app 读/写 系统设置。 在官方文档的描述中,还有一段注意事项: Note: If the app targets API level 23 or higher,…

live2d 实时虚拟数字人形象页面显示,对接大模型

live2dSpeek 测试不用gpu可以正常运行 https://github.com/lyz1810/live2dSpeek 运行的话还需要额外下载https://github.com/lyz1810/edge-tts支持语音 ## 运行live2dSpeek >npm install -g http-server >http-server . ## 运行edge-tts python edge-tts.py

前端布局与响应式设计综合指南(二)

​🌈个人主页:前端青山 🔥系列专栏:Css篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:前端布局与响应式设计综合指南(二) 目录 23、行内元素和块级元素?img算什么&…

【全网最全】AI产品经理面试高频100题答案解析

详细的目录如下,需要的小伙伴可以详细看一下~ 第一章:机器学习和深度学习的关系 第二章:机器学习7大经典算法 算法一:K近邻算法【分类算法】 1.1 KNN 算法的实现原理 1.2 KNN应用场景举例:预测候选人能不能拿到 O…

DVWA | Files Upload(文件上传)通关笔记

概念 **文件上传漏洞**是网络安全中常见的漏洞之一,攻击者可以利用该漏洞上传恶意文件,进而在服务器上执行恶意代码、绕过权限验证或获取敏感数据。文件上传漏洞主要发生在允许用户上传文件的Web应用程序中,比如图像、文档上传功能等。 ###…

3-3 AUTOSAR RTE 对SR Port的实现

返回总目录->返回总目录<- 目录 一、前言 二、显式访问 三、隐式访问 四、队列调用(Queued) 五、无效数据元素 一、前言 RTE作为SWC和BSW之间的通信机构,支持Sender-Receiver方式实现ECU内及ECU间的通信。 对于Sender-Receiver Port支持三种模式: 显式访问:若…

JavaScript全面指南(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Javascript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南(二) 目录 21、说明如何使用JavaScript提交表单&#xff1f; 2…

Java_EE(反射技术)

反射机制介绍: 什么是反射Java反射机制是Java语言一个很重要的特性&#xff0c;它使得Java具有了“动态性”。在Java程序运行时&#xff0c;对于任意的一个类&#xff0c;我们能不能知道这个类有哪些属性和方法呢&#xff1f;对于任意的一个对象&#xff0c;我们又能不能调用它…

【NTN 卫星通信】卫星通信的专利

1 概述 好久没有看书了&#xff0c;最近买了本讲低轨卫星专利的书&#xff0c;也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术