mei_13のPython講座 ロゴ

【解説】StreamlitとPyTorchで構築するAIアプリケーション開発入門




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

StreamlitとPyTorchで構築するAIアプリケーション開発入門


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。今日は「Streamlit」を使って、PyTorchで学習したモデルをWebアプリケーションとして動かす方法について解説していきますね。

Pythonで機械学習を学んでいると、コンソール画面だけで結果を確認するだけでは少し物足りなくなってくることがあるかもしれません。そんなとき、Streamlitを使えば、Webデザインの知識がなくても、わずかなコードで直感的なUIを作ることができるんです。


Hirokiのアイコン
【Hiroki】 Yukiさん、ありがとうございます!PyTorchでモデルを作っても、結局どうやって外部に見せればいいのか迷っていたところでした。Streamlitなら、Pythonだけで完結するんですか?


Yukiのアイコン
【Yuki】 はい、そうなんです。HTMLやCSSを書く必要は一切ありません。まずは、必要な環境を整えるところから始めましょう。PyTorchとStreamlit、そしてモデルを動かすために必要なパッケージをインストールします。

pip install torch torchvision streamlit

Streamlitの基本構造とPyTorchモデルの読み込み


Yukiのアイコン
【Yuki】 Streamlitの仕組みはとてもシンプルで、スクリプトの上から下へ順に実行されるだけです。まずは、PyTorchの学習済みモデルを読み込んで、推論を行う準備をします。

import streamlit as st
import torch
import torchvision.models as models

# モデルのロード(キャッシュ機能を使うと効率的です)
@st.cache_resource
def load_model():
    model = models.resnet18(pretrained=True)
    model.eval()
    return model

model = load_model()


Hirokiのアイコン
【Hiroki】 なるほど、@st.cache_resourceというデコレータを使うんですね。これがあるおかげで、毎回モデルを読み直さなくて済むということでしょうか?


Yukiのアイコン
【Yuki】 その通りです。機械学習モデルは読み込みに時間がかかることが多いので、このキャッシュ機能は必須と言ってもいいでしょう。次に、ユーザーが入力した画像を受け取って、それをモデルに入力する処理を作ってみますね。

ユーザーインターフェースと推論処理の実装


Yukiのアイコン
【Yuki】 Streamlitでは st.file_uploader を使うことで、簡単に画像アップロードボタンを作成できます。

from PIL import Image
import torchvision.transforms as transforms

st.title("画像分類アプリ")

uploaded_file = st.file_uploader("画像を選んでください...", type=["jpg", "png"])

if uploaded_file is not None:
    image = Image.open(uploaded_file)
    st.image(image, caption='アップロードされた画像', use_column_width=True)

    # 前処理
    preprocess = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
    ])
    input_tensor = preprocess(image).unsqueeze(0)

    # 推論
    with torch.no_grad():
        output = model(input_tensor)
        prediction = torch.argmax(output, dim=1)

    st.write(f"推論結果のクラス番号: {prediction.item()}")


Hirokiのアイコン
【Hiroki】 すごいですね!たったこれだけの記述で、画像をアップロードして結果を表示するツールができるなんて驚きです。Vimでコードを書いているときも、こうやってすぐに視覚的に結果が見えるとモチベーションが上がりそうです。

Gemini APIとの連携:最新のモデル活用


Yukiのアイコン
【Yuki】 もし、単なる画像分類ではなく、より高度な推論結果の説明をさせたいなら、最近はGoogleのgoogle-genaiライブラリを組み合わせるのも一般的ですよ。

例えば、推論結果をさらにGeminiに詳しく解説してもらうような構成です。

from google import genai
import os

# APIキーの設定
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])

def get_explanation(class_id):
    prompt = f"クラスID {class_id} が表す物体について、短く説明してください。"
    response = client.models.generate_content(
        model='gemini-2.0-flash',
        contents=prompt
    )
    return response.text


Hirokiのアイコン
【Hiroki】 gemini-2.0-flashを使うんですね。モデルの出力結果をそのまま表示するだけでなく、LLMで加工してあげると、アプリとしての完成度が一段と上がりそうです。


Yukiのアイコン
【Yuki】 ええ、その通りです。重要なのは、PyTorchのような「計算エンジン」と、Streamlitのような「対話インターフェース」、そしてGeminiのような「高度な推論エンジン」をどう繋ぎ合わせるか、という点ですね。

開発を効率化するヒント


Yukiのアイコン
【Yuki】 最後に、Streamlitアプリを起動するときは、ターミナルで streamlit run app.py と入力するだけです。自動的にブラウザが立ち上がりますよ。

Streamlit 公式ドキュメント には、他にもボタンの配置やグラフの描画など、詳細なカスタマイズ方法がたくさん載っています。ぜひ参考にしてみてください。


Hirokiのアイコン
【Hiroki】 ありがとうございます。Yukiさんのおかげで、自分の手元にあるモデルをWebアプリにする勇気が湧いてきました。まずは簡単な分類アプリから作ってみます!


Yukiのアイコン
【Yuki】 応援しています。わからないことがあったら、いつでも聞いてくださいね。一緒に頑張りましょう。



ライブラリ特集一覧に戻る

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki