# -*- coding:utf-8 -*- # ç¨äºæ¨¡åçåå¼ å¾ååç±»æä½ import os os.environ['GLOG_minloglevel'] = '2' # å°caffeçè¾åºlogä¿¡æ¯ä¸æ¾ç¤ºï¼å¿ é¡»æ¾å°import caffeå import caffe # caffe 模å from caffe.proto import caffe_pb2 from google.protobuf import text_format import numpy as np import cv2 import matplotlib.pyplot as plt import time # åç±»åå¼ å¾åimg def detection(img, net, transformer, labels_file): im = caffe.io.load_image(img) net.blobs['data'].data[...] = transformer.preprocess('data', im) start = time.clock() # æ§è¡æµè¯ net.forward() end = time.clock() print('detection time: %f s' % (end - start)) # æ¥çç®æ æ£æµç»æ file = open(labels_file, 'r') labelmap = caffe_pb2.LabelMap() text_format.Merge(str(file.read()), labelmap) loc = net.blobs['detection_out'].data[0][0] confidence_threshold = 0.5 for l in range(len(loc)): if loc[l][2] >= confidence_threshold: xmin = int(loc[l][3] * im.shape[1]) ymin = int(loc[l][4] * im.shape[0]) xmax = int(loc[l][5] * im.shape[1]) ymax = int(loc[l][6] * im.shape[0]) img = np.zeros((512, 512, 3), np.uint8) # çæä¸ä¸ªç©ºå½©è²å¾å cv2.rectangle(im, (xmin, ymin), (xmax, ymax), (55 / 255.0, 255 / 255.0, 155 / 255.0), 2) # ç¡®å®åç±»ç±»å« class_name = labelmap.item[int(loc[l][1])].display_name # text_font = cv2.cv.InitFont(cv2.cv.CV_FONT_HERSHEY_SCRIPT_SIMPLEX, 1, 1, 0, 3, 8) cv2.putText(im, class_name, (xmin, ymax), cv2.cv.CV_FONT_HERSHEY_SIMPLEX, 1, (55, 255, 155), 2) # æ¾ç¤ºç»æ plt.imshow(im, 'brg') plt.show() #CPUæGPU模åè½¬æ¢ caffe.set_mode_cpu() #caffe.set_device(0) #caffe.set_mode_gpu() caffe_root = '../../' # ç½ç»åæ°ï¼æéï¼æä»¶ caffemodel = caffe_root + 'models/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_60000.caffemodel' # ç½ç»å®æ½ç»æé ç½®æä»¶ deploy = caffe_root + 'models/SSD_300x300/deploy.prototxt' img_root = caffe_root + 'data/VOCdevkit/VOC2007/JPEGImages/' labels_file = caffe_root + 'data/VOC0712/labelmap_voc.prototxt' # ç½ç»å®æ½åç±» net = caffe.Net(deploy, # å®ä¹æ¨¡åç»æ caffemodel, # å å«äºæ¨¡åçè®ç»æå¼ caffe.TEST) # ä½¿ç¨æµè¯æ¨¡å¼(䏿§è¡dropout) # å è½½ImageNetå¾ååå¼ (éçCaffeä¸èµ·åå¸ç) mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy') mu = mu.mean(1).mean(1) # 对ææåç´ å¼åå¹³å以æ¤è·åBGRçåå¼åç´ å¼ # å¾åé¢å¤ç transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2,0,1)) transformer.set_mean('data', mu) transformer.set_raw_scale('data', 255) transformer.set_channel_swap('data', (2,1,0)) # å¤çå¾å while 1: img_num = raw_input("Enter Img Number: ") if img_num == '': break img = img_root + '{:0>6}'.format(img_num) + '.jpg' detection(img,net,transformer,labels_file)