机器学习——图片处理应用(人脸补全)

news2024/11/29 12:31:33

0、前言:本文内容是机器学习算法回归预测的应用,其中数据集主要来自sklearn库自带的人脸数据,目的是通过KNN回归、线性回归、岭回归算法通过人物的左半张脸预测人物的右半张脸。

  • 意义1:通过该项目掌握图片数据在机器学习当中的处理方法
  • 意义2:通过该项目可以掌握多个机器学习算法模型对比实验的应用方法

1、原始数据获取:

  • 0、数据准备(这一步的目的是直接将数据保存在本地,后面调用的时候如果本地有就不会下载了,因为下载有时候会因为网络问题报错)
    在这里插入图片描述
    链接:https://pan.baidu.com/s/1c1ZlwCUF_eEzTl4vDOXstA
    提取码:1234

  • 1、数据下载

# 导入机器学习三剑客
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 导入数据集
from sklearn.datasets import fetch_olivetti_faces

# fetch_olivetti_faces()函数首先会去用户根目录找,如果找不到,就会去下载,这个函数不光加载数据,也会将数据进行整合处理
# 但是国内经常下载失败,解决方案就是有下载好的文件,放到对应路径(C:\Users\“你的用户名”)向下。
faces = fetch_olivetti_faces()
display(faces['data'].shape,faces['images'].shape,faces['target'].shape)
'''
(400, 4096)
(400, 64, 64)
(400,)
'''
  • 2、数据概览:数据导入后其实是一个字典,其中data键对应的值是人脸图片的二维数据,images对应的数据是人脸图片的三维数据,target代表图片属于第几个人(用来识别人物的),一共有400个人物。

    • data数据
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • 3、数据处理

# 显示一张图片
data = faces['data']
# 通过data显示图片
plt.imshow(data[0].reshape(64,-1),cmap='gray') # cmap='gray' 是一个用于指定色彩映射(colormap)的关键字参数
# 通过images显示图片
images = faces['images']
plt.imshow(images[1],cmap='gray')

在这里插入图片描述

2、根据左边人脸补全右边人脸:

  • 首先把左边人脸数据和右边人脸数据分开,然后左边人脸作为输入数据,右边人脸作为输出数据(预测数据)
  • 理解图片数据:如果图片数据构成了一个二维数据,如下图,构成其每个像素点的数据组成了二维数组被存在在了images中
    在这里插入图片描述
  • 将数据拆分为为输入数据和输出数据
# 左半张人脸数据集
l_face = []
for i in range(400):
    a = data[0].reshape(64,64)
    l_face.append(a[:,:33].reshape(-1))
# plt.imshow(l_face[0].reshape(64,-1),cmap='gray') # 验证数据采集结果
# 右半张人脸数据集
r_face = []
for i in range(400):
    a = data[i].reshape(64,64)
    r_face.append(a[:,33:].reshape(-1))
# plt.imshow(r_face[0].reshape(64,-1),cmap='gray') # 验证数据采集结果  

# 左边作为输入,右边作为输出
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(l_face,r_face,test_size=0.1)
  • 数据预测
# 导入KNN,线性回归,岭回归,获得每一种模型对应的预测值
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression,Ridge

pred_dict = {}
model = {
    'knn':KNeighborsRegressor(),
    'line':LinearRegression(),
    'Ridge':Ridge()
}

for key,val in model.items():
    m = val.fit(x_train,y_train)
    y_pred = m.predict(x_test)
    pred_dict[key] = y_pred
  • 获得y_pred
    在这里插入图片描述
  • 画图
# 获得了所有模型的预测数据y_pred,下一步画图
# 画图要求:一行表示一个人,分别是真实图片,Ridge预测图、Linear regression预测图、K-nn预测图

# 画布设计为5行4列
plt.figure(figsize=(4*2,5*2))

for i in range(5):
    # 获得测试数据中第i个人真实人脸左半部分
    l_tface = x_test[i]
    # 获得测试数据中第i个人真实人脸右半部分
    r_tface = y_test[i]
    # 合并
    # np.concatenate((array1, array2,..), axis=1)是使用numpy库的concatenate函数将多个数组沿着指定的轴(axis)拼接,axis等于0是上下拼接,等于1是左右拼接。
    rall_face = np.concatenate((l_tface.reshape(64,-1),r_tface.reshape(64,-1)),axis=1)
