参考链接:http://www.cnblogs.com/denny402/p/5685909.html
- 将图片通过名称放到对应的数字和字母的文件夹里
- 根据图片的文件夹以及预测出的结果统计正确率
#coding=utf-8
import pdb
import os
import os.path
import caffe
import numpy as np
root='/home/mqli/myFiles/carPlateRecog/' #根目录
deploy=root + 'SqueezeNet/deploy_my_267.prototxt' #deploy文件
#caffe_model=root + 'caffemodel_32_squeeze_267/train_iter_120000.caffemodel' #训练好的 caffemodel
caffe_model=root + 'caffemodel_32_noGau_squeeze_267/squ_noGau_train_iter_100000.caffemodel'
#img=root+'imgTest/9.jpg' #随机找的一张待测图片
#labels_filename = root + 'mnist/test/labels.txt' #类别名称文件,将数字标签转换回类别名称
labels = [
'X','S','B','H','K','P','R','8','M','Y',
'J','6','7','4','Z','U','9','G','L','3',
'5','W','T','A','1','N','C','0','F','2',
'E','D','V','Q'] #读取类别名称文件
imgsFoldersDir = root+'imgTest'
#把所有图片分类,放到对应首字母或者数字文件夹,例如,1_1.jpg 放到1文件夹
def putImgsIntoDir(imgsFoldersDir):
print("\n put imgs into the dir now \n")
for file in os.listdir(imgsFoldersDir):
if not os.path.isdir(file):
if not os.path.exists(imgsFoldersDir + '/'+ file[0]):
os.system('mkdir {}'.format(imgsFoldersDir + '/'+ file[0]))
if not os.path.isdir(imgsFoldersDir + '/'+file):
os.system('mv {}'.format(imgsFoldersDir + '/'+file +' ' +imgsFoldersDir + '/'+ file[0]+'/'))
putImgsIntoDir(imgsFoldersDir)
net = caffe.Net(deploy,caffe_model,caffe.TEST) #加载model和network
#图片预处理设置
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #设定图片的shape格式(1,3,28,28)
transformer.set_transpose('data', (2,0,1)) #改变维度的顺序,由原始图片(28,28,3)变为(3,28,28)
#transformer.set_mean('data', np.load(mean_file).mean(1).mean(1)) #减去均值,前面训练模型时没有减均值,这儿就不用
transformer.set_raw_scale('data', 255) # 缩放到【0,255】之间
transformer.set_channel_swap('data', (2,1,0)) #交换通道,将图片由RGB变为BGR
count = 0
right = 0
for dir_img in os.listdir(imgsFoldersDir):
dir_img = os.path.join(imgsFoldersDir,dir_img)
if os.path.isdir(dir_img):
#print dir_img
for img in os.listdir(dir_img):
img_path = os.path.join(dir_img,img)
im=caffe.io.load_image(img_path) #加载图片
#执行上面设置的图片预处理操作,并将图片载入到blob中
net.blobs['data'].data[...] = transformer.preprocess('data',im)
#执行测试
out = net.forward()
prob= net.blobs['prob'].data[0].flatten() #取出最后一层(Softmax)属于某个类别的概率值,并打印
#print prob
order=prob.argsort()[-1] #将概率值排序,取出最大值所在的序号
if labels[order]==dir_img[-1]:
right+=1
else:
print img_path
print 'the predict class is:',labels[order],'\n' #将该序号转换成对应的类别名称,并打印
count+=1
print 'right nums=', right
print 'imgs nums=', count
print 'acc = right /count=', right/float(count)
#pdb.set_trace()