计算机视觉实验:人脸识别系统设计

news2024/11/18 4:39:07

实验内容

设计计算机视觉目标识别系统,与实际应用有关(建议:最终展示形式为带界面可运行的系统),以下内容选择其中一个做。

1. 人脸识别系统设计

(1) 人脸识别系统设计(必做):根据课堂上学习的理论知识(包括特征提取、分类器设计),设计一个人脸识别系统,该系统具有较好的识别率。可在提供的AR人脸图片数据集(120人)、Feret人脸图片数据集(175人)、人脸视频数据集(10人)、真实采集的人脸视频或其他公开数据集上展开实验。

(2) 人脸识别系统提升(至少选择其中1个问题做):面向实际环境的人脸识别系统会考虑更多环节,包括图像预处理、特征提取、特征选择、分类器设计、训练与测试等。人脸识别算法在真实应用中会遇到以下问题,包括噪声干扰、光照变化、遮挡影响、角度变化。请针对以上至少1个问题(如噪声干扰、光照变化、遮挡影响、角度变化)展开探讨,分析是什么原因导致识别性能下降,提出增强人脸识别系统性能的方法,提高系统对异常情况处理的能力,使整个识别系统的适应性和稳定性达到更好的状态。

提示:

  1. 噪声干扰方面可考虑图像增强算法,包括中值滤波、均值滤波、高斯滤波等;
  2. 光照变化方面可考虑LBP算法及其扩展版本,或图像增强算法,如直方图均衡化、伽马变换等;
  3. 遮挡影响方面可考虑对图像分块投票处理,或线性表示残差最小的方式辨别遮挡区域;
  4. 角度变化方面可考虑增加不同角度的采样图片,或引入仿射变换的考虑;
  5. 特征提取方面可采用Gabor特征,特征脸,深度特征等方法;
  6. 分类器设计可采用贝叶斯分类器,神经网络等方法;
  7. AR人脸数据集和Feret人脸数据集可以用来测试算法在噪声干扰(需要人工添加噪声)、光照变化、遮挡影响、角度变化下的性能。在此基础上可把识别系统应用在真实环境中测试。
  8. 可根据需要选用人脸检测器或引入仿射变换,本实验提供了Haar检测器和基于仿射变换的人脸检测器。
  9. 人脸数据集说明:

AR人脸数据集:包含120人,每人26张图片, 图像分辨率宽80,高100,可测试光照变化、遮挡情况下算法性能。   

Feret人脸数据集:包含175人,每人7张照片,图像分辨率宽80,高80,可测试不同角度、光照变化下算法性能。

人脸视频数据集:包含10人的视频,每个人有训练视频序列和测试视频序列,可测试不同角度、光照变化、遮挡干扰、噪声干扰下算法性能。

真实人脸数据采集:可根据系统实际情况拍摄。

(3)分析在实验室环境与自然环境下识别算法设计上的区别,如何提高算法创新?(可选)

2. 自选目标识别内容,题目自拟

实验步骤与过程

人脸识别系统设计

  人脸识别的关键点在于特征的提取,相比于数据收集与预处理以及分类器的选择,特征提取是最独特的也是各种人脸识别系统的主要区别。常见的人脸特征提取方法有局部二值模式直方图法、Gabor滤波器方法、基于统计的方法(PCALDA)、纹理特征方法等。在本次实验中我选择了LDA线性判别方法进行特征提取。同时在进行特征提取前,我使用了Haar人脸检测器对人脸进行检测与定位,然后对人脸进行了对齐。提取完后,使用了KNN分类器对特征进行分类识别。其整体的思路图如图1所示。

1 人脸识别系统思路图

数据集导入

  题目中提供了三个数据集,其中ARferet数据集是标准的人脸数据集,而视频数据集则是从视频中提取得到的数据集。数据集的信息如下图图2所示。

2 三个数据集的基本信息

使用文件遍历的方法,将所有图片通过opencv来读取,最后传入图像预处理模块进行处理。在代码中数据读取模块归属于Face_reg类中的load_dataset函数。此函数接收四个参数,其中path表示数据集路径,trun表示截取文件名的前几位作为类别,mode表示重置模式还是添加模式 1表示重置 0表示添加,format表示数据集文件结构类型 1表示的是ARferet的结构 0表示视频数据集的结构。

