【Python,matplotlib】動くグラフをAnimationGifに保存する方法

matplotlibで動くグラフを書いて、AnimationGifに保存するにはImageMagickという画像のソフトをmatplotlibから呼び出すように設定すれば、こんな風な動くグラフが作成できます。

 

まずはImageMagickの入手から。

ImageMagickは下記ページより、ダウンロードします。

http://www.imagemagick.org/script/download.php

 

Windows版のファイルは下の方にあるので、downloadをクリックしてファイル(ImageMagick-7.0.6-0-Q16-x64-dll.exe)を入手します。

 

ImageMagickのインストールはダウンロードしたファイルを実行し、基本デフォルトのままのインストールで大丈夫だと思います。

 

ImageMagickのインストールが出来たら、matplotlibの設定を行います。

 

まず、matplotlibのmatplotlibrcというファイルがある場所を確認します。

場所はPythonのプログラムで

 

import matplotlib
print(matplotlib.matplotlib_fname())

 

と入力し実行すると、matplotlibrcのファイルのパスが表示されるので、matplotlibrcファイルをメモ帳などのテキストエディタで開きます。

 

私の場合のパスは

C:\Program Files\Anaconda3\Lib\site-packages\matplotlib\mpl-data\matplotlibrc

でした。

 

このmatplotlibrcファイルの一番下の方に

 

#animation.convert_path: ‘convert’ #・・・・・・

と書いてある部分があるので、これを編集してもいいのですが、私は↓のようにImageMagickの実行ファイル(magick.exe)のパスを追記しました。

 

この状態で、このようなコード↓を書くと、最初に示したアニメーションGifのファイルが生成されます。

 

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()
x = np.arange(-np.pi, np.pi, 0.1)

ims = []
for a in range(40):
    y = np.sin(x - a / 20 *  np.pi)
    # sinカーブ
    im1, = plt.plot(x, y, "b")
    # 点
    im2, = plt.plot(-np.pi, np.sin(-np.pi - a / 20 *  np.pi), marker='o', color='b' )

    ims.append([im1, im2])

ani = animation.ArtistAnimation(fig, ims, interval=33)
ani.save('sample.gif', writer='imagemagick')

 

Sinカーブだけのサンプルは探せばいっぱいあるのですが、線上に点を打つだけでも、訳わかんなかった~(まだ、分かってないですけど。。)

シグモイド関数の微分の計算方法

シグモイド関数を微分するには合成関数の微分を用いて行います。

 

まず、シグモイド関数

$$f(x)=\frac { 1 }{ 1+{ e }^{ -x } } $$

において

$$u=g(x)=1+{ e }^{ -x }$$

と置くと、

$$y=f(u)=\frac { 1 }{ u } ={ u }^{ -1 }$$

より、合成関数の微分を使って

$$f'(x)=\frac { dy }{ dx } =\frac { dy }{ du } \frac { du }{ dx } \\ =-{ u }^{ -2 }(-{ e }^{ -x })\\ =\frac { { e }^{ -x } }{ { u }^{ 2 } } \\ =\frac { { e }^{ -x } }{ (1+{ e }^{ -x }) ^{ 2 }}$$

となりますが、この先がちょとトリッキーな式の変形を行い、

$$=\frac { { e }^{ -x } }{ 1+{ e }^{ -x } } \frac { 1 }{ 1+{ e }^{ -x } } \\ =(\frac { { 1+e }^{ -x } }{ 1+{ e }^{ -x } } -\frac { 1 }{ 1+{ e }^{ -x } } )\frac { 1 }{ 1+{ e }^{ -x } } \\ =(1-\frac { 1 }{ 1+{ e }^{ -x } } )\frac { 1 }{ 1+{ e }^{ -x } }$$

となります。

ここで

$$f(x)=\frac { 1 }{ 1+{ e }^{ -x } } $$

であるから、

$$f’(x)=(1-f(x))f(x)$$

となるのが、シグモイド関数の微分となります。

 

例によってPythonのmatplotlibを使ってグラフを書いてみると、

