1.python 接口来显示出分类概率的大小:(useful)deploy.py
# coding:utf-8
import numpy as np
MyCaffeRoot = 'C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/'
ImgTestPath = 'C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/myself/classification_test/timg.jpg' #测试图片路径
#LabelsPath = MyCaffeRoot + 'myself/classification_test/labels.txt'
import sys
import caffe
import os
CaffeModelPath = MyCaffeRoot + 'myself/classification_test/_iter_184000.caffemodel'
DeployPath = MyCaffeRoot + 'myself/classification_test/my_deploy.prototxt'
NpyMeanPath = 'C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/myself/classification_test/meannpy.npy'
if os.path.exists(CaffeModelPath) == False:
print u'找不到模型的路径'
else:
print u'找到模型的路径......'
caffe.set_mode_gpu();
net = caffe.Net(DeployPath, CaffeModelPath, caffe.TEST) #创建网络
#负载均衡减去均值
mu = np.load(NpyMeanPath)
#print ("2222")
mu = mu.mean(1).mean(1) # average over pixels to obtain the mean (BGR) pixel values
print u'各个颜色通道的均值:', zip('BGR', mu)
transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape})
transformer.set_transpose('data',(2, 0, 1)) # move image channels to outermost dimension
transformer.set_mean('data',mu) # subtract the dataset-mean value in each channel
transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255]
transformer.set_channel_swap('data',(2, 1, 0)) # swap channels from RGB to BGR
net.blobs['data'].reshape(50, 3, 256, 256)
#执行测试
out = net.forward()
# transform it and copy it into the net
image = caffe.io.load_image(ImgTestPath)
net.blobs['data'].data[...] = transformer.preprocess('data', image)
print ("1111")
# perform classification
net.forward()
# obtain the output probabilities
output_prob = net.blobs['prob'].data[0].flatten()
print output_prob
2.中间需要将自己平均的数据转换成mannpy.npy:npy.py
import numpy as np
import caffe
import sys
BinaryMeanPath = 'C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/myself/classification_test/myimg_mean.binaryproto'
NpyMeanOuPath = 'C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/myself/classification_test/meannpy.npy'
print 'Start.............'
blob = caffe.proto.caffe_pb2.BlobProto()
data = open( BinaryMeanPath , 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( NpyMeanOuPath , out )
print 'Complete.............'
3.使用PIL将图片归一到一样的尺寸:(useful)save_convert.py
from PIL import Image import os.path import glob def convertjpg(jpgfile,outdir,width=256,height=256): img=Image.open(jpgfile) #new_img=img.thumbnail((width,height)) new_img=img.resize((width,height),Image.BILINEAR) new_img.save(os.path.join(outdir,os.path.basename(jpgfile))) for jpgfile in glob.glob("C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/myself/classification_test/timg.jpg"): convertjpg(jpgfile,"C:/Users/Administrator/Desktop/Caffe_Using/caffe-master/myself/classification_test/")
#convertjpg(jpgfile, outdir)
4.需要将_iter_184000.caffemodel文件,测试照片和生成的meannpy.npy还有my_deploy.prototxt文件和myimg_mean.binaryproto放在同一个文件夹。依次运行即可。