めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Google Cloud DatalabでGIF動画を作成する方法

何の話かというと

enakai00.hatenablog.com

こちらの記事の内容をGoogle Cloud Datalabで試してみたい方へのガイドです。

Cloud Datalabとは?

cloud.google.com

Google Cloud Datalabは、Jupyter Notebookをクラウド上で利用できるサービスです。gcpモジュールにより、NotebookからCloud StorageBigQueryなどのサービスを利用することができます。

※60日間有効な$300のクレジット(無償利用可能枠)が提供されるので、無償で利用を開始できます。

手順

はじめに、Notebook上で、ImageMagickをインストールしておきます。(Cloud Datalabは、DebianのVMイメージ上で動いているようですね。)

%bash
apt-get -y update
apt-get -y install imagemagick

※ここでセッションをリスタートしておいた方がよいかも知れません。

動画の作成・保存に必要なモジュールをインポートします。ここでは特に、作成したGIFファイルをCloud Storage経由で取り出すために、gcp.storageモジュールをインポートしています。backet_nameには、事前に作成しておいたバケット名を指定してください。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from gcp import storage

backet_name = 'your_backet_name'

次は、GIF動画を作成するサンプルです。ボールの放物運動をシミュレーションしています。

class Ball:
    def __init__(self, m, x, y, vx, vy):
        self.m = m
        self.x, self.y = x, y
        self.vx, self.vy = vx, vy

    def run(self, fx, fy):
        self.x += self.vx
        self.y += self.vy
        self.vx += fx / self.m
        self.vy += fy / self.m

fig = plt.figure(figsize=(4,3))
images = []
ball = Ball(1,0,0,1,100)
for _ in range(22):
    image = plt.scatter([ball.x],[ball.y])
    images.append([image])
    fx = 0
    fy = -ball.m * 9.8
    ball.run(fx,fy)

image_file = 'cannon_ball.gif'
ani = animation.ArtistAnimation(fig, images, interval=300, repeat_delay=1000)
ani.save(image_file, writer='imagemagick', fps=30);

with open (image_file,'rb') as f:
  bucket = storage.Bucket(backet_name)
  bucket.item(image_file).write_to(f.read(), 'image/gif')

ani.saveで作成したGIFファイルを最後にCloud Storageにアップロードしています。出来上がったファイルは、Cloud Storageのコンソール画面からダウンロードしてください。

完成品はこちらです。

f:id:enakai00:20160610074925g:plain