import matplotlib.pyplot as plt
import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10)

#シグモイド関数
y = sigmoid(x)
plt.plot(x, y)

#シグモイド関数の微分
dy = (1 - sigmoid(x)) * sigmoid(x)
plt.plot(x, dy)

plt.show()

 

途中の計算は、自分一人では解けないな。。きっと。

シグモイド関数

ニューラルネットワークに出てくる、活性化関数の一つであるシグモイド関数

$$h(x)=\frac { 1 }{ 1+{ e }^{ -x } }$$

 

この関数の特徴は x = 0, y = 0.5 の点を通り、yの値は0~1の範囲に制限され、xが小さくなるとyは0に漸近し、xが大きくなると1に漸近します。

 

これをPythonのmatplotlibを使ってグラフを書いてみると、こんな感じ

import matplotlib.pyplot as plt
import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10)
y = sigmoid(x)

plt.plot(x, y)
plt.show() 

 

シグモイド関数を初めて見たのは画像処理でエッジ検出に使う例だったのですが、

「シグモイド関数 エッジ」

と検索したら、トップに出てくるページの記事は、知っている人のだった。

https://www.fast-corp.co.jp/upload/thesis/0013/2.pdf

合成関数の微分

Deep Learningをお勉強していたら、合成関数の微分が出てきたのですが、もう30年ぶりぐらいに見たので、その復習です。

\(y=f(u), u=g(x)\)としたとき、\(y=f(g(x))\)を合成関数とよび、この合成関数を\(x\)に関して微分すると、

 

$$\frac{ dy }{ dx } =\frac { dy }{ du } \frac { du }{ dx } \\ \quad =\frac { d }{ du } f(u)\frac { d }{ dx } g(x)$$

 

となります。

合成関数を教わったときは、合成関数の微分は「外側の微分x内側の微分」って覚えてたような。。

 

試しに\(y=sin({ x }^{ 2 })\)の微分は\(u={ x }^{ 2 }\)と置くと

 

$$\frac { dy }{ dx } =\frac { d }{ du } f(u)\frac { d }{ dx } g(x)\\ \quad =cos(u)\times 2x\\ \quad =cos({ x }^{ 2 })\times 2x$$

 

これをPythonのmatplotlibを使ってグラフにしてみると

 

となり、青の線の微分(傾き)がオレンジ色の線なので、合ってそう。

WordPressで数式エディタ風に数式を入力したい

WordPressで数式を入力するには、これまでWordやExcelで数式エディタを使って画像を切り貼りしていたのですが、そこそこ面倒なのと、メンテも大変なので、WordPressで数式が使えるプラグインを探してみたら MathJax-LaTexというのがおススメという記事が多い。

 

使い方はWordPressのプラグインからMathJax-LaTexを検索して追加し、下記のコード
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML"></script>

を追加します。私はコード部分はフッタにTextのウィジットを追加して記載しました。

記事中では、LaTexを \(    \) で挟めばいいらしい。

 

例えばxの2乗は

\({ x }^{ 2 }\)

と書いて

\({ x }^{ 2 }\)

 

しかし私はLaTexも分かっていないので、Wordの数式エディタ風にLaTexを吐き出してくれるソフトとかがないか?と思ったら、Web上でLaTexを吐き出してくれるサイトがあったので、これでなんとかなりそう。

 

HostMath

http://www.hostmath.com/

 

 

ただ、シグモイド関数を書きたかっただけですが。

$$\frac { 1 }{ 1+{ e }^{ -x } } $$

 

やっと書けた!

PythonをVisual Studioでインストールする方法

PythonはこれまでAnacondaをインストールしてJupyter NotebookからPythonのプログラムを書いていたのですが、今までプログラムといえばIDEはVisual Studioを使っていた身としては、お手軽にステップ実行ができるJupyter Notebookは良いといえばいいのですが、インテリセンスが使えないのは、ものすごくつらい。。

 

ということで、Visual StudioからPythonを使えるように、Visual StudioへPythonをインストールしました。

 

まず、私の環境は

●Windows10(64bit)

