一、 本文的结构
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