Flaskで画像判定アプリ作成入門(1)〜Hello world!の表示

Flaskをローカル環境で試す場合、直接インストールするよりも仮想環境を構築してその中で試す方がバージョンなどの問題を防ぐことができます。
まずは仮想環境作りから行います。

virtualenv環境作成

Pythonの仮想環境を作るには、様々な方法があります。
Anacondaを使ったconda、サードパーティ製のvirtualenv、pythonに標準搭載された仮想環境のプログラムvenvなどがあります。
今回の仮想環境にvirtualenvを使います。virtualenvはpipでのインストールが必要ですが、環境構築が比較的簡単なメリットがあります。

virtualenvが既にインストールされているか確認するには次のコマンドを使います。

virtualenv --version

virtualenvのインストール

バージョン確認してまだインストールされてなければ次の手順でインストールします。
既にインストールしていたら、次の「今回の作成アプリの環境設定」に進みます。

virtualenvのインストールする pipコマンドを使います。

sudo pip install virtualenv

今回作成アプリの環境設定

今回の解説ではとりあえず「Hello World!」を表示して終わりですが、
この環境を活用して、そのまま画像判定アプリを作成します。
画像の判定にはvgg16を活用しますので、ここでの環境名をflask_vggとします。

flask_vggという環境を作るには、以下のコマンドを実行します。

virtualenv flask_vgg

作成した環境 flask_vgg に入るには cd コマンドで移動した後にアクティベートします。

cd flask_vgg

アクティベートのコマンドは環境に応じて変わります。自分の仮想環境をよく確認しておきましょう。
アクティベートするには、activate コマンドで行えます。
ただし、MACの場合は、source activateとする必要があります。
また、次のようにコマンドを入力する必要がある場合もあります。

source bin/activate

つまり、`virtualenv`で作成したフォルダ内にbinフォルダが作成されます。binフォルダ内にactivateファイルがあるのでそれを実行すれば良いのです。必要に応じてパスをつけてコマンドを入力します。

現在の仮想環境から通常の環境に戻るコマンドは次のようになります。
こちらはシンプルにこれで動きます。

deactivate

アプリケーションの初期設定

Flaskのインストールはpipコマンドで実施します。

pip install Flask

Flaskバージョン確認

Flaskのバージョン確認は次のようにPythonのインタラクティブモードから確認します。

$ python
>> import flask
>> flask.__version__

表示
‘1.1.1’

のようにバージョンが確認できます。

今回のFlaskバージョンは 1.1.1 での例です。

画像推定のためにtensorflowの導入

画像を推定するアプリケーションを作成するには学習したモデルから推測を行うためにtesorflowやkerasなどの導入が必要です。

tensorflowインストール

tensorflowはpipコマンドでインストールします。

pip install tensorflow

kerasインストール

kerasもpipコマンドでインストールします。

import keras

pillowインストール

画像表示などで必要なpillowもpipでインストールします。

pip install pillow

matplotlibインストール

画像表示やグラフ作成のためのmatplotlibもpipでインストールします。

pip install matplotlib

Flaskドキュメントは一度確認しておくと良いです。

Flask1.1系のドキュメントはこちら

Hello Woeld表示のためのプログラム作成

簡単にHello World!を表示するには次のようにFlask用のプログラムを用意します。

ファイル名は hello.py としてflask_vggフォルダに保存します。

hello.pyでは、Flaskクラスを 「app = Flask(__name__)」 でインスタンス化しています。
インスタンス化したappにはFlaskクラスが持つroute()メソッドがあります。
ところで、引数の`__name__` というのは、自動的に定義される変数で、現在のファイルのモジュール名が入ります。
つまりここでは「app= Flask(‘hello’)」と同じということになります。
また、ファイルをスクリプトとして直接実行した場合、 `__name__` は `__main__` になります。

このメソッドの引数にパスを指定することで各ページの指定ができます。
また、この処理にデコレート機能を使って関数を定義すると、指定したアドレスでの振る舞いを定義できます。

また、route()メソッドのキーワード引数として methods に値を指定することで、GETとPOSTのHTTPメソッドを指定できます。
methods を指定しない場合、GETリクエストのみルーティングされます。

hello.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'


<h3>サーバー起動</h3>
これでサーバーを起動してhello.pyの内容を表示することができます。

まずはexportを行います。


export FLASK_APP=hello.py

続いてサーバーを起動します。

flask run

「Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)」と表示されますので、このURLでブラウザを開きます。

サーバーを止めるには、表示に記述されている通り、CTRL+C です。