用Retinaface_pytorch项目检测人脸+ Python 3 剪切人脸图片并保存

概述

因为我的项目中缺一不可的一部分是提取人脸特征,因为以前并没有接触过人脸的项目,所以想把自己每次的一点点进步和学习都记录下来,这次是记录我学习切割人脸图片并保存,以及将人脸检测框和五个特征点坐标信息保存在.txt文件中。
这篇文档的方法一要稍微复杂一点点,我结合Retinaface_pytorch项目中的detect.py(检测单张图片)来检测人脸,并通过以下方法一成功的剪切出人脸,并保存特征点信息。方法二要更简单一些,相当于我用一行代码代替了方法二中的多行代码,并实现了批量检测并切割人脸图片并保存。

  • 首先附上Retinaface_pytorch项目的GitHub链接:

https://github.com/biubug6/Pytorch_Retinaface

一. 复现Retinaface_pytorch

根据Retina_pytorch项目在GitHub上给出的教程来复现Retinaface_pytorch项目的预训练模型。跑通项目中的detect.py,改变程序中的图片路径你可以试一下检测自己的单张照片。确保detect.py可以正常检测人脸。

  • 运行效果图:
    在这里插入图片描述

二.剪切人脸图(方法一)

1. 方法简述

参考:Python 3 利用 Dlib 实现人脸检测和剪切
这一篇博客介绍了利用 Python 开发,借助 Dlib 库进行人脸检测 / face detection 和剪切。里面既讲了将检测到的人脸剪切下来,依次排序平铺显示在新的图像上,也讲了将检测到的人脸存储为单个人脸图像,讲的很清晰明了。主要的大概思路就是根据检测到的人脸框坐标,计算人脸框的大小,根据这个人脸框大小生成空白的图片,接着再将人脸的图的像素点依次填充在空白图上,完成人脸的剪切。

  • 将检测到的人脸剪切下来,依次排序平铺显示在新的图像上(效果图)
    在这里插入图片描述

  • 将检测到的人脸存储为单个人脸图像(效果图)
    在这里插入图片描述

  1. Retinaface_pytorch的detect.py检测单张图片中的人脸+剪切单个人脸图
#调用相关模块和包
from __future__ import print_function
import os
import argparse
import torch
import torch.backends.cudnn as cudnn
import numpy as np
from data import cfg_mnet, cfg_re50
from layers.functions.prior_box import PriorBox
from utils.nms.py_cpu_nms import py_cpu_nms
import cv2
from models.retinaface import RetinaFace
from utils.box_utils import decode, decode_landm
import time

parser = argparse.ArgumentParser(description='Retinaface')
#设置供选择的参数(基本上保持Retinaface_pytorch中detect.py的代码不变添加或改动了几个参数使得该项目默认在CPU上运行)
parser.add_argument('-m', '--trained_model', default='./weights/Resnet50_Final.pth',
                    type=str, help='Trained state_dict file path to open')
parser.add_argument('--network', default='resnet50', help='Backbone network mobile0.25 or resnet50')
parser.add_argument('--cpu', action="store_true", default=True, help='Use cpu inference')
parser.add_argument('--confidence_threshold', default=0.02, type=float, help='confidence_threshold')
parser.add_argument('--top_k', default=5000, type=int, help='top_k')
parser.add_argument('--nms_threshold', default=0.4, type=float, help='nms_threshold')
parser.add_argument('--keep_top_k', default=750, type=int, help='keep_top_k')
parser.add_argument('-s', '--show_image', action="store_true", default=False, help='show detection results')
parser.add_argument('--vis_thres', default=0.6, type=float, help='visualization_threshold')
parser.add_argument('--show_cutting_image', action ="store_true", default =True, help = 'show_crop_images')
parser.add_argument('--save_folder', default='curve/', type=str, help='Dir to save results')
args = parser.parse_args()

#保持源代码不变
def check_keys(model, pretrained_state_dict):
    ckpt_keys = set(pretrained_state_dict.keys())
    model_keys = set(model.state_dict().keys())
    used_pretrained_keys = model_keys & ckpt_keys
    unused_pretrained_keys = ckpt_keys - model_keys
    missing_keys = model_keys - ckpt_keys
    print('Missing keys:{}'.format(len(missing_keys)))
    print('Unused checkpoint keys:{}'.format(len(unused_pretrained_keys))
  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
利用pytorch实现retinaface arcface人脸识别项目可以分为以下几个步骤。 首先,我们需要安装pytorch和相关的依赖库,例如numpy、opencv等。 其次,我们需要获取训练所需的数据集。可以使用已有的人脸数据库,如LFW或MS-Celeb-1M。如果需要自己采集数据集,可以使用摄像头获取人脸图像。同时,还需要标注数据集,即为每张人脸图像添加标签,用于后续的训练。 接着,我们需要训练retinaface模型。retinaface是一种使用单阶段多任务级联网络实现的人脸检测模型,它可以同时检测人脸的位置和关键点。我们可以使用已有的retinaface模型进行微调,或者从头开始训练一个retinaface模型。 然后,我们需要训练arcface模型。arcface是一种使用全连接网络实现的人脸识别模型,它可以将人脸图像映射到一个高维特征空间,并计算人脸之间的相似度。我们可以使用已有的arcface模型进行微调,或者从头开始训练一个arcface模型。 最后,我们可以使用训练好的retinaface和arcface模型进行人脸识别。首先,使用retinaface模型检测人脸并提取关键点。然后,使用arcface模型将提取的人脸特征与已有的标签进行比对,得到相似度结果。最后,根据相似度结果进行人脸识别。 需要注意的是,在实现retinaface arcface人脸识别项目时,我们还需要进行数据预处理、数据增强、模型评估等工作,并进行超参数的选择和调优,以提高识别的准确性和性能。 总结来说,利用pytorch实现retinaface arcface人脸识别项目需要进行数据集获取和标注、训练retinaface模型、训练arcface模型以及人脸识别的实现等多个步骤,通过这个过程可以实现准确性较高的人脸识别系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值