Flask/Kerasで機械学習アプリケーションを作る – 前編

Python
Nishipy
仕事ではインフラ周りのことしかしないので、お盆休みを利用し、FlaskとKerasで簡単なAIアプリケーションを作ってみます。前編では、作ったアプリケーションをローカルPCで動かしてみます。

概要

作ったFlaskアプリケーションの概要は以下の通りです。とても簡単な処理です。
1. 画像をアップロード
2. 画像がオバマなのかスモーリングなのか判定
3. 判定した結果を返す

動作する環境

Pythonは、3.7.2を使いました。そのほかに使ったパッケージとバージョンは以下の通りです。精査していないので、必要十分ではないと思います。

実装手順

今回のアプリケーションを作ってみたときの過程を振り返りたいと思います。



予測モデルの構築

オバマとスモーリングが似ていると話題だったことがあり、機械学習で判別するモデルを、Kerasで作ったことがありました。経緯や実装したコードは、以下を参照ください。

機械学習でオバマとスモーリングを判別したい-前編-
Nishipyある界隈で似ていると評判のオバマとスモーリングを、機械学習を使って判別します。前編では、訓練データを用意していきます。1. はじめに1.1. 背景遡ること2014年、ブラジルでサッカーW杯が開催されていま...(続く)
機械学習でオバマとスモーリングを判別したい-後編-
Nishipyある界隈で似ていると評判のオバマとスモーリングを、機械学習を使って判別します。後編では、前編で用意した画像を用いて、CNNを学習していきます。1. はじめに1.1. 背景詳しくは、前編の記事をご覧ください...(続く)

今回は、そのときに構築したCNNの学習済みモデルを保存し、利用します。拡張子は、.h5です

Keras documentation: Page not found
Keras documentation

主な処理の実装

メインの処理は、以下のpredict.pyに記載しています。

CNNの学習済みモデルは、predict.pyと同じディレクトリに保存しておき、読み込みます。

読み込んだ学習済みモデルを活用して、アップロードされた画像がオバマなのかスモーリングなのか判定します。
もっとスマートな方法もありそうですが、今回は以下のようにしました。

画面表示

デザインにこだわりはないので、簡単なHTMLとCSSで実装しています。Bootstrapなどでもう少しオシャレにしたいですが、一旦保留します。
Flaskなので、Jinja2の形式も使いました。例えば、以下のような感じです。

  • これが、base.html

  • これが、predict.html

実装結果

環境変数のFLASK_APPpredict.pyのパスを指定して、flask runコマンドを打てば、localhost上でアプリケーションが起動します。
実際の動作はこんな感じです。しょぼいですが、一応できました。

参考にしたサイト

以下の情報を参考にしながら、製作しました。そもそもこのようなアプリケーションを作ろうと思ったのは、upuraさんのブログを拝見したからです。

コード自体は、Flaskチュートリアルがとても参考になりました。今回実装したコードの大半が、Flaskチュートリアルから引用しています。
私の場合は予測モデルをすでに構築済みでしたが、未構築の場合はUdemyの講座もおすすめです。



さいごに

今回は普段手を出さないレイヤーの勉強がてら、Flaskアプリケーションを作ってみました。
今回実装したコードは、GitHubにあげました。

GitHub - nishipy/obama_smalling_flask: Flask app for Obama or Smalling prediction
Flask app for Obama or Smalling prediction. Contribute to nishipy/obama_smalling_flask development by creating an account on GitHub.

GCPの無料枠が余っているので、後編ではこのアプリケーションをにホストしてみる予定です。

以上.

コメント