●Visual Studio Community 2017

です。

 

Visual Studio 2017では、後から簡単にPythonなどのオプションを追加できるようになっているので、Visual Studio 2017をインストールした後からのPythonのインストール方法です。

 

まずは、スタートメニューからVisual Studio Installerを起動します。

 

Visual Studio Installerが起動したら、Visual Studio Community 2017 の変更をクリックします。

 

Python開発の右上のチェックを入れ、オプションを選択します。

実際にどれが必要か?詳しくはわかっていないのですが、とりあえずはこの↓設定にしました。

 

オプションのチェックを入れたら、変更をクリックします。

すると、Pythonのインストールが始まります。

 

これで、インストールは完了なので、実際にPythonを起動してみます。

ファイルメニューのファイル→新規作成→プロジェクトと選択し

 

テンプレートの中からPythonを選択し、Pythonアプリケーションを選択し、名前、場所、ソリューション名は適当に指定して、OKボタンをクリックします。

 

すると、こんな画面が開きます。

 

Python環境のウィンドウが表示されていない場合は、Visual Studioのメニューより、表示→その他ウィンドウ→Python環境と選択し、Python環境のウィンドウを表示してください。

このウィンドウはnumpyやpillowなどの各種モジュールをPythonのバージョンごとに管理するウィンドウで、モジュールインストールなどを簡単に行う事が可能になります。ただし、Visual Studio2017以降がおすすめです。

次に、使用するPythonの環境(バージョン)を選択し、概要の部分をクリックし、パッケージ(PyPI)を選択します。

すると、Python環境ごとにインストールされているモジュール一覧が表示されます。

もし、必要なモジュールが表示されていない(インストールされていない)場合は、PyPIとインストールされたパッケージの検索の部分にモジュールの名前を入力すると、XXXのインストールと表示されているので、その部分をクリックするだけで、モジュールがインストールされます。

これでVisual StudioでPython開発環境の構築は完了です。

試しにimportするのにimとキー入力してみると、インテリセンスもちゃんと表示してくれます。

 

さらにこんなコード↓では

 

C#とかと同じようにブレークポイントを置いて、ステップ実行をしてみると、ウォッチの機能もちゃんと動いてくれます。

 

従来のコマンドラインのPythonの入力も対話型ウィンドウを開くの部分をクリックすると

 

このような画面がVisual Studioの下の方にウィンドウが表示されるので、この部分にコードを入力してPythonを実行することもできます。

 

ちなみに、今回はVisual StudioからAnacondaをインストールしたので、スタートメニューからJupyter Notebookの利用も可能です。

 

やっぱりプログラムを組むのには、インテリセンスやステップ実行、ウォッチの機能は欲しいので、しばらくはVisual StudioからPythonをいじろうと思っています。

【Python】OpenCVをAnacondaでインストール(Windows編)

PythonでOpenCVのインストール方法を検索すると、macOSやLinuxの情報が多く、Windowsのインストール方法が何だか少ない。。

まだ、よく分かっていないのですが、とりあえずAnacondaを使ってOpenCVのインストールができたので、その方法を記しておきます。

 

前提条件として、私のPCの環境は

●Windows10(64bit)

●Anacondaがインストールされている

です。

 

まず、公式のOpenCVのページ

http://docs.opencv.org/3.2.0/d5/de5/tutorial_py_setup_in_windows.html

 

で確認すると、動作環境は

●Python2.7.X

●Numpy

●Matplotlib

という事らしい。

さらにNumpyが公式には64bit対応されていないので、32bit用のOpenCVを使ってます的なことが書いてある。

 

以上のことから、AnacondaでPythonをインストールするときはPython3.6用のパッケージでインストールしてしまったので、Python2.7用の環境を作ります。

 

Python2.7の環境構築方法は、下記ページにまとめました。

https://imagingsolution.net/program/python/anaconda/python-multi-version-environment/

 

次にAnaconda CloudというページからOpenCVのパッケージを探します。

 

https://anaconda.org/

 

このページの検索窓からOpenCVを検索します。