图像预处理

在图像预处理模块中,对图像进行了灰度变换、仿射变换修真角度、人脸定位裁剪、直方图均衡化、图像尺寸调整等操作。其思路如下图图3所示。

3 图像预处理示意图

1. 灰度变换

将彩色图变成灰度图减少计算复杂性并提高识别性能,转后的结果如下图所示,左图为原图,右图为灰度变换后的结果。

4 灰度变换图

2. 仿射变换修正角度

进行灰度变换后使用仿射变换对人脸进行角度修正。这里的角度修正原理在于根据眼睛的相对坐标调整图像角度,使得主要特征点位置相对固定便于特征提取和匹配。特征点的检测主要使用的是dlib的‘shape_predictor_68_face_landmarks’模型。仿射变换的结果如下图5所示。

5 仿射变换结果图

3. 人脸定位裁剪

  对于人脸的检测与定位我使用了已经训练好的Haar人脸检测器。Haar人脸检测器也称为Viola-Jones 检测器,它与2001年时被提出。此检测器通过滑动窗口并通过提取Haar特征来对人脸进行检测与定位。下图图6为检测并提取后的结果图。

6 人脸定位裁剪结果图

4. 直方图均衡化

在一些图像中,往往由于光照变化的原因,使得图像过亮或郭安,使得某些细节无法突出。因此可以对图像进行直方图均衡化处理,让亮度值变得均匀以使得亮度均匀降低亮度变化的影响。下图图7为直方图均衡化后的结果。

7 直方图均衡化

5. 图像尺寸调整

在利用LDA降维时,模型要求特征的数量是一致的,而此处是直接使用图像的一维亮度值作为特征。因此此处需要对图像进行调整,使得输入的图像尺寸是一致的。

特征提取

  在特征提取方面,使用了LDA对图像的一维灰度序列进行了降维,最后降至25个特征。除此之外还有考虑过使用LBP特征与Garbor特征,但是最后效果均不佳。下图为整体的思路图。

 

8 特征提取

1. 特征提取

  • 扁平化灰度值:图像预处理得到的数据是一个80*80的二维矩阵,而为了更好地提取特征需要将二维矩阵扁平化为一维列表。然后再进行降维操作。
  • LBP特征提取:计算LBP特征图后进行扁平化后输入LDA进行降维训练。
  • Garbor特征提取:对图像进行Garbor滤波后计算均值以作为特征输入。

2. LDA降维

  在上面的特征提取中,由于后两者效果不佳,因此仅选用第一种作为特征进行降维。使用的降维方法是LDA线性判别。其原理在于到一个线性投影,将高维数据映射到低维空间,使得不同类别的样本在投影后的空间中有较大的类间距离(即不同类别之间的距离较大),同时保持同类样本之间的类内距离较小。这样做可以提高分类的准确性。此处在经过不多地调整后最后选择25作为降维的维数,25以下准确率会降低,而25以上则无明显地提升。

分类器设计和训练

1. 分类器设计

  在分类器的选择方面,我选择了原理简单的K近邻算法。它具有简单直观、高度灵活的特点,且能拥有较好的效果。它主要通过各个样本点离周围点的距离而确定这个样本的类别。

2. 参数寻优

在人脸识别中,选择适当的K值对分类性能至关重要。如果选择一个过小的K值,分类结果可能会对噪声敏感,导致过拟合。如果选择一个过大的K值,可能会使得分类边界过于模糊,导致欠拟合。因此此处我使用了网格搜索,通过尝试不同的K值(1-10),寻找最佳的K值。最终它可以帮助我们选择一个在训练数据上表现良好且具有较好泛化能力的K值,从而提高人脸识别的分类性能。

人脸识别系统提升

未优化前的结果

  在一开始的系统设计中,并未考虑太多的图像预处理。同时也没有对LDAKNN的参数选择进行考虑。将80%的数据用于训练20%的数据用于评估。其评估结果如下所示。

 

9 未优化前的准确率

