好的网站或网页,东莞ppt免费模板下载网站,海淀制作网站的公司,国内 织梦和wordpress#x1f308;个人主页#xff1a;Sarapines Programmer#x1f525; 系列专栏#xff1a;《人工智能奇遇记》#x1f516;少年有梦不应止于心动#xff0c;更要付诸行动。 目录结构 1. 机器学习之PCA降维概念
1.1 机器学习
1.2 PCA降维
2. PCA降维
2.1 实验目的
2… 个人主页Sarapines Programmer 系列专栏《人工智能奇遇记》少年有梦不应止于心动更要付诸行动。 目录结构 1. 机器学习之PCA降维概念
1.1 机器学习
1.2 PCA降维
2. PCA降维
2.1 实验目的
2.2 实验准备
2.3 实验原理
2.4 实验内容
2.5 实验心得
致读者 1. 机器学习之PCA降维概念
1.1 机器学习 传统编程要求开发者明晰规定计算机执行任务的逻辑和条条框框的规则。然而在机器学习的魔法领域我们向计算机系统灌输了海量数据让它在数据的奔流中领悟模式与法则自主演绎未来不再需要手把手的指点迷津。 机器学习犹如三千世界的奇幻之旅分为监督学习、无监督学习和强化学习等多种类型各具神奇魅力。监督学习如大师传道授业算法接收标签的训练数据探索输入与输出的神秘奥秘以精准预测未知之境。无监督学习则是数据丛林的探险者勇闯没有标签的领域寻找隐藏在数据深处的秘密花园。强化学习则是一场与环境的心灵对话智能体通过交互掌握决策之术追求最大化的累积奖赏。 机器学习如涓涓细流渗透各行各业。在图像和语音识别、自然语言处理、医疗诊断、金融预测等领域它在智慧的浪潮中焕发生机将未来的可能性绘制得更加丰富多彩。 1.2 PCA降维 PCAPrincipal Component Analysis主成分分析是一种常用的降维技术。其主要目的是通过线性变换将原始数据投影到一个新的坐标系中使得数据在新坐标系中的方差尽可能大从而减少数据的维度。 PCA的工作原理是找到数据中方差最大的方向将数据映射到这个方向上形成第一个主成分。然后在与第一个主成分正交的方向上找到第二大方差的方向形成第二个主成分依此类推。通过选择最大方差的前几个主成分就可以实现对数据维度的降低。 降维的好处在于可以减少数据的冗余性提高计算效率去除噪声同时保留数据中的主要结构和特征。在实际应用中PCA常被用于处理高维数据例如图像处理、模式识别和数据压缩等领域。通过选择合适数量的主成分可以在保持数据信息的同时显著减少数据的维度。 机器学习源文件https://download.csdn.net/download/m0_57532432/88521407 2. PCA降维
2.1 实验目的
1理解和掌握PCA原理
2利用PCA降维辅助完成一项实战内容。 2.2 实验准备
1安装机器学习必要库如NumPy、Pandas、Scikit-learn等
2配置环境用来运行 Python、Jupyter Notebook和相关库等内容。 2.3 实验原理
矩阵的主成分就是其协方差矩阵对应的特征向量按照对应的特征值大小进行排序最大的特征值就是第一主成分其次是第二主成分以此类推。
算法流程 图4-1 2.4 实验内容
人脸识别步骤 1.利用给定的数据集执行上述算法得到投影矩阵W; 2.计算训练集的投影后的矩阵PWX; 3.加载一个测试图片T测试图片投影后的矩阵为TestTWT; 4.计算TestT和P中每个样本距离选出最近的那个即可。 5.做成可视化界面 显示投影前后的两张图片。 具体内容
使用PCA降维人脸代码如下
import matplotlib
import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_olivetti_faces
import matplotlib.pyplot as plt
import cv2
matplotlib.use(TkAgg) # 指定交互式框架为TkAgg
# 加载人脸数据集
faces fetch_olivetti_faces()
X faces.data# 将人脸数据进行PCA降维
pca PCA(n_components50)
X_pca pca.fit_transform(X)# 将降维后的数据进行逆转换
X_restored pca.inverse_transform(X_pca)# 随机选择一张人脸图片
face X[20].reshape(64, 64)
face_restored X_restored[20].reshape(64, 64)# 使用均值滤波器模糊图像
face_blur cv2.blur(face_restored, (20, 20))# 显示结果
fig, axs plt.subplots(1, 3, figsize(10, 5))
axs[0].imshow(face, cmapgray)
axs[0].set_title(Original Face)
axs[1].imshow(face_restored, cmapgray)
axs[1].set_title(Restored Face)
axs[2].imshow(face_blur, cmapgray)
axs[2].set_title(Blurred Face)
plt.show()PCA降维后运行结果 图4-2 源码分析
我实现加载Olivetti人脸数据集使用PCA对人脸数据进行降维并通过逆转换恢复了部分原始数据。然后选择其中一张人脸图像进行处理包括模糊处理并使用Matplotlib库在图形界面中展示了原始人脸图像、恢复的人脸图像和模糊的人脸图像。这样可以直观地比较PCA降维对人脸图像的影响以及图像处理的效果。 1.导入必要的库 matplotlib用于图像展示。numpy用于数据处理和数组操作。sklearn.decomposition.PCA用于进行主成分分析PCA降维。sklearn.datasets.fetch_olivetti_faces用于获取Olivetti人脸数据集。cv2OpenCV库用于图像处理。 2.设置交互式框架 matplotlib.use(TkAgg)指定使用TkAgg作为交互式框架这是一种用于在图形用户界面中显示图形的后端。 3.加载人脸数据集 fetch_olivetti_faces()从Olivetti人脸数据集中加载人脸图像数据。faces.data获取加载的人脸数据。 4.进行PCA降维 PCA(n_components50)创建一个PCA对象将数据降维到50个主成分。pca.fit_transform(X)对人脸数据进行PCA降维返回降维后的数据集X_pca。 5.进行逆转换 pca.inverse_transform(X_pca)将降维后的数据X_pca进行逆转换返回重建的人脸数据X_restored。 6.随机选择一张人脸图片 X[20]选择人脸数据集中的第21个样本索引从0开始。X[20].reshape(64, 64)将一维的人脸数据转换为64x64的二维图像表示得到原始人脸图像。 7.使用均值滤波器模糊图像 cv2.blur(face_restored, (20, 20))使用20x20的均值滤波器对face_restored进行图像模糊处理得到模糊的人脸图像face_blur。 8.显示结果 创建一个1行3列的子图布局用于在同一画布上显示原始人脸图像、重建的人脸图像和模糊的人脸图像。axs[0].imshow(face, cmapgray)在第一个子图上显示原始人脸图像使用灰度颜色映射。axs[1].imshow(face_restored, cmapgray)在第二个子图上显示重建的人脸图像使用灰度颜色映射。axs[2].imshow(face_blur, cmap gray)在第三个子图上显示模糊的人脸图像使用灰度颜色映射。axs[0].set_title(Original Face)设置第一个子图的标题为Original Face。axs[1].set_title(Restored Face)设置第二个子图的标题为Restored Face。axs[2].set_title(Blurred Face)设置第三个子图的标题为Blurred Face。plt.show()显示图像结果。 除了实现上述的基本要求我额外实现了读取本地的图片识别人脸和调用本地电脑摄像头实时识别人脸。
1. 读取本地的图片识别人脸
代码如下
# 导入所需要使用的包
import cv2
import paddlehub as hub
from matplotlib import pyplot as plt# 加载Paddlehub人脸检测模型
face_detector hub.Module(namepyramidbox_lite_mobile)# 使用模型进行图片预测
result face_detector.face_detection(paths[./img/1.jpg], # 图片路径列表use_gpuFalse, # 是否使用GPU进行推理visualizationTrue, # 是否可视化结果output_dir./output, # 输出目录路径confs_threshold0.5) # 置信度阈值# 打印检测结果
print(result)# 显示可视化图片
output cv2.imread(./output/555.jpg)
# 读取可视化结果图片output output[:, :, ::-1]
# 将图片通道顺序由BGR转换为RGBplt.imshow(output)
# 显示图片运行结果 图4-2 a为输入b为输出 2. 调用本地电脑摄像头实时识别人脸
代码如下 # 导入必要的库
import cv2
# 导入OpenCV库用于图像处理和显示
import paddlehub as hub
# 导入Paddlehub库用于加载和使用Paddlehub模型# 加载Paddlehub人脸检测模型
face_detector hub.Module(namepyramidbox_lite_mobile)
# 使用Paddlehub的pyramidbox_lite_mobile模型进行人脸检测# 调用摄像头参数为0时即调用系统默认摄像头如果有其他的摄像头可以调整参数为12等
cap cv2.VideoCapture(0)
# 创建一个VideoCapture对象用于读取摄像头的视频流while True:
# 从摄像头读取图片
sucess, img cap.read() # 读取摄像头的视频流并将每一帧存储为图像# 从图片中检测人脸位置默认开启GPU推理若无GPU环境请将use_gpu设置为False
result face_detector.face_detection(images[img], use_gpuFalse)
# 使用加载的人脸检测模型对图像进行人脸检测# 遍历结果并绘制矩形框if result[0][data] ! []:for face in result[0][data]:# 将Dict形式的key-value对转换成变量形式locals().update(face) # 将人脸检测结果中的每个人脸信息存储为变量print(bbox:, [left, top, right, bottom]) # 打印人脸边界框的坐标信息# 绘制矩形框cv2.rectangle(img, tuple([left, top]), tuple([right, bottom]), (255, 0, 0), 2) # 在图像上绘制人脸边界框# 显示图像cv2.imshow(img, img)
# 在窗口中显示处理后的图像# 保持画面的持续。k cv2.waitKey(1) # 等待用户按键输入等待时间为1毫秒if k 27:# 通过esc键退出摄像cv2.destroyAllWindows() # 关闭所有窗口break
# 关闭摄像头
cap.release() # 释放摄像头资源运行结果 图4-3 实时输出结果 2.5 实验心得
通过本次实验我成功实现了人脸识别的关键步骤运用机器学习算法进行学习和应用。实验主要包括以下几个步骤 利用fetch_olivetti_faces函数加载人脸数据集将数据存储在变量X中。通过PCA算法将数据进行降维将维度减少到50。 进行降维后数据的逆转换使用PCA.inverse_transform()得到重建后的人脸数据实现维度还原。 随机选择一张人脸图片展示原始、重建以及模糊后的人脸图像。 利用PaddleHub库加载人脸检测模型对测试图片进行人脸检测和可视化。 使用OpenCV和PaddleHub库进行实时人脸检测并将检测结果嵌入摄像头的视频流中实现实时人脸识别。 这些步骤涵盖了从数据加载、降维处理到模型应用和实时检测的全面流程。通过详细的代码说明展现了人脸识别算法的实际应用和实验成果。 致读者 风自火出家人君子以言有物而行有恒