直接可用的人脸识别+人脸对齐模块

人脸识别:mtcnn (依赖opencv和tensorflow)

人脸对齐:face-alignment

 

国内镜像:

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

豆瓣:http://pypi.douban.com/simple/

 

安装方式:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mtcnn

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple face-alignment

 

使用案例 - 人脸识别:

#!/usr/bin/env python
# -*- coding:utf-8-*-

'''
使用python公开包 mtcnn 来进行人脸检测和关键点检测
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mtcnn
'''

import os
import tensorflow as tf
from mtcnn.mtcnn import MTCNN

if tf.test.is_gpu_available():
    os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
    os.environ["CUDA_VISIBLE_DEVICES"] = "0"

import os, sys
import os.path as osp
import glob
import numpy as np
import cv2
import shutil
from pprint import pprint


def mkdir_if_not_exist(path):
    if not osp.exists(path):
        os.makedirs(path)


def face_detect():
    save_root = '/home/dxs/dataset/fer2013+/'
    fs = 'Test'
    read_path = save_root + '/' + fs
    save_path = save_root + '/' + fs + '_cutface'
    save_path2 = save_root + '/' + fs + '_noface'
    mkdir_if_not_exist(save_path)
    mkdir_if_not_exist(save_path2)

    with tf.device('/gpu:0'):
        detector = MTCNN()
        files = glob.glob(read_path + '/**/*.png')
        for f in files:
            subdir = f.split('/')[-2]
            fullpath = save_path + '/' + subdir
            mkdir_if_not_exist(fullpath)
            fullpath2 = save_path2 + '/' + subdir
            mkdir_if_not_exist(fullpath2)

            filename = osp.basename(f)
            # f = '0_Parade_Parade_0_730.jpg'
            img = cv2.imread(f)
            if img is None: continue

            src_h, src_w, c = img.shape
            face_list = detector.detect_faces(img)
            if len(face_list) == 0:
                save_filepath = osp.join(fullpath2, filename)
                shutil.copy(f, save_filepath)
                continue
            for item in face_list:
                box = item['box']
                conf = item['confidence']
                keyprints_dict = item['keypoints']
                left_eyeXY = keyprints_dict['left_eye']
                right_eyeXY = keyprints_dict['right_eye']
                mouth_leftXY = keyprints_dict['mouth_left']
                mouth_rightXY = keyprints_dict['mouth_right']
                noseXY = keyprints_dict['nose']
                if conf > .2:
                    print('detect a face .')
                    x, y, w, h = box
                    offset = 5
                    x = x - offset if x > offset else 0
                    y = y - offset if y > offset else 0
                    w = w + offset if x + w + offset <= src_w else src_w - x
                    h = h + offset if y + h + offset <= src_h else src_h - y

                    crop_face = img[y:y + h, x:x + w, :]
                    save_filepath = osp.join(fullpath, filename)
                    if not osp.exists(save_filepath):
                        cv2.imwrite(save_filepath, crop_face)

                    # line = ','.join([' '.join(left_eyeXY),' '.join(right_eyeXY),
                    #                  ' '.join(mouth_leftXY), ' '.join(mouth_rightXY),
                    #                  ' '.join(noseXY)]) + '\n'
                    # wf.write(line)

            print('{} is done .'.format(filename))


if __name__ == '__main__':
    face_detect()

 

使用案例 - 人脸对齐 :

https://pypi.org/project/face-alignment/

posted @ 2019-10-09 08:50  dangxusheng  阅读(1363)  评论(0编辑  收藏  举报