从中可以看到三种数据集的准确率均高于0.8说明具有一定的准确性。而人脸视频数据集整体的准确程度高于另外两个数据集的。观察数据集可以发现其实人脸视频数据集的人脸较为稳定且类别较少,而另外两个数据集的人脸存在更多的变化如表情、遮挡与方向等。因此人脸视频数据集相对而言会有更好地效果。

模型存在的问题

  为了找到问题所在,对预测错误的图片进行分析,如下所示。

 

10 预测错误的人脸

根据以上的问题,可以整理成如下表。并提出相应的解决方案。

 存在问题

解决方案

解决效果

表情变化影响识别

同特征表征不全的方案

同特征表征不全的效果

拍摄方向影响识别

1.添加LBP特征

2.仿射变换修正角度

LBP特征效果不佳, 使准确率降低,故抛弃.

特征表征不全

1. 提高LDA输出的维数

2.提取Garbor特征(均值)

1.维数从9提升至25准确率变为90%以上,25以上维数效果一样.

2.添加Garbor特征后效果不明显

光线变化影响识别

对图像进行直方图均衡化处理以使得亮度均匀

对光线问题而误判的人脸有效,但是造成其他图像误判

墨镜遮挡影响识别

同特征表征不全的方案

同特征表征不全的效果

模型存在的问题

最后系统改进后的结果如下所示。可以看到优化后前两个数据集的效果增加到0.9以上,其准确率大大提高。而对于视频数据集却没有提升,因为优化过程中有一个关键点在于降维所剩下的特征维度。由于LDA要求维度要小于等于类别数量,而人脸视频数据集中只有10个类别,因此维数只能保持在10因此准确率无提示。而其他两种数据集均有提升。

 

10 优化后的指标

基于深度学习的人脸识别系统

  在过去的十几年中传统的机器学习算法一直都是人脸识别系统的主流方法,然而随着计算机算力的提升,深度学习方法已成为目前最主流的方法。下面将介绍目前常见的人脸识别模型,同时复现其中的FaceNet模型。

常见的人脸识别模型

1. DeepFace

DeepFace模型发布于2014年,它是一种基于深度学习的人脸识别模型。DeepFace首先使用传统的人脸检测算法定位图像中的人脸位置,然后对检测到的人脸进行对齐,以确保在特征提取过程中具有一致的姿态。对齐后的人脸图像被输入到深度卷积神经网络中进行特征提取。通过卷积层和全连接层,DeepFace学习到了128维的特征向量,用于表示每张人脸图像。在人脸识别阶段,它使用学习到的特征向量进行比较。它计算待识别人脸与已知人脸之间特征向量的相似度,通常使用余弦相似度作为相似度度量。如果待识别人脸的特征向量与某个已知人脸的特征向量之间的相似度超过一定阈值,就可以判定它们属于同一个人。

11  DeepFace结构图

2. FaceNet

FaceNetGoogle2015年发布的基于深度学习的人脸识别模型。它使用深度卷积神经网络提取人脸的高维特征向量,并通过三元组损失函数进行训练来优化特征表示。通过最大化同一个人脸的特征向量之间的相似度,最小化不同人脸的特征向量之间的相似度,FaceNet学习到的特征向量具有辨别不同人脸的能力。在人脸识别阶段,可以通过计算待识别人脸特征向量与已知人脸特征向量之间的距离来进行识别,距离越小表示匹配度越高。

图12 FaceNet模型结构

3. ArcFace

ArcFace是一种用于人脸识别的深度学习模型,发布于2019年。它通过角度余弦距离来优化特征向量的表示。与传统模型不同,ArcFace考虑了特征向量的角度信息,使得同一个人脸的特征向量更接近,不同人脸的特征向量更远离。这种设计使得ArcFace在人脸识别任务中表现出色,并取得了较高的准确率和鲁棒性。

图13 ArcFace模型结构

模型复现

  在此处我选择了FaceNet进行复现,其代码主要参考于:GitHub - timesler/facenet-pytorch: Pretrained Pytorch face detection (MTCNN) and facial recognition (InceptionResnet) models

以下为复现的步骤:

1. 环境安装

(1)安装facenet-pytorch

FaceNet提供了对应的python包,可以直接使用pip安装,其安装命令如下:

