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

作者:wjmishuai

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

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


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


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


代码详解:
# -*- 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'



运行结果:


./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
不是同一个人!!!!


算法性能:



  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值