#     plt.imshow(rall_face,cmap='gray') # 验证组合成功
    # 画每行第一个图
    displt = plt.subplot(5,4,i*4+1)
    displt.imshow(rall_face,cmap='gray')
    displt.axis('off')
    if i == 0:
        displt.set_title('real_image')
    for j,key in enumerate(pred_dict):
        # 获取三个模型预测结果的组合
        M_r_face = pred_dict[key][i].reshape(64,-1)
        M_all_face = np.concatenate((l_tface.reshape(64,-1),M_r_face),axis=1)
#         plt.imshow(M_all_face,cmap='gray') # 验证
        # 画一层的图像
        displt = plt.subplot(5,4,i*4+j+2)
        displt.imshow(M_all_face,cmap='gray')
        displt.axis('off')
        if i == 0:
            displt.set_title(f'{key}_image')
  • 结果展示
    在这里插入图片描述

3、总结:

  • 在处理图片时会遇到数组的拆分与合并,一般数组拆分只需要将数组切片即可,数组合并有时候需要合并列,有时候需要合并行,这就要用到一个非常关键的numpy里面的方法concatenate()。这个方法使用介绍如下:
import numpy as np  
  
a = np.array([[1, 2], [3, 4]])  
b = np.array([[5, 6], [7, 8]])  
  
# 沿着第二个维度(即轴=1)将两个数组堆叠在一起  
result = np.concatenate((a, b), axis=1)  
print(result)  
'''
[[1 2 5 6]
 [3 4 7 8]]
'''
# 沿着第二个维度(即轴=1)将两个数组堆叠在一起  
result = np.concatenate((a, b), axis=0)  
print(result)  
'''
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
'''

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

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

相关文章

CSS笔记(黑马程序员pink老师前端)圆角边框

圆角边框 border-radius:length; 效果显示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…

【新项目】

01 概述 新凝血四项&#xff0c;又称血栓前四项&#xff0c;分为&#xff1a;TAT、PIC、TM、tPAI.C四个检测项目。 生理性高凝状态会伴随着孕妈妈们的整个妊娠期&#xff0c;凝血和纤溶系统的异常状态导致孕产妇发生静脉血栓栓塞症(VTE)的风险比一般人群高。非妊娠妇女凝血项…

LeetCode518. 零钱兑换 II

518. 零钱兑换 II 一、题目 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证…

RTMP流媒体服务器EasyDSS视频直播点播平台如何生成可自动播放的分享链接

EasyDSS支持一站式的上传、转码、直播、回放、嵌入、分享功能&#xff0c;具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务&#xff0c;全面满足超低延迟、超高画质、超大并发访问量的要求。在推流方面&#xff0c;Eas…

PostgreSQL PG15 新功能 PG_WALINSPECT

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…

ABAP内表排序

SORT在用于给内表排序时&#xff0c;后面可以用ASCENDING和DESCENDING进行升序和降序排列&#xff0c;但是这其中用法很多&#xff0c;经过尝试后总结如下&#xff1a; 1.SORT LT_TAB BY WERKS LGORT EMAIL. 正常排序并使用默认ASCENDING. 2.SORT LT_TAB BY WERKS LGORT EMAI…

Java测试(10)--- selenium

1.定位一组元素 &#xff08;1&#xff09;如何打开本地的HTML页面 拼成一个URL &#xff1a;file: /// 文件的绝对路径 import os os.path.abspath(文件的绝对路径&#xff09; &#xff08;2&#xff09;先定位出同一类元素&#xff08;tag name&#xff0c;name&…

NUC980webServer开发

目录 1.RTL8189FTV驱动移植 2.wifi配置工具hostapd移植 1.openssl-1.0.2r交叉编译 2.libnl-3.2.25.tar.gz交叉编译 3.hostapd-2.9.tar.gz交叉编译 4.移植相关工具到开发板 1.RTL8189FTV驱动移植 1. 把驱动文件源码放在linux源码的drivers/net/wireless/realtek/rtlwifi/目录…

LeetCode //C - 114. Flatten Binary Tree to Linked List

