深度学习与人脸识别系列(5)__vgg人脸识别模型测试

来源:互联网 发布:农村淘宝服务中心电话 编辑:程序博客网 时间:2024/06/05 17:55

作者:wjmishuai

出处:http://blog.csdn.net/wjmishuai/article/details/50854168

声明:版权所有,转载请注明出处

代码下载地址:https://github.com/PatienceKai/VGG_Face_Caffe_Model

运行代码之前请把你的caffe环境配置好.
可以实现成C++版本的,由于项目是合作的,我不能上传.python版是我自己写的,流程是一样的.


注意啊,有人反映代码运行速度慢,主要原因是考虑到大部分人的电脑没有支持cuda的独显,所以这里使用的是cpu跑程序,如果你有独显并安装了cuda,速度是飞快的....


代码详解:
# -*- coding: utf-8 -*-#想要加中文注释就必须将字符编码格式设置为utf8#作者:郭开import numpy as npimport osimport cv2import cv2.cv as cvfrom skimage import transform as tffrom PIL import Image, ImageDrawimport threadingfrom time import ctime,sleepimport timeimport sklearnimport matplotlib.pyplot as pltimport skimagecaffe_root = '/home/gk/caffe-master/'import syssys.path.insert(0, caffe_root + 'python')import caffeimport sklearn.metrics.pairwise as pw#我把GPU加速注释掉了,所以没有GPU加速,速度有点慢,你要在学校有条件找个有GeForce显卡的电脑#caffe.set_mode_gpu()#加载caffe模型global netnet=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  predictsdef 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 Xif __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'



运行结果:


./1-1.png和./1-2.png两张图片的相似度是:0.917091
是一个人!!!!

./2-1.png和./2-2.png两张图片的相似度是:0.942353
是一个人!!!!

./3-1.png和./3-2.png两张图片的相似度是:0.890270
是一个人!!!!



./1-1.png和./2-1.png两张图片的相似度是:0.714049
不是同一个人!!!!

./1-1.png和./3-1.png两张图片的相似度是:0.790391
不是同一个人!!!!

./2-1.png和./3-1.png两张图片的相似度是:0.773282
不是同一个人!!!!


算法性能:



2 0
原创粉丝点击