MTCNN结合Face_recognition实现图片中人脸识别

本文介绍了如何使用预训练的MTCNN模型和face_recognition库进行人脸识别。首先搭建算法环境,安装所需库,接着生成底库文件,利用MTCNN进行人脸检测并使用face_recognition提取128维特征。最后,结合两者进行人脸识别,并与底库对比输出结果。
摘要由CSDN通过智能技术生成

一、 本文的结构

1、算法相关库的安装
2、底库文件生成
3、人脸识别
其中需要用到训练好的mtcnn模型,文中博主直接使用已经训练好的mtcnn模型

二、 算法环境搭建以及相关库安装

创建虚拟环境:

conda create -n face_recognize python=3.5

1. mtcnn环境配置
在新创建的环境中安装:

pip install tensorflow-gpu==1.14
pip install opencv-python

将训练好的mtcnn人脸检测代码放入project中
2. face-recognition依赖库安装
在环境中安装:

pip install cmake
pip install easydict
pip install scikit-learn==0.21.3
pip install Pillow 
pip install dlib
pip install face-recognition-models 

源码下载face-recognition代码

git clone https://github.com/ageitgey/face_recognition.git

三、 底库文件生成

1、该部分代码为生成人脸识别算法的底库文件,首先准备数据,数据集文件格式如下图文件夹结构所示:
在这里插入图片描述
图中每个文件夹代表一个类别,每个类别中放置几张图片,
运行代码后生成clf文件,用以下一部分的人脸识别;
代码:face_pic_classfier.py

# coding:utf-8
import os
import face_recognition
from sklearn import neighbors
import pickle

# 加载mtcnn模块
from training.mtcnn_model import P_Net, R_Net, O_Net
from tools.loader import TestLoader
from detection.MtcnnDetector import MtcnnDetector
from detection.detector import Detector
from detection.fcn_detector import FcnDetector
from face_recognition.face_recognition_cli import image_files_in_folder


def net(stage):
    detectors = [None, None, None]
    if stage in ['pnet', 'rnet', 'onet']:
        modelPath = "/home/alex/face_recognize/mtcnn_fance-recognize/main/tmp/model/pnet"
        a = [b[5:-6] for b in os.listdir(modelPath) if b.startswith('pnet-') and b.endswith('.index')]
        maxEpoch = max(map(int, a))  # auto match a max epoch model
        modelPath = os.path.join(modelPath, "pnet-%d" % (maxEpoch))
        print("Use PNet model: %s" % (modelPath))
        detectors[0] = FcnDetector(P_Net, modelPath)
    if stage in ['rnet', 'onet']:
        modelPath = "/home/alex/face_recognize/mtcnn_fance-recognize/main/tmp/model/rnet"
        a = [b[5:-6] for b in os.listdir(modelPath) if b.startswith('rnet-') and b.endswith('.index')]
        maxEpoch = max(map(int, a))
        modelPath = os.path.join(modelPath, "rnet-%d" % (maxEpoch))
        print("Use RNet model: %s" % (modelPath))
        detectors[1] = Detecto
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值