114. Flatten Binary Tree to Linked List Given the root of a binary tree, flatten the tree into a “linked list”: The “linked list” should use the same TreeNode class where the right child pointer points to the next node in the list and the left child …

在Android和iOS上设置手机ip详细教程

大家好&#xff01;今天我们将分享一个关于如何在Android和iOS设备上设置手机ip&#xff08;Layer 2 Tunneling Protocol&#xff09;的简易教程。如果你想要通过安全且可靠的方式连接到远程网络&#xff0c;那么跟着本文一起学习吧&#xff01;无需复杂操作&#xff0c;让我们…

KUKA机器人后台控制程序(SPS)介绍

KUKA机器人后台控制程序(SPS)介绍 KUKA机器人后台控制程序主要包括以下几部分: RC:运动控制、机器人轨迹规划 优先级1 I/O刷新:输入输出信号的控制 优先级1 SPS:用户可编辑的后台逻辑程序 优先级2 显示界面刷新:示教器显示画面的控制 优先级3 以上的程序需要12ms(固定…

企业架构LNMP学习笔记19

Nginx 第三方模块的使用&#xff1a; Nginx官方没有的功能&#xff0c;开源开发人员定制开发了一些功能&#xff0c;把代码公布出来&#xff0c;可以通过编译加载第三方模块的方式&#xff0c;使用新功能。 NGINX 3rd Party Modules | NGINX shell > tar xvf ngx-fancyinde…

CVE-2017-12149

春秋云镜 CVE-2017-12149 JBoss反序列化漏洞 靶标介绍 2017年8月30日&#xff0c;厂商Redhat发布了一个JBOSSAS 5.x 的反序列化远程代码执行漏洞通告。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中&#xff0c;其doFilter方法在没有进行任何安全检查…

Win10怎么设置待机时间

我们在使用电脑的过程中&#xff0c;经常因为有事需要离开电脑&#xff0c;长时间不操作电脑就会进行待机睡眠状态&#xff0c;那么Win10怎么设置待机时间呢&#xff0c;下面小编就给大家详细介绍一下Win10设置待机时间的方法&#xff0c;大家感兴趣的话可以来看一看。 设置方…

新华社《中国扫描十年发展图鉴》:扫描全能王为3亿用户带去“掌心里的便利”

扫描设备从“两手搬”到“进口袋”的过程中经历了什么&#xff1f; 近日&#xff0c;新华社发布了《中国扫描十年发展图鉴》&#xff08;简称《图鉴》&#xff09;&#xff0c;对扫描设备、技术、应用领域的发展历史进行了深入盘点。《图鉴》显示&#xff0c;扫描一度是价格接…

MySQL——数据的删除以及MySQL中的约束

删除数据 删除表中的一行数据&#xff0c;也必须加上 WHERE条件&#xff0c;否则整列的数据都会被删除。删除语句&#xff1a; delete from 表名 where 条件; 他会将所有的符合条件的数据删除&#xff0c;如果不写条件&#xff0c;则表中的数据全部删除&#xff1a; 如果不添…

软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…

方向介绍:基于深度学习的轨迹预测

方向介绍&#xff1a;基于深度学习的轨迹预测 文章目录 方向介绍&#xff1a;基于深度学习的轨迹预测问题定义典型方法挑战未来展望参考 基于深度学习的轨迹预测是一种利用神经网络模型来预测移动物体的未来位置和运动状态的技术。这种技术在许多领域都有重要的应用&#xff0c…

Jetpack Compose 入门教程之Text

这个文本显示组件应该是我们最常用的组件,下面会非常细 归纳 实例 下面一一演示这些属性与控制逻辑 文本的展示 Text组件 所有构造方法都是text:String,要想用string.xml里面的字符串资源 得使用 stringResource方法,其相似方法如下/** Copyright 2019 The Android Open Sou…

如何挑选低值易耗品管理系统?优化企业管理效率与成本控制

在现代企业管理中&#xff0c;低值易耗品的管理是一个容易被忽视但却十分重要的环节。低值易耗品包括办公用品、耗材、工具等&#xff0c;它们虽然单价不高&#xff0c;但数量庞大且频繁使用&#xff0c;对企业的日常运营和成本控制有着重要影响。为了提高管理效率、降低成本&a…