#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'))