机器学习之fetch_olivetti_faces人脸识别--基于Python实现

fetch_olivetti_faces

数据集下载

fetch_olivetti_faceshttps://github.com/jikechao/olivettifaces

sklearn.datasets.fetch_olivetti_faces(*data_home=Noneshuffle=Falserandom_state=0download_if_missing=Truereturn_X_y=Falsen_retries=3delay=1.0)[source]

Load the Olivetti faces data-set from AT&T (classification).

Download it if necessary.

Classes

40

Samples total

400

Dimensionality

4096

Features

real, between 0 and 1

Read more in the User Guide.

Parameters:

data_homestr or path-like, default=None

Specify another download and cache folder for the datasets. By default all scikit-learn data is stored in ‘~/scikit_learn_data’ subfolders.

shufflebool, default=False

If True the order of the dataset is shuffled to avoid having images of the same person grouped.

random_stateint, RandomState instance or None, default=0

Determines random number generation for dataset shuffling. Pass an int for reproducible output across multiple function calls. See Glossary.

download_if_missingbool, default=True

If False, raise an OSError if the data is not locally available instead of trying to download the data from the source site.

return_X_ybool, default=False

If True, returns instead of a object. See below for more information about the and object.(data, target)Bunchdatatarget

Added in version 0.22.

n_retriesint, default=3

Number of retries when HTTP errors are encountered.

Added in version 1.5.

delayfloat, default=1.0

Number of seconds between retries.

Added in version 1.5.

Returns:

dataBunch

Dictionary-like object, with the following attributes.

data: ndarray, shape (400, 4096)

Each row corresponds to a ravelled face image of original size 64 x 64 pixels.

imagesndarray, shape (400, 64, 64)

Each row is a face image corresponding to one of the 40 subjects of the dataset.

targetndarray, shape (400,)

Labels associated to each face image. Those labels are ranging from 0-39 and correspond to the Subject IDs.

DESCRstr

Description of the modified Olivetti Faces Dataset.

(data, target)tuple if return_X_y=True

Tuple with the and objects described above.datatarget

Added in version 0.22.

Olivetti Faces人脸数据集合处理

简介

本资源文件提供了Olivetti Faces人脸数据集的处理方法和相关代码。Olivetti Faces是一个经典的人脸识别数据集,包含了40个不同个体的400张灰度图像。每个个体有10张图像,这些图像在不同的光照和表情条件下拍摄。

数据集特点

  • 图像数量:400张
  • 个体数量:40个
  • 每张图像大小:47x47像素
  • 图像格式:灰度图像

数据集下载

数据集可以从以下地址下载:

  • 官方地址:http://cs.nyu.edu/~roweis/data/olivettifaces.gif
  • 备用地址:百度网盘 请输入提取码 提取码:9m3c

数据处理

由于数据集是一张大图,每个人脸需要进行切割处理。可以使用Python脚本进行图像切割,具体代码如下:

# 导入所需的库
import cv2
import numpy as np# 读取大图
image = cv2.imread('olivettifaces.gif', cv2.IMREAD_GRAYSCALE)# 获取图像的尺寸
height, width = image.shape# 每个人脸的大小
face_height = height // 20
face_width = width // 20# 切割并保存每个人脸
faces = []
for i in range(20):for j in range(20):face = image[i*face_height:(i+1)*face_height, j*face_width:(j+1)*face_width]faces.append(face)cv2.imwrite(f'face_{i*20 + j}.png', face)print("图像切割完成,共保存了400张人脸图像。")

使用方法

  1. 下载数据集并保存为olivettifaces.gif
  2. 运行上述Python脚本进行图像切割。
  3. 切割后的人脸图像将保存在当前目录下,文件名为face_0.pngface_399.png

参考资料

  • 本资源文件的详细处理方法和代码参考自CSDN博客文章。

注意事项

  • 请确保Python环境已安装OpenCV库。
  • 如果遇到下载问题,可以使用备用地址进行下载。

贡献

欢迎对本资源文件进行改进和优化,提交Pull Request或Issue。

Examples

>>> from sklearn.datasets import fetch_olivetti_faces
>>> olivetti_faces = fetch_olivetti_faces()
>>> olivetti_faces.data.shape
(400, 4096)
>>> olivetti_faces.target.shape
(400,)
>>> olivetti_faces.images.shape
(400, 64, 64)

读入人脸数据 

