机器学习之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

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件电子电路设计(三)电源电路之负电源

引言:在对信号线性度放大要求非常高的应用需要使用双电源运放,比如高精度测量仪器、仪表等;那么就需要给双电源运放提供正负电源。 目录 负电源电路原理 负电源的作用 如何产生负电源 负电源能作功吗? 地的理解 负电压产生电路 BUCK电…

【SpringMVC】传递json,获取url参数,上传文件

【传递json数据】 【json概念】 一种轻量级数据交互格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,其本质上是字符串,负责在不同的语言中数据传递与交换 json数据以字符串的形式体现 【json字符串与Java对象互转…

web3.0 开发实践

优质博文:IT-BLOG-CN 一、简介 Web3.0也称为去中心化网络,是对互联网未来演进的一种概念性描述。它代表着对现有互联网的下一代版本的设想和期望。Web3.0的目标是通过整合区块链技术、分布式系统和加密技术等新兴技术,构建一个更加去中心化…

10.31.2024刷华为OD C题型

文章目录 HJ26HJ27语法知识记录 10.24.2024刷华为OD C题型(四) - HJ26 HJ27 def get_dict(str1: str):dic_0 {}for ch in str1:if ch not in dic_0:dic_0[ch] 1else:dic_0[ch] 1return dic_0temp input().split() n int(temp[0]) list [] for i in range(n):l…

客户服务数据分析:洞察客户需求,优化服务策略

在数字经济时代,数据已成为企业决策的重要依据。特别是在客户服务领域,通过深度挖掘和分析客户服务数据,企业能够更精准地洞察客户需求,优化服务策略,从而提升客户满意度和忠诚度,增强市场竞争力。 一、客户…

【SQL】 Navicate 17 连接sql server

一直连接不上,找了好多博客,最后发现是端口号的字符串有问题 [08001] [Microsoft][ODBC Driver 17 for SQL Server]SQL Server Network Interfaces: Connection string is not valid [87]. (87) [HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Lo…

低至599元的N100办公神器,节能静音还双网口,區克MAX N迷你主机深度拆解与评测

低至599元的N100办公神器,节能静音还双网口,區克MAX N迷你主机深度拆解与评测 哈喽小伙伴们好,我是Stark-C~ 最近有小伙伴找到我想我咨询,想要一个日常使用,主打办公,闲暇之余刷刷视频看看剧的小主机&…

CSS--导航栏案例

利用CSS制作北大官网导航栏 详细代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#menu{background-color: darkred;width: 100%;height: 50px…

详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute

目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读&#xff1a;详细分析Pytorch中的permute基本知识&#xff08;附Demo&#xff09; 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数&#xff0c;特别是用于二维张量&#xff08;矩阵&#xff09;的转置操…

2024年11月1日Day2第一部分(最详细简单有趣味的介绍2

1.CRC编解码练习 要计算CRC&#xff08;循环冗余校验&#xff09;码并验证及纠正接收到的数据&#xff0c;我们需要按照以下步骤进行&#xff1a; 步骤 1: 计算CRC校验码 信息字段代码: x1001生成多项式: G(x)x3x21&#xff0c;即 G(x)1101&#xff08;注意&#xff1a;这里…

【Kaggle | Pandas】练习5:数据类型和缺失值

文章目录 1. 获取列数据类型.dtype / .dypes2. 转换数据类型.astype()3. 获取数据为空的列 .isnull()4. 将缺少值替换并且排序.fillna()&#xff0c;.sort_values() 1. 获取列数据类型.dtype / .dypes 数据集中points列的数据类型是什么&#xff1f; # Your code here dtype …

使用Docker Swarm进行集群管理

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Swarm进行集群管理 Docker Swarm简介 安装Docker 在Ubuntu上安装Docker 在CentOS上安装Docker 初始化Docker Swarm …

前端获取csv或者excel 静态数据并使用

这里我将空格全部替换成了 || 好让我变成数组&#xff0c;从而拿到每一条数据中的第一项&#xff0c;相当于excel或者csv文件的第一列的东西 axios.get("/csv/zhongxiang").then((res) > {let rows res.data.split("\n");for (let row of rows) {let c…

JavaWeb——Web入门(3/9)-HTTP协议:概述(概念、特点,HTTP协议定义,基于 TCP 协议,基于请求-响应模型)

目录 概念 特点 内容预告 概念 HTTP 协议定义&#xff1a;全称 Hyper Text Transfer Protocol&#xff0c;即超文本传输协议&#xff0c;规定了浏览器与服务器之间数据传输的规则&#xff0c;具体指客户端浏览器与服务器之间进行数据交互的数据格式。 在互联网的世界中&…

导致线上项目宕机的原因和排查手段

目录 导致线上项目宕机的原因cpu过载cpu过载怎么排查?内存溢出内存溢出怎么排查?磁盘空间不足磁盘空间不足怎么排查?网络问题网络问题怎么排查?垃圾回收(GC)问题垃圾回收(GC)问题怎么排查JVM参数配置不当JVM参数配置不当怎么排查?JVM内部错误JVM内部错误怎么排查?线程…

strace 调试追踪案例:对程序打开文件进行追踪

声明 本文版权属于笔者朋友 YangHui &#xff0c;所有资料内容均由 YangHui 提供&#xff0c;笔者只是一个转述者。 文章目录 声明1. 前言2. 问题的发生、跟踪、解决3. 小结 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#x…

(九)JavaWeb后端开发3——Servlet

目录 1.Servlet由来 2.Servlet快速入门 3.Servlet执行原理 4.Servlet生命周期 1.Servlet由来 在JaveEE API文档中对Servlet的描述是&#xff1a;可以运行在服务器端的微小程序&#xff0c;但是实际上&#xff0c;Servlet就是一个接口&#xff0c;定义了Java类被浏览器访问…

ZooKeeper 客户端API操作

文章目录 一、节点信息1、创建节点2、获取子节点并监听节点变化3、判断节点是否存在4、客户端向服务端写入数据写入请求直接发给 Leader 节点写入请求直接发给 follow 节点 二、服务器动态上下线监听1、监听过程2、代码 三、分布式锁1、什么是分布式锁?2、Curator 框架实现分布…

网关如何传递信息给微服务

前情回顾 上篇我们已经完成了网关对所有微服务请求的拦截以及JWT的登录校验。 客户端和微服务之间的桥梁--网关&#xff08;身份校验&#xff09;https://mp.csdn.net/mp_blog/creation/editor/143425484 问题引入 现在的问题是在一些微服务业务中&#xff0c;需要用到用户…

vue3学习记录-nextTick

vue3学习记录-nextTick 1. 案例场景2. 使用方法2.1 回调方式2.2 async&#xff0c;await 3.原理 1. 案例场景 聊天框实现输入内容&#xff0c;滚动条默认滚到最底部。 <template><div class"chat_box"><div class"chat_list" ref"chat…