【人脸识别】基于facenet_pytorch实现人脸识别

这篇具有很好参考价值的文章主要介绍了【人脸识别】基于facenet_pytorch实现人脸识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        该代码可以在Pycharm、Jupyter、Python等Python编译器中运行,本文我使用的是Pycharm。

一、安装

(一)安装pytorch(cpu)

        首先在Pycharm中新建一个名为facenet_test的项目,并创建一个名为fp.py的Python文件。

【人脸识别】基于facenet_pytorch实现人脸识别

        打开PyTorch官网Start Locally | PyTorch,在主页中根据自己的电脑选择Linux、Mac或Windows,其余如下图所示,系统将给出对应的安装语句,如我这里为“pip3 install torch torchvision torchaudio”。

【人脸识别】基于facenet_pytorch实现人脸识别

        由于不加镜像下载速度比较慢,所以我们加上清华镜像在pycharm的terminal终端中输入以下命令:

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

        稍等片刻后,系统显示“successfully installed……”。之后在终端中输入以下命令,来测试是否安装成功。

python               # 进入Python环境
import torch         # 导入torch模块,若没有报错说明安装成功
torch.__version__    # 查看版本号

         效果如下所示,说明安装成功了。

【人脸识别】基于facenet_pytorch实现人脸识别

(二)安装facenet_pytorch库

        在终端中键入如下命令:(在此之前先按Ctrl+Z并回车退出Python环境)

pip install facenet_pytorch

【人脸识别】基于facenet_pytorch实现人脸识别

        安装好之后到“C:\Users\用户名\”路径下查看是否有“.cache”文件夹。如果没有,可以在终端的python环境下,运行以下两句命令:

import torchvision.models as models
alexnet=models.alexnet(pretrained=True)

        安装好之后重新查看“C:\Users\用户名\”路径,发现已经有了“.cache”文件夹。接着我们需要到如下网盘链接中下载InceptionResnetV1预训练模型,并将压缩包解压放置在“C:\Users\用户名\.cache\torch\hub\checkpoints”或“C:\Users\用户名\.cache\torch\checkpoints”路径下。如图所示。

链接:https://pan.baidu.com/s/1UrnggoOLL8lv2Nj4odBfWw?pwd=w6x8 
提取码:w6x8 

【人脸识别】基于facenet_pytorch实现人脸识别

【人脸识别】基于facenet_pytorch实现人脸识别

 

 二、代码实现

        首先选择两张图片作为待识别的图片,并将它们与fp.py放置在同一目录中。在这里我选择以下两张图片,分别命名为“zj.jpg”和“zj2.jpg”。

【人脸识别】基于facenet_pytorch实现人脸识别【人脸识别】基于facenet_pytorch实现人脸识别

        接着在fp.py中输入以下代码:

import cv2
import torch
from facenet_pytorch import MTCNN, InceptionResnetV1

# 获得人脸特征向量
def load_known_faces(dstImgPath, mtcnn, resnet):
    aligned = []
    knownImg = cv2.imread(dstImgPath) # 读取图片
    face = mtcnn(knownImg)  # 使用mtcnn检测人脸,返回【人脸数组】

    if face is not None:
        aligned.append(face[0])
    aligned = torch.stack(aligned).to(device)
    with torch.no_grad():
        known_faces_emb = resnet(aligned).detach().cpu()  # 使用resnet模型获取人脸对应的特征向量
    print("\n人脸对应的特征向量为:\n", known_faces_emb)
    return known_faces_emb, knownImg

# 计算人脸特征向量间的欧氏距离,设置阈值,判断是否为同一个人脸
def match_faces(faces_emb, known_faces_emb, threshold):
    isExistDst = False
    distance = (known_faces_emb[0] - faces_emb[0]).norm().item()
    print("\n两张人脸的欧式距离为:%.2f" % distance)
    if(distance < threshold):
        isExistDst = True
    return isExistDst

if __name__ == '__main__':
    # help(MTCNN)
    # help(InceptionResnetV1)
    # 获取设备
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    print(device)
    # mtcnn模型加载【设置网络参数,进行人脸检测】
    mtcnn = MTCNN(min_face_size=12, thresholds=[0.2, 0.2, 0.3], keep_all=True, device=device)
    # InceptionResnetV1模型加载【用于获取人脸特征向量】
    resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)
    MatchThreshold = 0.8    # 人脸特征向量匹配阈值设置

    known_faces_emb, _ = load_known_faces('zj.jpg', mtcnn, resnet)  # 已知人物图
    # bFaceThin.png  lyf2.jpg
    faces_emb, img = load_known_faces('zj2.jpg', mtcnn, resnet) # 待检测人物图
    isExistDst = match_faces(faces_emb, known_faces_emb, MatchThreshold)  # 人脸匹配
    print("设置的人脸特征向量匹配阈值为:", MatchThreshold)
    if isExistDst:
        boxes, prob, landmarks = mtcnn.detect(img, landmarks=True)  # 返回人脸框,概率,5个人脸关键点
        print('由于欧氏距离小于匹配阈值,故匹配')
    else:
        print('由于欧氏距离大于匹配阈值,故不匹配')

        第一次运行时系统需要下载预训练的vggface模型,时间会比较久,耐心等待下载好之后程序便可以运行。

