importsys
reload(sys)
sys.setdefaultencoding('utf8')
问题2
报错信息:_tkinter.TclError: no display name and no $DISPLAY environment variable 详情:
Traceback (most recent call last):
File"ODtest.py", line 103, in Detection()
File"ODtest.py", line 96, inDetection
plt.figure(figsize=IMAGE_SIZE)
File"/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 533, infigure**kwargs)
File"/usr/local/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 161, innew_figure_managerreturncls.new_figure_manager_given_figure(num, fig)
File"/usr/local/lib/python2.7/dist-packages/matplotlib/backends/_backend_tk.py", line 1046, innew_figure_manager_given_figure
window= Tk.Tk(className="matplotlib")
File"/usr/lib/python2.7/lib-tk/Tkinter.py", line 1822, in __init__self.tk=_tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display nameand no $DISPLAY environment variable
View Code
solution:参考:https://blog.csdn.net/qq_22194315/article/details/77984423
纯代码解决方案
这也是大部分人在网上诸如stackoverflow的问答平台得到的解决方案,在引入pyplot、pylab之前,要先更改matplotlib的后端模式为”Agg”。直接贴代码吧!
#do this before importing pylab or pyplot
Import matplotlib
matplotlib.use('Agg')import matplotlib.pyplot asplt
View Code
修改之后代码为:
#!usr/bin/python#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib
matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom utils importlabel_map_utilfrom utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告
importsys
reload(sys)
sys.setdefaultencoding('utf8')
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------
defloading():
with detection_graph.as_default():
od_graph_def=tf.GraphDef()
PATH_TO_CKPT= 'ssd_mobilenet_v1_coco_11_06_2017' + '/frozen_inference_graph.pb'with tf.gfile.GFile(PATH_TO_CKPT,'rb') as fid:
serialized_graph=fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------
defload_image_into_numpy_array(image):
(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(
(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')
label_map=label_map_util.load_labelmap(PATH_TO_LABELS)
categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)
category_index=label_map_util.create_category_index(categories)def Detection(image_path="images/image1.jpg"):
loading()
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:#for image_path in TEST_IMAGE_PATHS:
image =Image.open(image_path)#the array based representation of the image will be used later in order to prepare the
#result image with boxes and labels on it.
image_np =load_image_into_numpy_array(image)#Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor= detection_graph.get_tensor_by_name('image_tensor:0')#Each box represents a part of the image where a particular object was detected.
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')#Each score represent how level of confidence for each of the objects.
#Score is shown on the result image, together with the class label.
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes= detection_graph.get_tensor_by_name('detection_classes:0')
num_detections= detection_graph.get_tensor_by_name('num_detections:0')#Actual detection.
(boxes, scores, classes, num_detections) =sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})#Visualization of the results of a detection.将识别结果标记在图片上
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)#output result输出
for i in range(3):if classes[0][i] incategory_index.keys():
class_name= category_index[classes[0][i]]['name']else:
class_name= 'N/A'
print("object:%s gailv:%s" %(class_name, scores[0][i]))#matplotlib输出图片
#Size, in inches, of the output images.
IMAGE_SIZE = (20, 12)
plt.figure(figsize=IMAGE_SIZE)
plt.imshow(image_np)
plt.show()#运行
Detection()
View Code
运行结果:
如无意外,加上时间统计函数,调用已下载好的预训练模型即可
二、使用预训练模型
使用ssd_mobilenet_v1_coco_11_06_2017
对上边的代码进行修改,注意修改PATH_TO_LABELS的路径,models中包括mscoco_label_map.pbtxt文件,在/models/research/object_detection/data目录下,另外注意from object_detection.utils import label_map_util中,在utils前边要加上object_detection
修改后的代码路径为:/models/models/mcode/ODtest.py 代码如下
#!usr/bin/python#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib
matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom object_detection.utils importlabel_map_utilfrom object_detection.utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告
importsys
reload(sys)
sys.setdefaultencoding('utf8')
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------
defloading():
with detection_graph.as_default():
od_graph_def=tf.GraphDef()
PATH_TO_CKPT= '/home/yanjieliu/models/models/research/object_detection/pretrained_models/ssd_mobilenet_v1_coco_11_06_2017' + '/frozen_inference_graph.pb'with tf.gfile.GFile(PATH_TO_CKPT,'rb') as fid:
serialized_graph=fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------
defload_image_into_numpy_array(image):
(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(
(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('/home/yanjieliu/models/models/research/object_detection/data', 'mscoco_label_map.pbtxt')
label_map=label_map_util.load_labelmap(PATH_TO_LABELS)
categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)
category_index=label_map_util.create_category_index(categories)def Detection(image_path="/home/yanjieliu/dataset/img_test/p1.jpg"):
loading()
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:#for image_path in TEST_IMAGE_PATHS:
image =Image.open(image_path)#the array based representation of the image will be used later in order to prepare the
#result image with boxes and labels on it.
image_np =load_image_into_numpy_array(image)#Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor= detection_graph.get_tensor_by_name('image_tensor:0')#Each box represents a part of the image where a particular object was detected.
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')#Each score represent how level of confidence for each of the objects.
#Score is shown on the result image, together with the class label.
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes= detection_graph.get_tensor_by_name('detection_classes:0')
num_detections= detection_graph.get_tensor_by_name('num_detections:0')#Actual detection.
(boxes, scores, classes, num_detections) =sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})#Visualization of the results of a detection.将识别结果标记在图片上
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)#output result输出
for i in range(3):if classes[0][i] incategory_index.keys():
class_name= category_index[classes[0][i]]['name']else:
class_name= 'N/A'
print("object:%s gailv:%s" %(class_name, scores[0][i]))#matplotlib输出图片
#Size, in inches, of the output images.
IMAGE_SIZE = (20, 12)
plt.figure(figsize=IMAGE_SIZE)
plt.imshow(image_np)
plt.show()#运行
Detection()
View Code
可正确运行
若想使用该链接中的脚本http://www.baiguangnan.com/2018/02/12/objectdetection2/,则需要进行一些修改,否则会有错误,待做
传参并将时间记录到txt文档的版本,将ODtest.py进行部分修改,修改后的内容在1to10test.py中
#!usr/bin/python#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib
matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom object_detection.utils importlabel_map_utilfrom object_detection.utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告
importtimeimportargparseimportsys
reload(sys)
sys.setdefaultencoding('utf8')
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------
defloading(model_name):
with detection_graph.as_default():
od_graph_def=tf.GraphDef()
PATH_TO_CKPT= '/home/yanjieliu/models/models/research/object_detection/pretrained_models/'+model_name + '/frozen_inference_graph.pb'with tf.gfile.GFile(PATH_TO_CKPT,'rb') as fid:
serialized_graph=fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------
defload_image_into_numpy_array(image):
(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(
(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('/home/yanjieliu/models/models/research/object_detection/data', 'mscoco_label_map.pbtxt')
label_map=label_map_util.load_labelmap(PATH_TO_LABELS)
categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)
category_index=label_map_util.create_category_index(categories)defDetection(args):
image_path=args.image_path
loading(args.model_name)#start = time.time()
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:#for image_path in TEST_IMAGE_PATHS:
image =Image.open(image_path)#the array based representation of the image will be used later in order to prepare the
#result image with boxes and labels on it.
image_np =load_image_into_numpy_array(image)#Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor= detection_graph.get_tensor_by_name('image_tensor:0')#Each box represents a part of the image where a particular object was detected.
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')#Each score represent how level of confidence for each of the objects.
#Score is shown on the result image, together with the class label.
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes= detection_graph.get_tensor_by_name('detection_classes:0')
num_detections= detection_graph.get_tensor_by_name('num_detections:0')#Actual detection.
(boxes, scores, classes, num_detections) =sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})#Visualization of the results of a detection.将识别结果标记在图片上
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)#output result输出
for i in range(3):if classes[0][i] incategory_index.keys():
class_name= category_index[classes[0][i]]['name']else:
class_name= 'N/A'
print("object:%s gailv:%s" %(class_name, scores[0][i]))#matplotlib输出图片
#Size, in inches, of the output images.
IMAGE_SIZE = (20, 12)
plt.figure(figsize=IMAGE_SIZE)
plt.imshow(image_np)
plt.show()defparse_args():'''parse args'''parser=argparse.ArgumentParser()
parser.add_argument('--image_path', default='/home/yanjieliu/dataset/img_test/p4.jpg')
parser.add_argument('--model_name',
default='mask_rcnn_inception_resnet_v2_atrous_coco_2018_01_28')returnparser.parse_args()#运行
start =time.time()
Detection(parse_args())
end=time.time()print('time:\n')print str(end-start)
with open('./outputs/1to10test_outputs.txt', 'a') as f:
f.write('\n')
f.write(str(end-start))
View Code
使用 python 1to10test_new.py --image_path /home/yanjieliu/dataset/img_test/p5.jpg --model_name mask_rcnn_inception_resnet_v2_atrous_coco_2018_01_28 便可调用运行
或者写一个shell脚本,将此命令执行10遍,然后求平均运行时间即可
例如
#!/bin/bash
for i in $(seq 1 10)
do
python 1to10test_new.py--image_path /home/yanjieliu/dataset/img_test/p4.jpg --model_name mask_rcnn_inception_resnet_v2_atrous_coco_2018_01_28
done
View Code
检测单张图片的模板
#!usr/bin/python#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib
matplotlib.use('Agg')importmatplotlib.pyplotfrom matplotlib importpyplot as pltimportosimporttensorflow as tffrom PIL importImagefrom object_detection.utils importlabel_map_utilfrom object_detection.utils importvisualization_utils as vis_utilimportdatetime#关闭tensorflow警告
importtimeimportMySQLdbimportargparseimportsys
reload(sys)
sys.setdefaultencoding('utf8')
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'detection_graph=tf.Graph()#加载模型数据-------------------------------------------------------------------------------------------------------
defloading(model_name):
with detection_graph.as_default():
od_graph_def=tf.GraphDef()
PATH_TO_CKPT= '/home/yanjieliu/models/models/research/object_detection/pretrained_models/'+model_name + '/frozen_inference_graph.pb'with tf.gfile.GFile(PATH_TO_CKPT,'rb') as fid:
serialized_graph=fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')returndetection_graph#Detection检测-------------------------------------------------------------------------------------------------------
defload_image_into_numpy_array(image):
(im_width, im_height)=image.sizereturnnp.array(image.getdata()).reshape(
(im_height, im_width,3)).astype(np.uint8)#List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = os.path.join('/home/yanjieliu/models/models/research/object_detection/data', 'mscoco_label_map.pbtxt')
label_map=label_map_util.load_labelmap(PATH_TO_LABELS)
categories= label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90, use_display_name=True)
category_index=label_map_util.create_category_index(categories)defDetection(args):
image_path=args.image_path
image_name=args.image_name
loading(args.model_name)#start = time.time()
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:#for image_path in TEST_IMAGE_PATHS:
image = Image.open('%s%s'%(image_path, image_name))#the array based representation of the image will be used later in order to prepare the
#result image with boxes and labels on it.
image_np =load_image_into_numpy_array(image)#Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor= detection_graph.get_tensor_by_name('image_tensor:0')#Each box represents a part of the image where a particular object was detected.
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')#Each score represent how level of confidence for each of the objects.
#Score is shown on the result image, together with the class label.
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes= detection_graph.get_tensor_by_name('detection_classes:0')
num_detections= detection_graph.get_tensor_by_name('num_detections:0')#Actual detection.
(boxes, scores, classes, num_detections) =sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})#Visualization of the results of a detection.将识别结果标记在图片上
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)#output result输出
list =[]for i in range(5):if classes[0][i] incategory_index.keys():
class_name= category_index[classes[0][i]]['name']else:
class_name= 'N/A'
print("object:%s gailv:%s" %(class_name, scores[0][i]))#print(boxes)
if(float(scores[0][i])>0.5):
list.append(class_name.encode('utf-8'))#matplotlib输出图片
#Size, in inches, of the output images.
IMAGE_SIZE = (20, 12)
plt.figure(figsize=IMAGE_SIZE)
plt.imshow(image_np)
plt.show()defparse_args():'''parse args'''parser=argparse.ArgumentParser()
parser.add_argument('--image_path', default='/home/yanjieliu/rdshare/dataset/dog/')
parser.add_argument('--image_name', default='dog768_576.jpg')
parser.add_argument('--model_name',
default='faster_rcnn_resnet50_coco_2018_01_28')returnparser.parse_args()if __name__ == '__main__':#运行
args=parse_args()
start=time.time()
Detection(args)
end=time.time()print('time:\n')print str(end-start)
View Code