すると様々なOpenCVのパッケージが表示されるのですが、Platformsにwin-64が書いてある、一番上の menpo/opencv3 の部分をクリックします。

 

 

すると、インストールコマンドも書いてあるので、これでいけるのかな?と思ったら、そうも行かないので、まず、Filesの部分をクリックします。

 

 

すると、各種OS用なパッケージが表示されますが、このままだと見づらいので、Nameの部分をクリックします。

 

 

Windows用のファイルは6つ表示されていますが、Uploadedの部分にmenpoと書いてあるファイル

 

win-32/opencv3-3.1.0-py27_0.tar.bz2

 

と書いてあるファイルが使えるっぽい

 

 

ファイル名から察するに

Windowsの32bit、OpenCV Ver3.1.0、Python2.7用のファイル

 

ということがわかります。

そこで、今度はAnaconda Navigatorを起動し、Python2.7用の環境から Open Terminalをクリックします。

 

 

ターミナルを起動したらAnaconda Cloudのページに書いてあった、インストールコマンドのバージョンの部分を少し変えて

 

conda install -c menpo opencv3=3.1.0

 

と入力します。

 

 

すると

Proceed([y]/n)?

 

と聞かれるので y  を入力して、この様な画面になれば、インストール成功です。

(最後、少し止まってますが、我慢。。)

 

 

本当にOpenCVがインストールされてのか?を確認するため、Python2.7からJupyter Notebookを起動し、

 

 

OpenCVのバージョン確認用のコード↓

import cv2
print cv2.__version__

 

を入力し、実行して

 

バージョンが表示されればインストール成功です。

 

本当は64bit用のOpenCV3.2でPython3.X系でインストールしたいところなのですが、まだ、力量不足。。。

ただ、Anacondaでインストールするこの方法は、簡単なので、とりあえずPythonでOpenCVを試してみたい!という人向けにはいいかも?しれません。(私がその状態)

【Python】Anacondaで複数バージョンの環境切り替え

Pythonは様々なライブラリを使うことができますが、Pythonのバージョン依存も多いという事なので、複数バージョンのPythonを構築したくなります。

 

そこで、Anacondaを使うと比較的簡単に複数バージョンのPython環境が構築できます。

 

まず、スタートメニューからAnaconda Navigatorを起動します。

 

Anaconda Navigatorが起動したらEnvironmentsを選択します。

 

 

次にやや左側下のCreateをクリックし、Python横の V マークをクリックして、インストールするPythonのバージョンを選択します。

(今回は2.7を選択しました)

 

 

この環境に名前を付けるのですが、Nameの部分には小数点が入れられないようなので、私はPython27とし、Createボタンをクリックします。

 

 

すると、Python2.7のインストールが開始します。

 

 

インストールが完了すると、Python27というバーが出現するので、ここの▶マークをクリックして、Jupyter Notebookを起動したいところなのですが、グレーアウトしていて選択できません。

 

 

こちら↓はroot(Python3.6)の画面

 

Jupyter Notebookも使いたいので、やや右上のプルダウンメニュ―からNot installedを選択します。

 

 

すると、インストールされていないモジュールの一覧が表示され、スクロールバーを下げていくと、Jupyter Notebookを使うのに必要そうな一覧が表示されています。

 

 

実際にどれが必要になるのか?私はあまりわかっていないのですが、とりあえず、それっぽいファイルの4つ

 

jupyter

jupyter_client

jupyter_console

jupyter_core

 

の右側にあるチェックボックスにチェックを入れ、Applyボタンをクリックします。

すると、インストールされたものの一覧が表示されるので、Applyボタンをクリックします。

 

 

これで、最初、Python27横の▶マークをクリックしても有効でなかったJupyter Notebookが使えるようになるので、クリックしてみます。

 

 

するとJupyter Notebookが起動し、試しに新しいプロジェクトを作成するのにNewボタンをクリックしてみると、Python2と表示されていることが確認できます。

 

 

これで、バージョン依存のあるライブラリを使用するのに、Pythonのバージョンを切り替えながらプロジェクトを作成することが可能となります。