pip install facenet-pytorch

需要注意,由于FaceNet依赖于pytorch环境,所以需要实现安装pytorch的环境。

(2)导入库文件

完成后可以用下面的语句导入模型,若能导入成功即安装完成。

# 加载人脸检测器和特征提取器
mtcnn = MTCNN()
resnet = InceptionResnetV1(
pretrained='vggface2').eval()

2. 人脸录入

FaceNet有提供预训练的模型,由于此处仅作为实验的拓展部分,因此直接加载预训练模型。在加载完成后,我们目前的人脸库为空,因此需要先进行人脸的录入。此处人脸的录入主要为提取一张标准人脸的特征。它首先会对图像进行一些预处理然后检测并裁剪出人脸,并对人脸进行对齐。然后调用模型的函数直接得到其特征,最后存储到一列表中。

3. 人脸识别

当对人脸进行录入后,下一步则是对未知人脸进行识别。其识别的思路与人脸录入类似,首先会对图像进行预处理,然后定位人脸并裁剪对其,最后提取特征进行分类。具体代码见’FaceNet.py’

可视化平台搭建

  对于一个人脸识别系统即使有再好的准确率与效率,若没有相应的应用与可视化平台,那也就无法成为一个较好的系统。因此此处利用vue与flask框架搭建相应的web人脸识别在线网页平台。

可视化系统设计

  系统的核心为封装好的face_reg对象,通过api接口的方式使用pythonFlask作为后端框架,vue作为前端框架。当用户上传图像后,而将图像传回给后端并调用分类函数对人脸类别进行分类。最后再将结果传回网页页面中。下图为可视化系统的思路。

 

图14 可视化系统设计思路

后端实现

  后端主要用于接收前端传回来的图像并对图像的人脸定位裁剪与预测。同时前端传回来的图片将存储在服务器中,最后后端返回图像的链接与预测的标签至前端中显示。下图为后端设计的思路图。

 

15 后端思路图

​​​​​​​前端实现

  前端使用了vue3框架,并且使用到了element-plus组件、axios等工具。前端主要设计了可视化的页面,同时完成了图像上传与接收的逻辑。下图为实现的效果图。

16 前端可视化效果图

参考文献:

[1] Zhao, W., Chellappa, R., Phillips, P. J., & Rosenfeld, A. (2003). Face recognition: A literature survey. ACM Computing Surveys (CSUR), 35(4), 399-458.

[2] Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 1701-1708.

[3] Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 815-823.