import matplotlib.pyplot as plt
fig,ax=plt.subplots(8,8,figsize=(8,8))
fig.subplots_adjust(hspace=0,wspace=0)
from sklearn.datasets import fetch_olivetti_faces
faces=fetch_olivetti_faces().images
for i in range(8):for j in range(8):ax[i,j].xaxis.set_major_locator(plt.NullLocator())ax[i,j].yaxis.set_major_locator(plt.NullLocator())ax[i,j].imshow(faces[i*10+j],cmap='bone')

 353154a3b59147b0a1e2ccadd070a149.png

import warnings
warnings.filterwarnings('ignore')#fetch_olivetti_faces图像分割
import numpy as np
from sklearn.datasets import fetch_olivetti_faces
faces=fetch_olivetti_faces().images
X=faces.reshape(-1,64*64)
y=np.arange(40).repeat(10)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=42)
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
param_grid={'C':[0.1,1,10,100,1000],'gamma':[0.0001,0.001,0.01,0.1]}
grid=GridSearchCV(SVC(),param_grid,cv=5)
grid.fit(X_train,y_train)
print(grid.best_params_)
print(grid.score(X_test,y_test))

 {'C': 100, 'gamma': 0.001}
0.97

人脸图像切分: 

#读取olivettifaces.gif文件
import matplotlib.pyplot as plt
from PIL import Image
import cv2
im=Image.open('olivettifaces.gif')plt.imshow(im,cmap='gray')
plt.show()
#分割图片
im_array=np.array(im)
im_array.shape# 获取图像的尺寸
height, width = im_array.shape# 每个人脸的大小
face_height = height // 20
face_width = width // 20# 切割并保存每个人脸
faces = []
for i in range(20):for j in range(20):face = im_array[i*face_height:(i+1)*face_height, j*face_width:(j+1)*face_width]faces.append(face)# 保存人脸face = Image.fromarray(face)face.save(f'./人脸识别/picture/face_{i*20+j}.png')
print('人脸切割完成') 

 48d9e0be8bdb4afd961113cddc60c192.png

5c6435b997074e9dab594309074abf03.png

 人脸识别

# 读取人脸图片
import os
import numpy as np
from PIL import Image
import cv2
faces = []
for i in range(400):face = Image.open(f'./人脸识别/picture/face_{i}.png')face = np.array(face)faces.append(face)
faces = np.array(faces)
faces.shape

 72dc5f3f5c0641a4aac752ccf6b098bb.png

import warnings
warnings.filterwarnings('ignore')
# 人脸识别
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
X = faces.reshape(400, -1)
y = np.arange(40).repeat(10)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
param_grid = {'C': [0.1, 1, 10, 100, 1000], 'gamma': [0.0001, 0.001, 0.01, 0.1]}
grid = GridSearchCV(SVC(), param_grid, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_)

 0b1e9f61c3254f55a17d9323187d8795.png

 

 

 

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

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

相关文章

HTML 语法规范——代码注释、缩进与格式、标签与属性、字符编码等

文章目录 一、代码注释1.1 使用注释的主要目的1.2 使用建议二、标签的使用2.1 开始标签和结束标签2.2 自闭合标签2.3 标签的嵌套2.4 标签的有效性三、属性四、缩进与格式4.1 一致的缩进4.2 元素单独占用一行4.3 嵌套元素的缩进4.4 避免冗长的行五、字符编码六、小结在开发 HTML…

Charles简单压力测试