画像センシング展2017に出展します。

2017.6.7~9でパシフィコ横浜で開催される画像センシング展に出展します。

ブース番号は36です。

詳しいブースの場所は下記の地図でご確認下さい。

http://www.adcom-media.co.jp/wp-content/themes/adcom/pdf/iss/map.pdf

 

もう、何回も展示会には出展していますが、今回も私の担当はカラーの画像と三次元情報が同時に撮影できる(今風に言うとRGBD)、光切断のデモです。

 

今回のデモではカメラに綺麗で評判のソニーのCMOSセンサ(Pregius)を用いたカメラで撮影しています。それもあって、やっぱり絵が綺麗!

デモの狙いは、平たい貝の画像の上にリアルな立体の貝を載せて、2Dだけでは判断できない凹凸も取得できる!というところです。

 

ご都合が合えば、ぜひお立ち寄り下さい。

【Office365】Web版Outlookのフォントサイズ変更

普段、メールを使うときは、デスクトップ版のOutlookを使っているのですが、外出中の時とかはWeb版のOutlookを使うこともあります。

しかし、Web版のOutlookを使うと、フォントサイズが大きく、どうにも気になっていたのですが、そのフォントサイズを変更する方法です。

Web版のOutlookを開き、右側に表示されている歯車マークをクリックします。
(表示されていないときは、ウィンドウサイズを広げてください。)

設定画面の一番下に表示されている Outlookのすべての設定を表示 をクリックします。

表示された設定画面の左から、メール→作成と通信を選択し、右側の設定画面をスクロールし、メッセージ形式内のフォントのサイズを希望の大きさに変更します。

設定を変更すると、保存/破棄のボタンが表示されるので、保存ボタンをクリックします。

これで、新しいメッセージをクリックして、メッセージ作成時のデフォルトのフォントサイズが変更されます。

【Anaconda】モジュールのアップデートでエラー発生

Anacondaに含まれる全てのモジュール(パッケージ)のバージョンを更新するには、コマンドプロンプトから

 

conda update --all

 

と入力します。(allの前はハイフン(-)が2つです。)

 

 

すると、Proceed([y]/n)?と聞かれるので y を入力してEnter

 

 

しかし、こんなエラー↓が表示されて進まない。。。


CondaIOError: IO error: Missing write permissions in: C:\Program Files\Anaconda3
#
# You don’t appear to have the necessary permissions to update packages
# into the install area ‘C:\Program Files\Anaconda3’.
# However you can clone this environment into your home directory and
# then make changes to it.
# This may be done using the command:
#
# $ conda create -n my_root –clone=C:\Program Files\Anaconda3


 

エラーを見る限り「Missing write permissions」と書かれているので、”C:\Program Files\Anaconda3″のフォルダに書き込み権限がなくて怒られているらしい。

 

ということで、管理者権限で実行すればよいのですが、その方法はスタート→Windowsシステムツール→コマンドプロンプトと選択し、そのまま実行するのではなく、コマンドプロンプトを右ボタンクリックし、その他→管理者として実行と行い、コマンドプロンプトを管理者権限で実行します。

 

 

再度、コマンドプロンプトより

conda update --all

と入力し、Proceed([y]/n)?と聞かれるので y を入力してEnterと入力すると、今度はその先へ進み、このような画面↓になれば、成功のようです。

 

【Anaconda】コマンドリストの表示

AnacondaをインストールするとJupyter Notebookとかの方に目が行くので、Anacondaそのものはどうでもよく感じるのですが、Anacondaそのものにも機能があり、そのコマンドの一覧を表示する方法です。

 

まず、Windows10の場合は、スタート→Windowsシステムツール→コマンドプロンプトの順でコマンドプロンプトを表示します。

 

コマンドプロンプトが表示されたら conda と入力します。

 

 

すると、Anacondaで使えるコマンド一覧が表示されます。

 

 

例えば、Anacondaに含まれているモジュールの一覧を表示させるには

conda list

と入力します。

 

 

するとモジュールの一覧が表示されます。