在前面的博客中也提到了通过访问远方服务器,图形不能绘制的问题。在我跑faster rcnn的过程中也遇到了这个问题,一起用绘图的程序就会有bug。比如demo前面的代码如下:
import _init_paths
import matplotlib
matplotlib.use('Agg')
from fast_rcnn.config import cfg
from fast_rcnn.test import im_detect
from fast_rcnn.nms_wrapper import nms
from utils.timer import Timer
import matplotlib.pyplot as plt
import numpy as np
import scipy.io as sio
import caffe, os, sys, cv2
import argparse
注意红色的部分是新添加的,然后在最后加上一句图片存储的语句,就可以只绘图不显示了。
然后再把图片down到本地就ok了
-----------------------------------------------------------------------------------------------------------------
接下来我们来讲下为什么这么做可以解决这个问题:
matplotlib把不同使用情形和输出格式作为目标。一些人用matplotlib在python shell上交互,当他们输入命令能够弹出绘图窗口。一些人把matplotlib嵌入到其他的用户图形接口如:wxpython或者pygtk中来编写丰富的应用程序。有些人用matplotlib使用到批处理脚本中,从数字模拟中生成Postscript图片,还有些人用在web应用服务器中来动态生成图。为了支持所有的使用情形,matplotlib能够产生不同的输出,而把每一个不同输出的能力叫做一个后端。而前端就是用户需要处理的代码,如绘图代码,然后后端做的就是所有看不到的辛苦工作来生成视图窗口。
我们使用use语句事实上就是在配置matplotlib的后端格式,使它能够只绘图不输出。