[4] Deng J, Guo J, Xue N, et al. Arcface: Additive angular margin loss for deep face recognition[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019: 4690-4699.

[5] Jain, A. K., Ross, A., & Prabhakar, S. (2004). An introduction to biometric recognition. IEEE Transactions on Circuits and Systems for Video Technology, 14(1), 4-20.

[6]Zhang, D., & Zhou, Z. H. (2011). Face recognition: A literature survey. ACM Computing Surveys (CSUR), 43(3), 1-52.

[7] Ma, L., Tan, T., Wang, Y., & Zhang, D. (2003). Personal identification based on iris texture analysis. IEEE Transactions on Pattern Analysis and Machine Intelligence, 25(12), 1519-1533.

[8] Turk, M., & Pentland, A. (1991). Face recognition using eigenfaces. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 586-591.

[9] Belhumeur, P. N., Hespanha, J. P., & Kriegman, D. J. (1997). Eigenfaces vs. Fisherfaces: Recognition using class specific linear projection. IEEE Transactions on Pattern Analysis and Machine Intelligence, 19(7), 711-720.

[10] Viola, P., & Jones, M. (2001). Rapid object detection using a boosted cascade of simple features. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 1, I-511.

[11] Dalal, N., & Triggs, B. (2005). Histograms of oriented gradients for human detection. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 1, 886-893.

[12] LDA算法在人脸识别中的研究与应用丨【百变AI秀】-云社区-华为云

[13] 基于LDA的人脸识别算法研究_51CTO博客_人脸识别算法原理

[14] https://blog.csdn.net/weixin_42163563/article/details/127957504

实验结论或体会

本次实验取得了较好的成果,成功地设计了人脸识别系统并在AR、feret和视频数据集上获得了较高的准确率。通过增加特征维度以及考虑光照变化和角度变化等因素,系统的准确率从0.8提高到了0.9。此外,还设计了人脸识别系统的可视化模块,取得了可观的效果。

然而,系统仍然存在一些需要改进的方面。首先,需要加强系统的泛化性能。当前系统在数据集内的数据上表现出较高的准确率,但当将两个不同的数据集合并时,准确率仅为60%。为了提高系统的泛化性,需要进一步研究和优化算法,以便更好地适应不同数据集的特点和变化。

其次,需要完善系统的功能,使其支持人脸的录入和识别。目前系统主要关注于人脸识别过程,但在实际应用中,人脸的录入是必不可少的一步。因此,需要设计和实现人脸录入的功能,以便用户可以方便地将新的人脸数据添加到系统中,并进行准确的识别。

最后,我们还需要提高人脸检测器的泛化性能。人脸检测是人脸识别系统的前置步骤,它的准确性和鲁棒性对整个系统的性能至关重要。当前系统在不同场景、角度和光照条件下的人脸检测方面仍有一定的改进空间。我们将继续研究和改进人脸检测器,以提高其泛化性能和准确度。

总之,本次实验在人脸识别系统的设计和优化方面取得了积极的进展,但仍面临着一些挑战和改进的空间。通过加强系统的泛化性、完善功能以及提高人脸检测器的性能,有信心进一步提升系统的准确率和稳定性,以满足实际应用的需求。

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

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

相关文章

【iOS】Cydia Impactor 错误:file http.hpp; line:37; what: _assert(code == 200)

Cydia Impactor 报错,信息如下 file http.hpp; line:37; what: _assert(code 200)解决方案:Cydia Impactor 已被弃用,切换到sideloadly 即可,亲测成功,并且支持双重验证登录 csdn备份地址 HERE

kotlin 编写一个简单的天气预报app(四)增加界面显示

编写界面来显示返回的数据 用户友好性&#xff1a;通过界面设计和用户体验优化&#xff0c;可以使天气信息更易读、易理解和易操作。有效的界面设计可以提高用户满意度并提供更好的交互体验。 增加城市名字的TextView <TextViewandroid:id"id/textViewCityName"…

华为OD机试 Java 实现【批量处理任务】【2023 B卷 200分】,二分查找

目录 专栏导读一、题目描述二、输入描述三、输出描述四、二分查找五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;…

SPSS常见图表一览

SPSS是一个统计分析软件&#xff0c;而不是可视化分析工具&#xff0c;它输出的图表主要便于我们更好的理解输出结果&#xff0c;了解数据的基本分布形态。 因此&#xff0c;SPSS中的图表并不复杂&#xff0c;但不能说不重要&#xff0c;我们不需要花费太多时间深究&#xff0…

Postgresql源码(109)并行框架实例与分析

1 PostgreSQL并行参数 系统参数 系统总worker限制&#xff1a;max_worker_processes 默认8 系统总并发限制&#xff1a;max_parallel_workers 默认8 单Query限制&#xff1a;max_parallel_workers_per_gather 默认2 表参数限制&#xff1a;parallel_workers alter table tbl …

什么是 DNS ANAME 解析?

本人使用谷歌搜索了简中互联网&#xff0c;完全没有找到任何有关 ANAME 的文章……本文该不会是头一份吧 相信大家对于 DNS 的解析方式都不陌生&#xff0c;常见的有 A、CNAME、MX、TXT 记录等等。其中&#xff0c;网站常用的是 A 记录和 CNAME 记录&#xff1a;A 记录用于将域…

SQL Developer中的Active Data Guard

这篇文章 Display Data Guard configuration in SQL Developer 中&#xff0c;用SQL Developer展示了多种ADG的拓扑。 今天自己也试了一下&#xff0c;还蛮简单的&#xff0c;其实最麻烦的部分在于搭建一个ADG环境。 假设我已有一个ADG环境&#xff0c;即最典型的环境&#x…

数据库事务--数据库事务基本概念

2、认识事务 2.1、为什么需要事务 如何解决呢 使用事务 2.2、什么是事务 事务的概念: 数据库事务是访问并可能更新数据库中各种数据项的一个程序执行单元 事务的组成: 一个数据库事务通常包含对数据库进行读或写的的一个操作序列 事务的相关特性: 数据库事务可以包含一个或多…

EPICS通道访问介绍以及练习

提纲 1&#xff09; 通道访问概念 2&#xff09;通道访问API 3&#xff09; 简单的CA客户端 4&#xff09;使用回调的简单CA客户端 EPICS概要 搜索和连接过程 搜索请求 1&#xff09;搜索请求由一系列UDP包组成 只发送给EPICS_CA_ADDR_LIST从短时间间隔开始&#xff0c;每…

vue部署在iis的字体获取报错,请求404 - 找不到文件或目录

配置MIME即可 在添加MIME类型中&#xff0c;增加以下信息&#xff1a; 文件扩展名&#xff1a;.woff MIME类型&#xff1a;application/x-font-woff

DHorse v1.3.0 发布,基于k8s的发布平台

综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统&#xff0c;具有持续集成、持续部署、微服务治理等功能&#xff0c;无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用&#xff0c;主要特点&#xff1a;部署简单、操作简洁、功能快速。 新增特…

《ChatGPT原理最佳解释,从根上理解ChatGPT》

【热点】 2022年11月30日&#xff0c;OpenAI发布ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c; 即聊天机器人程序 &#xff0c;开启AIGC的研究热潮。 ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够…

深入理解 SQL:从基本查询到高级聚合

目录 背景理论知识示例1211. 查询结果的质量和占比&#xff08;Round group by&#xff09;1204. 最后一个能进入巴士的人 &#xff08;Having limit order by&#xff09;1193. 每月交易 I&#xff08;if group by&#xff09;1179. 重新格式化部门表1174. 即时食物配送 II&am…

关于DC电源模块输入电压范围的问题

BOSHIDA 关于DC电源模块输入电压范围的问题 DC电源模块是一种将交流电转换为直流电的设备&#xff0c;它非常常见且广泛应用于电子设备、通讯设备、工业自动化等领域。而其输入电压范围也是我们在使用和选购DC电源模块时需要特别关注的一个参数。 首先&#xff0c;我们需要了解…

java的空引用null和空字符串““

java中如果字符串变量指向null&#xff0c;表示空引用&#xff0c;此时对字符串求长度会抛出异常。 而""表示一个空字符串&#xff0c;对字符串求长度是可以的&#xff0c;求出来的字符串长度为0。 举例&#xff1a; package com.thb;public class Test6 {public s…

数字电路(一)

1、例题 1、进行DA数模转换器选型时&#xff0c;一般要选择主要参数有&#xff08; A&#xff09;、转换精度和转换速度。 A、分辨率 B、输出电流 C、输出电阻 D、模拟开关 2、下图所示电路的逻辑功能为&#xff08; B&#xff09; A、与门 B、或门 C、与非门 D、或非门 分析该…

导出文件下载进度条简单实现

前言 今天要跟大家分享的是一个导出数据进度条的简单实现&#xff0c;适用场景用在数据量大、组织数据耗时的情况下的简单实现。 一、设计思路 1、导出数据生成文件上传到OSS&#xff0c; 2、导出数据状态存redis缓存&#xff0c; 3、前端发导出请求后&#xff0c;返回的文件k…

Hudi Flink SQL源码调试学习(1)

前言 本着学习hudi-flink源码的目的&#xff0c;利用之前总结的文章Hudi Flink SQL代码示例及本地调试中的代码进行调试,记录调试学习过程中主要的步骤及对应源码片段。 版本 Flink 1.15.4Hudi 0.13.0 目标 在文章Hudi Flink SQL代码示例及本地调试中提到&#xff1a;我们…

分布式事务之本地事务

&#x1f680; 分布式事务 &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#x1f3c6;&…

大数据课程E1——Flume的概述

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Ganglia的概念&#xff1b; ⚪ 了解Ganglia的拓扑结构和执行流程&#xff1b; ⚪ 掌握Ganglia的安装操作&#xff1b; 一、简介 1. 概述 1. Flume原本是由Cloude…