wjmishuai / blog_20160318_1_7432076

来自CSDN博客:深度学习与人脸识别系列(5)__vgg人脸识别模型测试 http://blog.csdn.net/wjmishuai/article/details/50854168#

  图片 实现原理和过程 性能测试 算法 脸部识别 最后更新时间 2016-03-18 10:23:50
blog_20160318_1_7432076 87行 Python
Raw
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
# -*- coding: utf-8 -*-
#想要加中文注释就必须将字符编码格式设置为utf8
#作者:郭开

import numpy as np
import os
import cv2
import cv2.cv as cv
from skimage import transform as tf
from PIL import Image, ImageDraw
import threading
from time import ctime,sleep
import time
import sklearn
import matplotlib.pyplot as plt
import skimage

caffe_root = '/home/gk/caffe-master/'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
import sklearn.metrics.pairwise as pw


#我把GPU加速注释掉了,所以没有GPU加速,速度有点慢,你要在学校有条件找个有GeForce显卡的电脑
#caffe.set_mode_gpu()


#加载caffe模型
global net
net=caffe.Classifier('/home/gk/caffe-master/examples/VGG_net/deploy.prototxt',
'/home/gk/caffe-master/examples/VGG_net/VGG_face.caffemodel')

def compar_pic(path1,path2):
global net
#加载验证图片
X=read_image(path1)
test_num=np.shape(X)[0]
#X 作为 模型的输入
out = net.forward_all(data = X)
#fc7是模型的输出,也就是特征值
feature1 = np.float64(out['fc7'])
feature1=np.reshape(feature1,(test_num,4096))
#加载注册图片
X=read_image(path2)
#X 作为 模型的输入
out = net.forward_all(data=X)
#fc7是模型的输出,也就是特征值
feature2 = np.float64(out['fc7'])
feature2=np.reshape(feature2,(test_num,4096))
#求两个特征向量的cos值,并作为是否相似的依据
predicts=pw.cosine_similarity(feature1,feature2)
return predicts



def read_image(filelist):

averageImg = [129.1863,104.7624,93.5940]
X=np.empty((1,3,224,224))
word=filelist.split('\n')
filename=word[0]
im1=skimage.io.imread(filename,as_grey=False)
#归一化
image =skimage.transform.resize(im1,(224, 224))*255
X[0,0,:,:]=image[:,:,0]-averageImg[0]
X[0,1,:,:]=image[:,:,1]-averageImg[1]
X[0,2,:,:]=image[:,:,2]-averageImg[2]
return X


if __name__ == '__main__':

#设置阈值,大于阈值是同一个人,反之
thershold=0.85
#加载注册图片与验证图片
#注意:人脸图像必须是N*N的!!!如果图片的高和宽不一样,进行归一化的时候会对图片进行拉伸,影响识别效果
reg_path="./2-1.png"
rec_path="./3-1.png"

#计算注册图片与验证图片的相似度
result=compar_pic(reg_path,rec_path)
print "%s%s两张图片的相似度是:%f\n\n"%(reg_path,rec_path,result)
if result>=thershold:
print '是一个人!!!!\n\n'
else:
print '不是同一个人!!!!\n\n'