(1時間4,000円の伴走型ビデオチャット指導も受付中!)
StreamlitとPyTorchで構築するAIアプリケーション開発入門
![]()
【Yuki】
Hirokiくん、こんにちは。今日は「Streamlit」を使って、PyTorchで学習したモデルをWebアプリケーションとして動かす方法について解説していきますね。
Pythonで機械学習を学んでいると、コンソール画面だけで結果を確認するだけでは少し物足りなくなってくることがあるかもしれません。そんなとき、Streamlitを使えば、Webデザインの知識がなくても、わずかなコードで直感的なUIを作ることができるんです。
![]()
【Hiroki】
Yukiさん、ありがとうございます!PyTorchでモデルを作っても、結局どうやって外部に見せればいいのか迷っていたところでした。Streamlitなら、Pythonだけで完結するんですか?
![]()
【Yuki】
はい、そうなんです。HTMLやCSSを書く必要は一切ありません。まずは、必要な環境を整えるところから始めましょう。PyTorchとStreamlit、そしてモデルを動かすために必要なパッケージをインストールします。
pip install torch torchvision streamlit
Streamlitの基本構造とPyTorchモデルの読み込み
![]()
【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】
なるほど、@st.cache_resourceというデコレータを使うんですね。これがあるおかげで、毎回モデルを読み直さなくて済むということでしょうか?
![]()
【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】
すごいですね!たったこれだけの記述で、画像をアップロードして結果を表示するツールができるなんて驚きです。Vimでコードを書いているときも、こうやってすぐに視覚的に結果が見えるとモチベーションが上がりそうです。
Gemini APIとの連携:最新のモデル活用
![]()
【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】
gemini-2.0-flashを使うんですね。モデルの出力結果をそのまま表示するだけでなく、LLMで加工してあげると、アプリとしての完成度が一段と上がりそうです。
![]()
【Yuki】
ええ、その通りです。重要なのは、PyTorchのような「計算エンジン」と、Streamlitのような「対話インターフェース」、そしてGeminiのような「高度な推論エンジン」をどう繋ぎ合わせるか、という点ですね。
開発を効率化するヒント
![]()
【Yuki】
最後に、Streamlitアプリを起動するときは、ターミナルで streamlit run app.py と入力するだけです。自動的にブラウザが立ち上がりますよ。
Streamlit 公式ドキュメント には、他にもボタンの配置やグラフの描画など、詳細なカスタマイズ方法がたくさん載っています。ぜひ参考にしてみてください。
![]()
【Hiroki】
ありがとうございます。Yukiさんのおかげで、自分の手元にあるモデルをWebアプリにする勇気が湧いてきました。まずは簡単な分類アプリから作ってみます!
![]()
【Yuki】
応援しています。わからないことがあったら、いつでも聞いてくださいね。一緒に頑張りましょう。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

