OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)

简介: OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

Fisherfaces是由Ronald Fisher最早提出的,这也是它名字的又来,它基于LDA线性判别分析技术,该方法将人脸数据转换到另外一个空间维度做投影计算,最后根据不同人脸数据的投影距离判断其相似度。开发者同样需要通过以下三个方法完成人脸识别操作

1:通过cv2.face.FisherFaceRecognizer_create(num_components,threshold)

参数说明如下

num_components:可选参数 通过Fisherface方法判断分析时保留的分量个数,建议使用默认值

threshold 可选参数 人脸识别时使用的阈值 建议使用默认值

2:创建识别器对象后 需要通过对象的train方法训练识别器,建议每个人都给出两张以上的人脸图像作为训练样本

recognizer.train(src,train)

参数说明如下

src 用来训练的人脸图像样本列表 格式为list 样本图像宽高必须一致

labels 样本对应的标签,格式为数组,元素类型为整数

3:训练识别器后可以通过识别器的predict方法识别人脸。该方法对比样本的特征,给出最相近的结果和评分

label,confidence=recognizer.predict(src)

label 与样本匹配程度最高的标签纸

confidence 匹配程度最高的信用度评分,评分小于5000程度较高,0分表示两幅图像完全一样

下面以两个人的照片作为训练样本

待识别照片如下

程序输出如下

confidence=2327.1708678

Mike

程序对比样本特征分析得出,被识别的人物特征最接近的是KaiKai

部分代码如下

import cv2
import numpy as np
photos = list()  # 样本图像列表
lables = list()  # 标签列表
photos.append(cv2.imread("face\\Mike1.png", 0))  # 记录第1张人脸图像
lables.append(0)  # 第1张图像对应的标签
photos.append(cv2.imread("face\\Mike2.png", 0))  # 记录第2张人脸图像
lables.(0)  # 第2张图像对应的标签
photos.append(cv2.imread("face\\Mike3.png", 0))  # 记录第3张人脸图像
lables.append(0)  # 第3张图像对应的标
photos.append(cv2.imread("face\\kaikai1.png", 0))  # 记录第4张人脸图像
lables.append(1)  # 第4张图像对应的标签
photos.appen(.imread("face\\kaikai2.png", 0))  # 记录第5张人脸图像
lables.append(1)  # 第5张图像对应的标签
photos.apv2.imread("face\\kaikai3.png", 0))  # 记录第6张人脸图像
lables.append(1)  # 第6张图像对应的标签
names = {"0": "Mike", "1": "kaikai"}  # 标签对应的名称字典
recognizer = cv2.face.FisherFaceRecognizer_create()  # 创建线性判别分析识别器
recognizer.train(photos, np.array(lables))  # 识别器开始训练
i = cv2.imrad("face\\Mike4.png", 0)  # 待识别的人脸图像
label, confdce = recognizer.predict(i)  # 识别器开始分析人脸图像
print("cofidence = " + str(confidence))  # 打印评分
print(name[strbe)  # 数组字典里标签对应的名字
cv2.waitKey()  # 按下何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
2天前
|
数据库 开发者 UED
探索Python中的异步编程:从基础到实战
【8月更文挑战第29天】本文将深入探讨Python的异步编程概念,并展示如何利用它来提高程序的性能和响应性。我们将从理解Python异步编程的基本概念开始,逐步过渡到构建实际的异步应用。文章将通过具体示例和代码片段,指导读者如何在不阻塞主线程的情况下执行长时间运行的任务,以及如何处理并发任务,从而优化资源使用和提高用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
|
2天前
|
数据采集 存储 JSON
python实战
这篇文章提供了一个Python编写的网络爬虫程序,用于爬取Yahoo知惠袋网站的问答数据,并将其存储为JSON和CSV格式,程序使用了requests、parsel、fake_useragent等库来发送请求、解析HTML和模拟用户代理。
|
2天前
|
设计模式 关系型数据库 MySQL
探索Python中的异步编程:从基础到实战
【8月更文挑战第29天】在Python的世界中,异步编程是提升程序性能和响应速度的重要手段。本文将深入浅出地介绍Python异步编程的核心概念、实现方式以及实际应用案例,旨在帮助读者构建起对Python异步编程的全面认识,并通过实例学习如何在自己的项目中有效运用异步技术。
|
2天前
|
数据采集 设计模式 数据挖掘
探索Python中的异步编程:从基础到实战
【8月更文挑战第29天】在Python世界中,异步编程是提升程序效率和响应速度的关键所在。本文将带你从异步编程的基础概念出发,深入理解其背后的工作原理,并逐步展示如何在实际项目中应用这一技术以优化性能。通过直观的示例和清晰的解释,我们将一起构建一个异步Web爬虫,体验异步IO带来的强大能力。准备好,让我们一起跳入Python异步编程的精彩世界!
|
3天前
|
设计模式 调度 开发者
探索Python中的异步编程:从基础到实战
【8月更文挑战第28天】本文将带你进入Python异步编程的世界,从理解其背后的原理和概念开始,逐步深入到具体的代码实现。我们将通过一个实际项目案例,展示如何利用异步编程提升程序性能,并解决常见的并发问题。文章不仅适合初学者构建基础知识,也适合有一定经验的开发者深化理解和应用。
|
3天前
|
数据采集 存储 XML
Python 爬虫实战:从入门到精通
【8月更文挑战第28天】本文将带你进入Python爬虫的世界,从基础概念到实战操作,一步步教你如何用Python编写一个高效的网络爬虫。你将学习到如何解析网页、提取数据、存储数据以及应对反爬策略等技能。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到有价值的信息和技巧。让我们一起探索Python爬虫的奥秘吧!
|
1天前
|
数据采集 数据挖掘 开发者
Python编程入门:从基础到实战
【8月更文挑战第30天】本文将带你走进Python的世界,从基本语法开始,逐步深入到数据结构、函数、面向对象编程等高级特性。我们将通过实际案例,如网页爬虫和数据分析,展示如何应用所学知识解决实际问题。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供宝贵的指导和启发。
|
2天前
|
Python
探索Python中的装饰器:从入门到实战
【8月更文挑战第29天】在Python的世界里,装饰器是那些让代码更加优雅和高效的小精灵。它们就像是编程世界的调味料,能让平淡无奇的函数变得鲜活起来。本文将带你走进装饰器的世界,从基础概念出发,一步步深入到它们的应用实战中。你将看到,装饰器不仅仅是语法糖,它们是实现代码重用、功能增强的强有力工具。准备好了吗?让我们一起揭开装饰器的神秘面纱,开启一段代码美化之旅!
|
2天前
|
数据采集 机器学习/深度学习 存储
Python编程入门:从基础到实战
【8月更文挑战第29天】本文将带你走进Python的世界,从最基础的语法开始,逐步深入到实际的项目开发。我们将通过详细的代码示例和实践案例,帮助你掌握Python编程的核心技能,提升你的编程能力。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和指导。
|
2天前
|
机器学习/深度学习 存储 定位技术
强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学
本文是关于使用Pygame库开发Python贪吃蛇游戏的实战教学,介绍了Pygame的基本使用、窗口初始化、事件处理、键盘控制移动、以及实现游戏逻辑和对象交互的方法。
下一篇
云函数