Отображение анимации в Google Colab - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь отображать анимацию в Google Colab. В частности, я хотел бы анимировать массив numpy с помощью cv2, например, рисовать линии на основе кадра и отображать результат в ячейке. Самое близкое, что я получил, было это, вы можете попробовать этот код в Colab:

from google.colab.patches import cv2_imshow
import IPython

from PIL import Image
import numpy as np
import cv2 as cv
import time

# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)

cv2_imshow(img)

for i in range(100):
    cv.line(img,(i,0),(511,511),(255,0,0),5)
    cv2_imshow(img)
    IPython.display.clear_output(wait=True)
    time.sleep(1/60.0)

В какой-то момент, конечно, это должно произойти без time.sleep, но с повторяющимися обратными вызовами, поэтому мы не блокируем любой другой код исполнение. Однако, как вы можете видеть, вывод мерцает и совсем не гладкий.

Вот несколько вещей, которые я пробовал:

  • ipycanvas. Это замечательно в локальном блокноте Jupyter, основанном на холсте HTML5. Немного раздражает возвращение данных изображения из javascript в python, но это возможно. Однако это не работает в Google Colab. https://ipycanvas.readthedocs.io/
  • Анимации Matplotlib. например, это (не мое): https://colab.research.google.com/drive/1lnl5UPFWVPrryaZZgEzd0theI6S94c3X#scrollTo = QLRBwgFqdr83 Это нормально. Однако он отображает всю анимацию перед ее отображением, что мне не нужно. В частности, я хочу иметь возможность добавить некоторую интерактивность в анимацию, которую исключает это ограничение (например, щелчок по изображению или какой-либо кнопке, чтобы что-то произошло в анимации). 1029 * холст в javascript, например, как предлагается здесь: I Python: Добавление сценариев Javascript в I Python notebook Однако я бы хотел, чтобы весь мой код был python, особенно мои данные должны быть numpy массивами или изображениями PIL.

Есть предложения?

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