当前位置: 首页 > 科技观察

使用Python实现一个简单的人脸识别,原来我和这位明星太像了

时间:2023-03-15 22:38:48 科技观察

这几年掀起了一波人工智能热潮,让人们看到了AI的能力和威力,比如图像识别、语音识别、机器翻译、无人驾驶等等。总体来说,AI的门槛还是比较高的。不仅要学会使用框架来实现,更重要的是需要有一定的数学基础,比如线性代数、矩阵、微积分等。好在国内外很多大神都已经为我们造好了“轮子”,我们可以直接使用一些模型。今天给大家分享一下如何实现简易版的人脸比对,很有意思!总体思路:预先导入需要的人脸识别模型遍历文件夹中的图片进行循环识别,让模型“记住”人的长相,输入一张新图片,与上一步文件夹中的图片进行对比,并返回最后用于close结果的第三方模块和模型:模块:os,dlib,glob,numpy模型:人脸关键点检测器,人脸识别模型1.导入需要的模块和模型这里有两个dat文件解释:它们本质上是参数值(即神经网络的权重)。人脸识别是深度学习的一种应用,需要事先用大量的人脸图像进行训练。所以一开始我们需要设计一个神经网络结构来“记住”人脸。对于神经网络,即使是相同的结构,不同的参数也会导致不同的识别。这里,这两个参数文件对应不同的功能(它们对应不同的神经网络结构):shape_predictor.dat用于检测人脸关键点,如眼睛、嘴巴等;dlib_face_recognition.dat是在前面检测关键点的基础上,生成人脸的特征值。所以后面使用dlib模块的时候,其实就相当于调用了某个神经网络结构,然后把预训练好的参数传递给我们调用的神经网络。顺便说一句,在深度学习领域,动不动就训练一个几百M的参数模型很正常。2.识别训练集。在这一步中,我们要做的就是计算出图片文件夹中人物的五官特征,并把他们放在一个列表中,以便后面和新的图片进行对比。距离计算。重点会加上注释,应该不难理解。具体实现是:完成这一步后,看一下输出的listdescriptors,可以看到是这样一个数组,每个数组代表每个图片体(128维)的特征。那么我们就可以使用L2范式(欧氏距离)来计算两者之间的距离。比如经过计算,A的特征值为[x1,x2,x3],B的特征值为[y1,y2,y3],C的特征值为[z1,z2,z3]],那么因为A和B距离更近,所以会认为A和B更像。想象一个极端的情况。如果是同一个人的两张不同照片,它们的特征值应该差不多吧?了解这一点,您可以继续前进。3、处理待比对图片的过程其实也是一样的原理,目的都是为了计算一个特征值,所以和第二步类似。然后顺便在第二步计算新图片和每张图片的距离,然后合成一个字典类型,排序,选最小值,收工!4.运行看看。这里我用了一张“断水流一哥”林国斌的照片。识别结果果然是离黎明最近的(嘻嘻,我爱黎明)。但是如果事先把林国斌的照片放到训练图像集中,那么结果就是林国斌。为什么是黎明?我们看一下输入图片中人物***和每一个星星的距离,打印输出:是的,他和黎明的距离最小,所以他和他最相似!Python是如此有趣和有趣。可以玩爬虫,探索数据分析,量化金融赚钱,也可以撩妹子做自动化工作。机器学习领域更牛逼,人脸识别、自然语言处理、数据预测与挖掘!【责任编辑:庞桂玉电话:(010)68476606】