1.接口请求次数,并发量,请求延迟时间均可配置 1.1选中需要进行测试的接口,鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中,选择了1个接口,每次迭代中1个接口同时请求,迭代1000次(…

HrmonyOS 赋能套件介绍

文章为官方教程以及自己的部分理解,用于上下班的查看学习。官方视频教程地址:HarmonyOS应用开发者基础认证-华为开发者学堂 (huawei.com) HarmonOS 赋能套件全景 感知 通过白皮书了解认识 HarmonOS 应用开发的核心理念、关键能力和创新体验 学习与评估…

Windows 下基于 CLion 配置 Linux 项目开发环境

【Windows 下基于 CLion 配置 Linux 项目开发环境 【C/C/Linux】】 https://www.bilibili.com/video/BV1tH4y1U73v/?share_sourcecopy_web&vd_source57dbd16b8c7c2ad258cccce5966c5be8

es拼音分词器(仅供自己参考)

github地址:https://github.com/infinilabs/analysis-pinyin(各种版本,对接es版本) 拼音分词器存在的问题: 1、是直接将每个字的拼音返回和一段话的拼音首字母返回,不能很好的分词。 2、不会保留中文&am…

机器人技术革新:人工智能的强力驱动

内容概要 在当今世界,机器人技术与人工智能的结合正如星星与大海,彼此辉映。随着科技的不断进步,人工智能不仅仅是为机器人赋予了“聪明的大脑”,更是推动了整个行业的快速发展。回顾机器人技术的发展历程,我们会发现…

Waymo的EMMA给多模态端到端自驾指引了方向

最近Waymo发的论文EMMA端到端确实在自动驾驶届引发了很大的关注,核心的原因是它采用的端到端模型是基于Gemini Nano的语言模型,目前看现在做端到端方案的,就它和特斯拉是语言模型为底座来实现多模态视觉输入的。 EMMA:End-to-End Multimodal…

第二十八篇——向量代数(下):如何通过向量夹角理解不同“维度”?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 一个向量的夹角计算,增加了N个维度;让我的思路一下…

猫头虎分享Python 编码转换库:处理 JSONL 编码格式转换的最佳实践

猫头虎分享Python 编码转换库:处理 JSONL 编码格式转换的最佳实践 在数据处理的过程中,编码转换是一个不可避免的重要环节。特别是当我们面对来自不同来源的数据时,确保数据的编码一致性对于数据的正确解析和处理至关重要。本文将介绍 Pytho…

5. STM32之TIM实验--输出比较(PWM输出,电机,四轴飞行器,智能车,机器人)--(实验5:PWM驱动直流电机)

作者:Whappy,日期:2024.10.29,决战STM32 直流电机的控制就比较简单了,只有数据线和地线,正接正转,反接反转,为了方便,本实验采用H桥电路来控制电机的正反转,H桥电路也很简单,就是4个MOS管构成的2路推挽输出电路. 注:基本上大功率器件,单片机基本上是无法驱动的,都是要靠一部分…

微服务实战系列之玩转Docker(十六)

导览 前言Q:基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker,一个宠儿,一个云原生领域的…

Python酷库之旅-第三方库Pandas(189)

目录 一、用法精讲 876、pandas.Index.duplicated方法 876-1、语法 876-2、参数 876-3、功能 876-4、返回值 876-5、说明 876-6、用法 876-6-1、数据准备 876-6-2、代码示例 876-6-3、结果输出 877、pandas.Index.equals方法 877-1、语法 877-2、参数 877-3、功…

mac|安装redis及RedisDesk可视化软件

一、安装 通过Homebrew安装 brew install redis 在安装过程可以得到以下信息: 1、启动redis或重新登陆redis brew services start redis 如果只想在前端运行,而不是在后端,则使用以下命令 /opt/homebrew/opt/redis/bin/redis-server /opt…

内网穿透含义及做法

内网穿透:为在局域网的设备提供一个外网可访问的地址和端口号(可以为域名或IP) 下面的做法我用到两个工具:花生壳(内网穿透工具),网络调试助手(服务器客户端搭建工具) …

二、Go快速入门之数据类型

📅 2024年4月27日 📦 使用版本为1.21.5 Go的数据类型 📖官方文档:https://go.dev/ref/spec#Types 1️⃣ 布尔类型 ⭐️ 布尔类型只有真和假,true和false ⭐️ 在Go中整数0不会代表假,非零整数也不能代替真&#…

【Vue3.js】计算属性监视属性的深度解析

🧑‍💼 一名茫茫大海中沉浮的小小程序员🍬 👉 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️! 📑 目录 🔽 前言1️⃣ 计算属性概述2️⃣ 监视属性概述3️⃣ 计算属性与监视属性的对比…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因:为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递,不可能整个椅子打包发送,这是非常不方便的,所以就要对椅子进行序列化处理,让椅子分成很多部分在一起打包发送…

CentOS 文件系统扩容与缩容

一、 概述 理解Linux文件系统的管理,需要了解以下的一张图: 一般使用LVM (Logical Volume Manager) 管理磁盘存储,该工具允许用户更灵活地分配和管理存储空间。主要有以下几个概念: PV(Physical Volume,物…

大模型面试题全面总结:每一道都是硬核挑战

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天分享…

arcgis坐标系问题

2000数据框的工程只能打开2000坐标系的矢量数据和栅格数据(影像图),如果打开80的数据则会投影错误,出现较大偏差。 解决方案:80数据框打开80数据,2000数据库打开2000数据。