当使用带有对象检测API的matplotlib时,该图没有显示出来,但是在导入某些测试方法之前,它可以正常工作。
我正在使用Anaconda虚拟环境,python 3.6和google对象检测API。
import matplotlib.pyplot as plt
import tensorflow as tf
from matplotlib import patches
from object_detection.anchor_generators.multiple_grid_anchor_generator import create_ssd_anchors
from object_detection.models.ssd_mobilenet_v2_feature_extractor_test import SsdMobilenetV2FeatureExtractorTest
from object_detection.models.ssd_mobilenet_v2_feature_extractor_test import SsdMobilenetV2FeatureExtractorTest
更改发生在最后一行
from object_detection.models.ssd_mobilenet_v2_feature_extractor_test import SsdMobilenetV2FeatureExtractorTest"
之前,我可以显示该图,例如plt.subplot(2,2),然后弹出图,并显示以下内容:
(<Figure size 640x480 with 4 Axes>,
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f4615eb8ba8>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f4614d320f0>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x7f4614ce36a0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f4614c92c50>]],
dtype=object))
WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.
For more information, please see:
* https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md
* https://github.com/tensorflow/addons
如果您依赖此处未列出的功能,请提出问题。
和“ plt.get_backend()”显示“ Qt5Agg”。 但在最后一行之后,该图没有弹出,尽管我确实从“ plt.subplots(2,2)”中得到了结果:
(<Figure size 640x480 with 4 Axes>,
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f460b8a5f60>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f460b86b5c0>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x7f460a7b2fd0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f460a7cb630>]],
dtype=object))
现在,当我键入“ plt.get_backend()”时,它显示的是“ Agg”,而不是先前的“ Qt5Agg”。和“ plt.show()”会引发错误:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
#!/usr/bin/env python2
我使用的口译员是
~/anaconda3/envs/py36/bin/python
这里的环境有变化吗?
最后一行的脚本可以找到here
非常感谢您的时间!
答案 0 :(得分:0)
已解决。在〜/ models / research / object_detecion / utils / visualization_utils.py中找到了这一行:
import matplotlib; matplotlib.use('Agg') # pylint: disable=multiple-statements
只需评论一下即可正常工作。
答案 1 :(得分:0)
解决了。我在虚拟环境上本地运行并尝试了几种建议的解决方案,但没有成功。
我尝试了上面Yunfei Fang 的建议,但后来意识到,仅注释掉 ~/models/research/object_detecion/utils/visualization_utils.py 文件夹中的代码行 import matplotlib; matplotlib.use('Agg')
是不够的。
我通过将这段代码放在我的脚本正文中发现:print('matplotlib backend= ',matplotlib.get_backend())
因为这仍然返回“agg”所以我不得不在脚本的导入部分的末尾添加这个 matplotlib.use('MacOSX')
。
我在装有 macOS Big Sur 的 MacBook Pro 上运行