用Python实现一个简单的——人脸相似度对比 - 腾讯云

文章推薦指數: 80 %
投票人數:10人

今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣! 整体思路:. 1、预先导入所需要的人脸识别模型;. 2、遍历循环识别文件夹里面的图片, ... 腾讯云备案控制台云+社区专栏视频精选问答沙龙云+竞赛团队主页开发者手册腾讯云TI平台TVP实验室搜索搜索关闭创作写文章发视频提问登录注册展开腾讯云·社区登录首页专栏视频精选问答沙龙云+竞赛团队主页开发者手册腾讯云TI平台TVP返回腾讯云官网不脱发的程序猿314篇文章用Python实现一个简单的——人脸相似度对比转到我的清单专栏首页AIoT技术交流、分享用Python实现一个简单的——人脸相似度对比30分享分享文章到朋友圈分享文章到QQ分享文章到微博复制文章链接到剪贴板海报分享海报分享用Python实现一个简单的——人脸相似度对比发布于2021-01-2009:45:21阅读1.2K0近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。

总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等。

幸庆的是,国内外许多大神都已经给我们造好“轮子”,我们可以直接来使用某些模型。

今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣!整体思路:1、预先导入所需要的人脸识别模型;2、遍历循环识别文件夹里面的图片,让模型“记住”人物的样子;3、输入一张新的图像,与前一步文件夹里面的图片比对,返回最接近的结果。

使用到的第三方模块和模型:1、模块:os,dlib,glob,numpy;2、模型:人脸关键点检测器,人脸识别模型。

第一步:导入需要的模型。

这里解释一下两个dat文件:它们的本质是参数值(即神经网络的权重)。

人脸识别算是深度学习的一个应用,事先需要经过大量的人脸图像来训练。

所以一开始我们需要去设计一个神经网络结构,来“记住”人类的脸。

对于神经网络来说,即便是同样的结构,不同的参数也会导致识别的东西不一样。

在这里,这两个参数文件就对应了不同的功能(它们对应的神经网络结构也不同):shape_predictor.dat这个是为了检测人脸的关键点,比如眼睛,嘴巴等等;dlib_face_recognition.dat是在前面检测关键点的基础上,生成人脸的特征值。

所以后面使用dlib模块的时候,其实就是相当于,调用了某个神经网络结构,再把预先训练好的参数传给我们调用的神经网络。

顺便提一下,在深度学习领域中,往往动不动会训练出一个上百M的参数模型出来,是很正常的事。

importos,dlib,glob,numpy fromskimageimportio #人脸关键点检测器 predictor_path="shape_predictor.dat" #人脸识别模型、提取特征值 face_rec_model_path="dlib_face_recognition.dat" #训练图像文件夹 faces_folder_path='train_images' #加载模型 detector=dlib.get_frontal_face_detector() sp=dlib.shape_predictor(predictor_path) facerec=dlib.face_recognition_model_v1(face_rec_model_path)复制第二步:对训练集进行识别。

在这一步中,我们要完成的是,对图片文件夹里面的人物图像,计算他们的人脸特征,并放到一个列表里面,为了后面可以和新的图像进行一个距离计算。

关键地方会加上注释,应该不难理解。

candidate=[]#存放训练集人物名字 descriptors=[]#存放训练集人物特征列表 forfinglob.glob(os.path.join(faces_folder_path,"*.jpg")): print("正在处理:{}".format(f)) img=io.imread(f) candidate.append(f.split('\\')[-1].split('.')[0]) #人脸检测 dets=detector(img,1) fork,dinenumerate(dets): shape=sp(img,d) #提取特征 face_descriptor=facerec.compute_face_descriptor(img,shape) v=numpy.array(face_descriptor) descriptors.append(v) print('识别训练完毕!')复制当你做完这一步之后,输出列表descriptors看一下,可以看到类似这样的数组,每一个数组代表的就是每一张图片的特征量(128维)。

然后我们可以使用L2范式(欧式距离),来计算两者间的距离。

举个例子,比如经过计算后,A的特征值是[x1,x2,x3],B的特征值是[y1,y2,y3],C的特征值是[z1,z2,z3]。

那么由于A和B更接近,所以会认为A和B更像。

想象一下极端情况,如果是同一个人的两张不同照片,那么它们的特征值是不是应该会几乎接近呢?知道了这一点,就可以继续往下走了。

第三步:处理待对比的图片。

其实是同样的道理,如法炮制,目的就是算出一个特征值出来,所以和第二步差不多。

然后再顺便计算出新图片和第二步中每一张图片的距离,再合成一个字典类型,排个序,选出最小值,搞定收工!try: ##test_path=input('请输入要检测的图片的路径(记得加后缀哦):') img=io.imread(r".\test_images\test6.jpg") dets=detector(img,1) except: print('输入路径有误,请检查!') dist=[] fork,dinenumerate(dets): shape=sp(img,d) face_descriptor=facerec.compute_face_descriptor(img,shape) d_test=numpy.array(face_descriptor) foriindescriptors:#计算距离 dist_=numpy.linalg.norm(i-d_test) dist.append(dist_) #训练集人物和距离组成一个字典 c_d=dict(zip(candidate,dist)) cd_sorted=sorted(c_d.items(),key=lambdad:d[1]) print("识别到的人物最有可能是:",cd_sorted[0][0])复制这里我用了一张“断水流大师兄”林国斌的照片,识别的结果是,果然,是最接近黎明了(嘻嘻,我爱黎明)。

