grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


2019年6月8日土曜日

Matplotlib Animation embed on web page:アニメーションのWebページ上への埋め込み

これまでMatplotlibでつくったアニメーションはGIF動画としてWebページ上にアップロードしていましたが、Jupyter Notebook上で表示されるボタン操作付きのアニメーションとして表示できる方法がわかったのでメモ(いまさら)。





この動画はJupyter Notebook上でも表示可能で、再生速度調整、反転再生など可能で便利です。Matplotlibで制作したアニメーションをto_jshtml()でJavaScriptに変換して、それをhtmlファイルとして外部保存して、このページにJavascriptとして埋め込んでいます。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from IPython.display import HTML

x = np.linspace(-2,2,50)
y = np.sin(x)

fig = plt.figure(figsize=(6, 6))
plt.axis([-2,2,-2,2], 'equal')

ims = []
for i in range(len(x)):
    ln = plt.plot(x,y, color='#377eb8', linestyle='--')
    dot = plt.plot(x[i], y[i], color='red', marker='o')
    ims.append(ln + dot)

ani = animation.ArtistAnimation(fig,ims,interval=50)
#ani.save("ani.gif", writer = "imagemagick") # save as GIF Animation
plt.close()

# save as JavaScript/Html file
f = open("ani.html", "w")
f.write(ani.to_jshtml())
f.close()

#HTML(ani.to_html5_video())
HTML(ani.to_jshtml())

方法:(Python 3.6、Jupyter Notebook使用
・アニメーション(変数:ani)をつくったら、ani.to_jshtml()でJavascriptに変換。
・f=open(), f.write()でJavaScript/htmlファイルとして外部保存。
・外部保存したani.htmlファイルをエディタで開きJavaScriptをWebページにコピペ。

制作された動画は「base64」というデータ形式に変換されているようです。画像などをbase64に変換してそのままHTML内に埋め込むことができるようですが、このbase64データというのは以下のような記号の羅列で、この動画のデータだと約10000行もありかなり膨大です。

frames[0] = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbAAAAGwCAYAAADITjAqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\
AAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0\
dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deVxVZeI/8M8VRMUV10BMM1wQRFIu\
4FqNIm5hLplmo40lo9m3PYdvTfOzma8TbaM11BjTZpvM5EySJigqWq6IimmUkWGyCZiau8Dl/v54\

ページをスクロールしてもなかなか下へ辿りつけないので、この点だけ注意。上の場合はpng画像50枚分が埋め込んでいるのでアップロードするときもやや時間がかかります。
あと、コード内のコメント欄などに日本語が含まれているとエンコード/デコードでエラーがでるかもしれません。

人気の投稿