Я пытаюсь отображать анимацию в 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.
Есть предложения?