3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

猿でもわかるAIプログラミングシリーズ 🐵💻 | [第8回]AIアプリを作って公開!Flask + AIの簡単実装

Posted at

1. はじめに: 「AIアプリ、作ってみたいけどどこから始めれば...?」

皆さん、こんな経験ありませんか?
「機械学習モデルは作れたけど、どうやって公開すればいいかわからない」
「Jupyter Notebookで動くデモを、どうすればサービスにできるのか...」

実は、Flaskを使えばたった数十行のコードでAIアプリを公開できます!
本記事では、Googleのクラウド環境で実際に運用されているノウハウをベースに、
AIモデルの実装からデプロイまでを完全ガイドします。

2. Flask + AI: 最強の軽量コンビネーション

Flaskとは?

Python製のマイクロWebフレームワークで、軽量・高速・柔軟が特徴。
AIアプリのプロトタイピングに最適です。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello AI World!"

if __name__ == '__main__':
    app.run()

リスト1: Flaskの最小構成 (たった5行!)

なぜFlaskがAIアプリに向いているのか?

  • ✅ 学習コストが低い
  • ✅ 依存関係が少ない
  • ✅ REST APIの作成が簡単
  • ✅ Google Cloud Runなどと相性が良い

Flask Architecture
図2: Flaskの基本アーキテクチャ

3. 実践! 画像分類AIアプリを作成

ステップ1: 基本アプリのセットアップ

from flask import Flask, request, jsonify
import tensorflow as tf
from PIL import Image
import numpy as np

app = Flask(__name__)
model = tf.keras.applications.MobileNetV2(weights="imagenet")

def preprocess_image(image):
    # 画像前処理ロジック
    image = image.resize((224, 224))
    image_array = np.array(image)
    image_array = tf.keras.applications.mobilenet_v2.preprocess_input(
        image_array[np.newaxis, ...])
    return image_array

リスト2: モデルロードと前処理関数

ステップ2: 推論APIの実装

@app.route('/predict', methods=['POST'])
def predict():
    if 'file' not in request.files:
        return jsonify({"error": "no file uploaded"}), 400
    
    file = request.files['file']
    image = Image.open(file.stream)
    processed_image = preprocess_image(image)
    
    predictions = model.predict(processed_image)
    results = tf.keras.applications.mobilenet_v2.decode_predictions(
        predictions.numpy())
    
    return jsonify({"predictions": results[0]})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

リスト3: 推論APIの完全実装

API Flow
図3: APIの処理フロー

4. プロが教える実践TIPS & よくある落とし穴

✅ TIP1: 本番環境での必須設定

# 本番用設定
app.config.update(
    MAX_CONTENT_LENGTH=16 * 1024 * 1024,  # 16MB制限
    JSONIFY_PRETTYPRINT_REGULAR=False  # 本番では無効化
)

✅ TIP2: モデルのウォームアップ

# サーバ起動時にモデルをウォームアップ
with app.app_context():
    dummy_input = np.zeros((1, 224, 224, 3))
    _ = model.predict(dummy_input)

❌ よくあるミス1: ブロッキング問題

Flaskはデフォルトでシングルスレッド。並列処理には以下を検討:

  • flask-executor
  • Gunicorn + Gevent
  • Kubernetesでの水平スケーリング

❌ よくあるミス2: メモリリーク

AIモデルはメモリを大量消費。対策:

@app.teardown_request
def teardown_request(exception=None):
    # リクエスト終了時にクリーンアップ
    keras.backend.clear_session()

5. 応用編: Google Cloud Runへのデプロイ

Dockerfile の例

FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 app:app

requirements.txt

flask==2.0.1
gunicorn==20.1.0
tensorflow-cpu==2.6.0
pillow==8.3.1

Deployment Flow
図4: Cloud Runへのデプロイフロー

6. 結論: Flaskで始めるAIアプリ開発の未来

メリット

  • ⚡ 超高速プロトタイピングが可能
  • ☁ クラウドネイティブとの親和性が高い
  • 🔄 AIモデルの差し替えが容易

デメリット

  • 📦 大規模アプリには不向き
  • 🔄 非同期処理に追加設定が必要

**「AIの民主化」**が進む今、Flaskは個人開発者から企業プロトタイプまで、
あらゆるレベルのAIアプリ開発を加速する最強のツールです。

さあ、あなたも今日からAIアプリ開発者への第一歩を踏み出しましょう!


#AI #Flask #機械学習
#AIアプリ開発 #クラウドネイティブ #Python #クラウドデプロイ


付録: さらに学びたい方へ

  1. Flask公式ドキュメント
  2. TensorFlow Servingとの連携
  3. Cloud Runのベストプラクティス

Next Steps
図5: 次の学習ステップ

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?