【人脸识别】基于facenet_pytorch实现人脸识别

        

        程序的输出结果包括运行设备、两张图片中人脸对应的特征向量、两张人脸的欧式距离、设置的人脸特征向量匹配阈值和两张人脸是否匹配。

        部分运行结果如下所示:

【人脸识别】基于facenet_pytorch实现人脸识别

【人脸识别】基于facenet_pytorch实现人脸识别

         根据运行结果,两张图片中人脸的欧氏距离小于设定的匹配阈值,故匹配,也就是说两张人脸是同一个人。下面,我们尝试将zj2.jpg替换为周杰伦的照片zjl.jpg,来看看会有什么结果。

【人脸识别】基于facenet_pytorch实现人脸识别

【人脸识别】基于facenet_pytorch实现人脸识别

         结果显示,两张图片中人脸的欧氏距离大于设定的匹配阈值,故不匹配,也就是说两张人脸不是同一个人。

        这样的话,我们的代码就能实现简单的人脸识别啦。文章来源地址https://www.toymoban.com/news/detail-444716.html

到了这里,关于【人脸识别】基于facenet_pytorch实现人脸识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计——基于Pytorch的人脸识别及人像卡通化算法设计与实现(源码+数据+模型)

    如需完整项目,请私信博主 基于Pytorch的人脸识别及人像卡通化算法设计与实现综述 一、引言 随着深度学习技术的飞速发展,人脸识别与人像卡通化作为计算机视觉领域的两大重要应用,近年来受到了广泛关注。基于Pytorch的人脸识别技术通过构建深度学习模型,实现对人脸

    2024年04月17日
    浏览(60)
  • facenet, dlib人脸识别,人体检测,云数据库mysql,QQ邮箱,手机验证码,语音播报

    目录 部分代码展示:  录入部分 识别部分​编辑  活体检测部分​编辑  同步到云数据库MySQL  其他操作 部分图片展示: 完整代码加ui链接: 涉及到的一些知识点的文章  活体检测超过三次的人员禁止识别(后面可通过管理员接触) 管理员登录和人脸录入需要手机验证码,

    2024年02月08日
    浏览(54)
  • OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ Local Binary Pattern Histofram简称LBPH,即局部二进制模式直方图,这是一种基于局部二进制模式算法,这种算法善于捕获局部纹理特征 开发者需要通过以下三种方法来完成人脸识别操作 1:通过cv2.face.LBPHFaceRecognizer_create()方法创

    2024年02月10日
    浏览(42)
  • FER2013人脸表情识别从零实现(Pytorch,FNN,CNN)

    学完了深度学习的理论和框架,接下来就是实践啦!相信大家在实践的时候都会去找各种的项目,本文是kaggle上面的一个深度学习小项目,目的是实现人脸表情的分类。接下来我将具体讲解实现过程,相信你只要学了深度学习的理论知识,对pytorch框架有所了解,就能够看得懂

    2024年02月05日
    浏览(39)
  • 基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标,利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数

    2024年02月08日
    浏览(36)
  • Ubuntu下的Opencv识别人脸#采用百度智能云平台方案#人脸识别考勤机#C++

    #简介:这是在ubuntu22.04里面使用opencv打开摄像头,通过摄像头获取图像并截取人脸图像,再将人脸图像转换成百度智能云平台所能接受的base64格式(当然也有其他格式),将base64格式的人脸图像发送给百度智能云,通过智能云平台的计算得到图像的匹配信息,本机接收到信息

    2024年02月20日
    浏览(68)
  • 基于OpenCV提供的人脸识别算法LBPH实现人脸识别

    本文通过学习LBPH人脸识别算法,简要了解人脸识别技术的原理,实现人脸采集、训练人脸模型实现人脸识别。 OpenCV库自带的人脸级联分级器具有很好的人脸检测和人脸追踪效果,它是一个基于Haar特征的Adaboost级联分类器。特别注意,OpenCV库虽然自带人脸级联分级器,但是识

    2024年02月03日
    浏览(35)
  • python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)(一)

    python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)(二) 逗号前的事图像路径,逗号后的事对应的标签 定义了模型存储、模型恢复、优化函数以及与学习率相关的设定 关于数据处理相关: 定义方式: 例子: 以上定义好batch_norm层后,在网络训练

    2024年02月11日
    浏览(34)
  • 【Ubuntu】基于C++实现人脸识别

    笔记主要参考B站视频“【大厂敲门砖】从0到1做一个物联网人脸识别考勤机项目!”。 项目原理速览查看B站视频“【学习笔记】基于OpenCV实现人脸识别的原理讲解”。 注:代码文件会放在本人的Github仓库。 实现效果 图1 项目最终实现效果 所需工具 老师使用:VMware12 + Ubun

    2024年02月07日
    浏览(28)
  • 基于树莓派和opencv实现人脸识别

    源码我放在github上了 https://github.com/FjnuThomas/-opencv- 各位哥哥姐姐clone代码别忘了给个小心心哦😘 前言 一、人脸检测 二、图像采集 三、开始训练 四、人脸识别 总结 我们这学期选修了一门嵌入式Linux,期末选择了基于树莓派和opencv实现人脸识别作为期末作业。为了展示的方便

    2023年04月23日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包