运行ObjectDetection API示例遇到错误:Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
项目场景
安装TensorFlow/ObjectDetection API后将原本在jupyter notebook下运行的object_detection_tutorial.ipynb文件内容复制到py文件中,使用pycharm运行
问题1
问题描述:
出现报错:%matplotlib inline:invalid syntax
原因分析:
%matplotlib inline写法是ipython的,pycharm不支持
解决方案:
将这一行注释掉即可解决报错
但此时仍不显示图片,需要在程序显示图片部分的最后添加一行代码:
plt.show()
但程序仍未显示图片,经检查,在画图程序前,图片已读取到工作区,继续往下看
问题2
问题描述:
出现报错:Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure
原因分析:
如错误提示中所示,agg没有图形显示界面,因此需要切换其他终端
解决方案:
查到的大多解决方案都是在前面import部分添加:
import matplotlib
matplotlib.use('TkAgg')
部分人反映问题已解决,但我的程序仍报相同错误。奇怪的是,前面已经通过代码将终端修改为TkAgg,但报错中仍提示现在在使用的是Agg终端。
在每个import程序后加入一行代码
print(matplotlib.get_backend())
查看此时使用的终端类型,可以观察到,在
from utils import visualization_utils as vis_util
这行语句后,终端类型被修改回Agg。进入visualization_utils.py,从中按Ctrl F查找‘Agg’,可以看到第26行的语句
import matplotlib; matplotlib.use('Agg')
声明了使用的终端类型,程序运行到这里时,前面自定义的终端被替换,因此报同样的错。将这一行的Agg替换为TkAgg(或者其他的终端,如Qt5Agg)即可解决,程序成功画图。