人脸对齐-MTCNN实现

#coding=utf-8
import  face_comm
import  face_detect
import  cv2
import  numpy as np
import  os
import  time
import  random

class Alignment:
    def align_face(self,opic,faceKeyPoint):
        img = cv2.imread(opic)
        faceKeyPoint = faceKeyPoint[0]

        #根据两个鼻子和眼睛进行3点对齐
        eye1 = faceKeyPoint[0]
        eye2 = faceKeyPoint[1]
        noise = faceKeyPoint[2]
        source_point = np.array(
            [eye1, eye2, noise], dtype=np.float32
        )

        eye1_noraml= [int(x) for x in face_comm.get_conf('alignment','left_eye').split(',')]
        eye2_noraml=[int(x) for x in face_comm.get_conf('alignment','right_eye').split(',')]
        noise_normal=[int(x) for x in face_comm.get_conf('alignment','noise').split(',')]
        #设置的人脸标准模型

        dst_point = np.array(
            [eye1_noraml,
             eye2_noraml,
             noise_normal],
            dtype=np.float32)

        tranform = cv2.getAffineTransform(source_point, dst_point)

        imagesize=tuple([int(x) for x in face_comm.get_conf('alignment','imgsize').split(',')])
        img_new = cv2.warpAffine(img, tranform, imagesize)
        new_image= os.path.abspath(face_comm.get_conf('alignment','aligment_face_dir'))
        new_image= new_image+'/'+'%d_%d.png'%(time.time(),random.randint(0,100))
        if cv2.imwrite(new_image, img_new):
            return new_image
        return None

if __name__=='__main__':
    pic='a.jpg'
    detect = face_detect.Detect()
    result = detect.detect_face(pic)
    if len(result['boxes']):
        align  = Alignment()
        print ('align face: '+ align.align_face(pic,result['face_key_point']))
    else:
        print ('not found face')

face_detect

# coding: utf-8
import mxnet as mx
from mtcnn.mtcnn_detector import MtcnnDetector
import cv2
import os
import time

import  numpy as np
import  face_comm

model= os.path.abspath(face_comm.get_conf('mtcnn','model'))
class Detect:
    def __init__(self):
        self.detector = MtcnnDetector(model_folder=model, ctx=mx.cpu(0), num_worker=4, accurate_landmark=False)
    def detect_face(self,image):
        img = cv2.imread(image)
        results =self.detector.detect_face(img)
        boxes=[]
        key_points = []
        if results is not None:
            #box框
            boxes=results[0]
            #人脸5个关键点
            points = results[1]
            for i in results[0]:
                faceKeyPoint = []
                for p in points:
                    for i in range(5):
                        faceKeyPoint.append([p[i], p[i + 5]])
                key_points.append(faceKeyPoint)
        return {"boxes":boxes,"face_key_point":key_points}


if __name__=='__main__':
    pic='/Users/chenlinzhong/Downloads/temp.jpeg'
    detect = Detect()
    result = detect.detect_face(pic)
    print result
    exit(0)

face_comm

#coding=utf-8

import  ConfigParser
import  demjson

#读取配置文件
def get_conf(key,value):
    cf = ConfigParser.ConfigParser()
    cf.read('config.ini')
    return cf.get(key,value)


def embed_to_str(vector):
    new_vector = [str(x) for x in vector]
    return ','.join(new_vector)


def str_to_embed(str):
    str_list = str.split(',')
    return [float(x) for x in str_list]


def fmt_data(arrData):
    str= demjson.encode(arrData)
    str_len=len(str)
    str_len="%04d"%str_len
    return str_len+str

def trans_string(retData):
    fp=open('json_tmp.txt','w')
    print >> fp, retData
    fp.close()
    return get_json_data()

def get_json_data():
    f = open('json_tmp.txt')
    line = f.readline()
    f.close()
    str_len = len(line)-1
    str_len = "%04d" % str_len
    return str_len + line

if __name__=='__main__':
    print (get_conf('annoy','index_path'))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值