但如果你事先在训练图像集里面有放入林国斌的照片,那么出来的结果就是林国斌了。

为什么是黎明呢?我们看一下输入图片里的人物最后与每个明星的距离,输出打印一下:{'刘亦菲':0.5269014581137407,'刘诗诗':0.4779630331578229,'唐艺昕':0.45967444611419184,'杨幂':0.4753850256188804,'迪丽热巴':0.5730399094704894,'郑秀妍':0.40740137304879187,'郑秀晶':0.45325515192940385,'郭富城':0.7624925709626963,'黎明':0.8925473299225084}没错,他和黎明的距离是最小的,所以和他也最像了!源码及模型下载:https://download.csdn.net/download/m0_38106923/10772957拓展项目:Python+OpenCv实现AI人脸识别身份认证系统本文参与腾讯云自媒体分享计划,欢迎热爱写作的你一起参与!本文分享自作者个人站点/博客:https://handsome-man.blog.csdn.net/复制如有侵权,请联系[email protected]删除。

展开阅读全文举报点赞3分享登录后参与评论0条评论开发AI人脸对比,如何输出多个对比相似度的人脸?人脸识别的功能我们已经研究了一段时间,我们主要需要实现的形式是将识别的人脸与人脸库中的人脸进行对比,然后通过系统评选出相似度最高的人脸进行匹配。

因此,假如我们传...TSINGSEE青犀视频Python简单实现基于VSM的余弦相似度计算在知识图谱构建阶段的实体对齐和属性值决策、判断一篇文章是否是你喜欢的文章、比较两篇文章的相似性等实例中,都涉及到了向量空间模型(VectorSpaceMod...周小董利用百度人脸识别API实现一款简单的Python颜值打分百度开源的人脸识别接口,通过上传人像图片可以返回颜值打分,年龄等信息;今天我们使用这个接口实现一款Python颜值打分神器松鼠爱吃饼干用Python实现一个简单的WebSocwindowspython2.79,chrome37firefox35通过py3studypython︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图这是一个利用dlib进行关键点定位+opencv处理的人脸对齐、换脸、关键点识别的小demo。

原文来自于《SwitchingEds:Faceswapp...素质用Python实现一个简单的线程池在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。

在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象...py3studyPython使用pygame实现一个简单的动画一个会写诗的程序员用Python实现一个简单的算术游戏代码伴一生用Python实现一个简单的算术游戏艳艳代码杂货店干货|手把手教你运用Python实现简单的人脸识别Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的。

这里介绍的是准确性比较高的一种。

用户1621951『Python开发实战菜鸟教程』实战篇:一文带你了解人脸识别应用原理及手把手教学实现自己的人脸识别项目推荐补充阅读:『Python开发实战菜鸟教程』工具篇:手把手教学使用VSCode开发Python小宋是呢使用Python实现一个简单的接口服务使用Python实现一个简单的接口服务,可以通过get、post方法请求该接口,拿到响应数据。

创建一个api_server.py文件,添加代码如下:py3study写一只具有识别能力的图片爬虫在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系。

当然了,图像识别这个话题...机器学习AI算法工程用Python实现一个简单的微信红包算法今年过年各位一定在微信里抢了不少红包。

那么当别人是手气王而你只抢到1分钱的时候,你有没有想过,如果你来实现红包的分配算法,会怎么写? 这里我给一个简单的实现方案...Crossin先生[深度应用]·实战掌握Dlib人脸识别开发教程Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口,功能类似于TensorFlow与PyTorch。

但是由于Dlib对于人脸特征提取支持...小宋是呢实战|如何用最快的速度学会Dlib人脸识别开发?项目GitHub地址:https://github.com/xiaosongshine/dlib_face_recognitionAI科技大本营人脸识别简介(使用Python代码)人脸识别是计算机视觉的一个子领域,它的应用范围非常广泛,现在已经成为世界各地的企业争相竞逐的新技术之一。

考虑到市场的盈利现状,未来这项技术还会有更大的需求空间,...小小詹同学手把手:用OpenCV亲手给小扎、Musk等科技大佬们做一张“平均脸”(附Python代码)大数据文摘用Go语言实现一个简单的聊天机器人Go语言基本构成要素:标识符、关键字、字面量、分隔符、操作符。

它们可以组成各种表达式和语句,而后者都无需以分号结尾。

Zoctopus更多文章不脱发的程序猿嵌入式工程师关注专栏文章314阅读量84.1K获赞954作者排名959腾讯云原生专题云原生技术干货,业务实践落地。

视频公开课上线啦Vite学习指南,基于腾讯云Webify部署项目立即查看腾讯云自媒体分享计划入驻云加社区,共享百万资源包。

立即入驻广告关闭社区专栏文章阅读清单互动问答技术沙龙技术快讯团队主页开发者手册腾讯云TI平台活动原创分享计划自媒体分享计划邀请作者入驻自荐上首页在线直播生态合作计划资源技术周刊社区标签开发者实验室关于视频介绍社区规范免责声明联系我们友情链接归档问题归档专栏文章归档快讯文章归档关键词归档开发者手册归档开发者手册Section归档云+社区扫码关注云+社区领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL数据库SSL证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright©2013-2022TencentCloud.AllRightsReserved.腾讯云版权所有京公网安备11010802017518粤B2-20090059-1扫描二维码扫码关注云+社区领取腾讯云代金券



請為這篇文章評分?