Сообщение "Matplotlib в настоящее время использует agg" и Matplotlib не отображает изображение - PullRequest
0 голосов
/ 08 февраля 2019

У других людей есть эта проблема, я использовал их решения, но не решил.

Я использую virtual env with python3.5.Matplotlib устанавливается под virtual env.У меня установлен python3.tkinter в системе.

Когда я проверяю

matplotlib.get_backend()

У меня

>>> import matplotlib
>>> matplotlib.get_backend()
'TkAgg'

Но когда я запускаю код ниже

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)
  # Actual detection.
  output_dict = run_inference_for_single_image(image_np, detection_graph)
  # Visualization of the results of a detection.
  vis_util.visualize_boxes_and_labels_on_image_array(
      image_np,
      output_dict['detection_boxes'],
      output_dict['detection_classes'],
      output_dict['detection_scores'],
      category_index,
      instance_masks=output_dict.get('detection_masks'),
      use_normalized_coordinates=True,
      line_thickness=8)
  #plt.figure(figsize=IMAGE_SIZE)
  plt.imshow(image_np)
  plt.show()

У меня проблема как

 UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
  % get_backend())

Я поставил в заголовке как

from io import StringIO
import matplotlib
matplotlib.rcParams["backend"] = "TkAgg"
from matplotlib import pyplot as plt
from PIL import Image

некоторые люди сказали, что она решена, но у меня все еще та же проблема, и plt нене отображать изображение.

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

в моем случае, я решил это, заменив функцию pyplot функцией PIL Image:

(я думаю, что функция не работает для некоторого формата изображения)

import matplotlib
matplotlib.use('GTK3Agg')
import matplotlib.pyplot as plt

from PIL import Image


# plt.imshow(image_np)
# plt.show()
img = Image.fromarray(image_np, 'RGB')
img.show()
0 голосов
/ 19 июня 2019

Как и , как вы отметили , бэкэндам Matplotlib иногда требуются дополнительные шаги для запуска в виртуальных средах .

При этом упомянутая выше документация также указывает, что TkAgg долженбыть доступным:

[...] Tk Framework (TkAgg backend) не требует каких-либо внешних зависимостей и обычно всегда доступен.

Я использую Ubuntu, иЯ предполагал, что TkAgg будет полагаться на PyGObject.У этой опции есть примечание, которое ссылается на инструкции по сборке.

Следуя инструкциям по сборке PyGObject , я установил системные зависимости :

sudo apt-get install -y python3-venv python3-wheel python3-dev
sudo apt-get install -y libgirepository1.0-dev build-essential \
  libbz2-dev libreadline-dev libssl-dev zlib1g-dev libsqlite3-dev wget \
  curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libcairo2-dev

Затем добавил следующие зависимости Python в виртуальную среду моего проекта:

  • pycairo
  • pygobject
# inside my project's virtual environment
pip install pycairo
pip install pygobject

После этого мой проект, как обычно, отображает ожидаемый график.

Примечания

  • Я использую Ubuntu 18.04.2 и Python 3.6.8 в виртуальной средемоего проекта.

  • Я пропустил большинство инструкций по сборке PyGObject и сделал только то, что описал выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...