0
点赞
收藏
分享

微信扫一扫

解决vue-cli node-sass安装不成功问题

🌈个人主页: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降维

机器学习源文件icon-default.png?t=N7T8https://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 实验内容

人脸识别步骤

具体内容:

使用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_components=50)
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, cmap='gray')
axs[0].set_title('Original Face')
axs[1].imshow(face_restored, cmap='gray')
axs[1].set_title('Restored Face')
axs[2].imshow(face_blur, cmap='gray')
axs[2].set_title('Blurred Face')
plt.show()

PCA降维后运行结果:

图4-2

源码分析:

我实现加载Olivetti人脸数据集,使用PCA对人脸数据进行降维,并通过逆转换恢复了部分原始数据。然后,选择其中一张人脸图像进行处理,包括模糊处理,并使用Matplotlib库在图形界面中展示了原始人脸图像、恢复的人脸图像和模糊的人脸图像。这样可以直观地比较PCA降维对人脸图像的影响以及图像处理的效果。

除了实现上述的基本要求,我额外实现了读取本地的图片识别人脸和调用本地电脑摄像头实时识别人脸。

1. 读取本地的图片识别人脸

代码如下:

# 导入所需要使用的包
import cv2
import paddlehub as hub
from matplotlib import pyplot as plt

# 加载Paddlehub人脸检测模型
face_detector = hub.Module(name="pyramidbox_lite_mobile")

# 使用模型进行图片预测
result = face_detector.face_detection(paths=['./img/1.jpg'],  # 图片路径列表
                                      use_gpu=False,  # 是否使用GPU进行推理
                                      visualization=True,  # 是否可视化结果
                                      output_dir='./output',  # 输出目录路径
                                      confs_threshold=0.5)  # 置信度阈值

# 打印检测结果
print(result)

# 显示可视化图片
output = cv2.imread('./output/555.jpg')  
# 读取可视化结果图片

output = output[:, :, ::-1] 
# 将图片通道顺序由BGR转换为RGB

plt.imshow(output)  
# 显示图片

运行结果:

图4-2 (a)为输入,(b)为输出

2. 调用本地电脑摄像头实时识别人脸

代码如下:

# 导入必要的库
import cv2  
# 导入OpenCV库,用于图像处理和显示
import paddlehub as hub  
# 导入Paddlehub库,用于加载和使用Paddlehub模型

# 加载Paddlehub人脸检测模型
face_detector = hub.Module(name="pyramidbox_lite_mobile") 
# 使用Paddlehub的pyramidbox_lite_mobile模型进行人脸检测

# 调用摄像头,参数为0时,即调用系统默认摄像头,如果有其他的摄像头可以调整参数为1,2等
cap = cv2.VideoCapture(0)  
# 创建一个VideoCapture对象,用于读取摄像头的视频流

while True:
# 从摄像头读取图片
sucess, img = cap.read() 
 # 读取摄像头的视频流,并将每一帧存储为图像

# 从图片中检测人脸位置,默认开启GPU推理,若无GPU环境,请将use_gpu设置为False
result = face_detector.face_detection(images=[img], use_gpu=False)  
# 使用加载的人脸检测模型对图像进行人脸检测

    # 遍历结果并绘制矩形框
    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 实验心得

通过本次实验,我成功实现了人脸识别的关键步骤,运用机器学习算法进行学习和应用。实验主要包括以下几个步骤:

这些步骤涵盖了从数据加载、降维处理到模型应用和实时检测的全面流程。通过详细的代码说明,展现了人脸识别算法的实际应用和实验成果。


致读者

举报

相关推荐

0 条评论