Python × Webアプリの開発環境として定番になりつつある「Streamlit」ですが、いざ公開しようとすると意外とつまずくポイントもあります。
筆者もこれまでにOpenCVやMediaPipeを使ったアプリを何本もデプロイしてきましたが、その中で見えてきたポイントを整理してみました。
私の場合は動画処理の読み込み、Opencvのインポートの部分で躓きましたので、備忘録として残しておきます。
Streamlitアプリを公開する基本の手順
- GitHubでリポジトリを作成
main.py や app.py などのメインコードと、requirements.txt を用意します。requirement.txtの中にはアプリで使用するパッケージ名が入ります。 - Streamlit Cloud にアクセス
→ https://streamlit.io/cloud
GitHub連携でログインすれば、リポジトリを選んで即デプロイできます。基本的にはGithubアカウントで入っておくのが無難だと思います。 - デプロイ設定を記入
ブランチ(通常はmain)、起動ファイル名(例:main.py
)を入力すればOK。
OpenCV使用時の注意点
OpenCVを使っていると、Webカメラ処理やGUI関連でエラーが出ることがあります。
カメラ使用で止まる
cap = cv2.VideoCapture(0) # ← これはWebでは動きません!
Streamlit CloudはGUIもカメラのストリーミング機能も使えないので、これはローカル限定にする必要があります。GUIを使用する場合にはStreamlit内の機能を使う必要があります。
tkinterでファイル選択 → 失敗
GUIライブラリ tkinter は非対応。
→ st.file_uploader()
を使ってWebアップロードに置き換えましょう。tkinterもいわゆるGUIを作るパッケージなので、Streamlitでは使用することができないです。
requirements.txt のサンプル
このポイントがローカル環境でアプリを作成するときに最も大事な部分になります。私の場合にはOpencvを使っていたため普通にopencv-python
を使用していましたが、Streamlitではエラーが出て今井使うことができません。
下記のようにopencv-python-headless
をrequirement.txtに記載するようにしましょう。
streamlit
opencv-python-headless
mediapipe
matplotlib
pandas
numpy
opencv-python
ではなく opencv-python-headless を使用してください!
メモリ制限への対策(無料枠は約1GB)
Streamlit Cloud(無料)は1GB以下のメモリ制限があります。重たい動画ファイルを一気に処理しようとするとアプリがクラッシュします。もしくは動画をアップロードする時点でファイルサイズを小さくしておくのも良いでしょう。
NG例:全フレーム読み込み
all_frames = [cap.read() for _ in range(frame_count)]
OK例:1フレームずつ読み込み
cap.set(cv2.CAP_PROP_POS_FRAMES, idx)
ret, frame = cap.read()
✅ tempfile
を活用
アップロードファイルは一時保存してから処理するのが◎。
import tempfile
tfile = tempfile.NamedTemporaryFile(delete=False)
tfile.write(uploaded_file.read())
video_path = tfile.name
アプリ作成時にチェックすべきこと
項目 | 内容 |
---|---|
アップロード | st.file_uploader() を使う |
メモリ制御 | 全フレームの読み込みを避ける |
カメラ使用 | Web公開では使えない(ローカル用に分岐を) |
デプロイ方法 | GitHub → Streamlit Cloud に連携 |
依存パッケージ | opencv-python-headless , mediapipe など |
📝 まとめ
Streamlitはすごく便利ですが、Web公開を意識して設計しないと動かなくなる部分も多いです。特に、OpenCVを使った処理やメモリの扱いには注意が必要です。デプロイがうまく通ったとしても、うまくいかないことが多々あるので、その際にはアプリ右下から見ることができるログを見ながら対応していくようにしましょう。
今回紹介したような点を押さえておけば、よりスムーズにアプリ公開ができるはずです。
わたしもこれまでにいろいろとアプリを作っており、その記事も書いているのでご参照いただけますと幸いです。
記事URL:


コメント