Hugging FaceでStreamlitのSpaceを作成すると簡単にみんなで使える便利なアプリが作れることが分かったのでこれから活用してみることにしました。
デプロイまでに学習したことを自分用+これからやってみたい人向けに簡潔に残しておくことにしました。
Streamlit
Streamlitは WEBアプリケーションをデプロイ(サーバー等に設置してユーザーが使えるようにする)するためのフレームワーク で、オープンソースで利用できます。特に機械学習やデータ分析などのプロジェクトをデプロイするのに向いているようです。まずは公式ドキュメントを読んでどのような用途があるか学習するのを推奨します。
MakeQR - Streamlit で書いたコードをSpaceでデプロイ
Hugging FaceのSpaceではWEBアプリケーションをデプロイすることできますが、中でもStreamlitをフレームワークとして利用することができます。今回は URLをインプットに入力するとQRコード画像を作成してくれるアプリの配布 を目指そうと思います。
SpaceでWEBアプリケーションを作成するには、まず"Create new space"を押して新しいリポジトリを作成します。
ファイル構成
SpaceでWEBアプリを実行するには最低限アプリそのものであるapp.py
と依存関係を表したrequirements.txt
をアップロードする必要があります。SpaceはGitリポジトリーを用いるDockerとなっていて、ファイルのプル・プッシュにGitを使える(手動でアップもできます)他、requirements.txt
で必要なライブラリーのイメージを指定することができます。
また実行環境としてCPUと16GBのVRAMを無料で使うことができます。画像や言語を処理する機械学習モデル等でなければこれで十分です。
若干の欠点は、 Spaceでアプリを公開するとソースコードも公開されてしまう ことです。ソースコードを公開したくない場合はSpace以外のサイトにデプロイするか、必要な機能をAPI化して別サイトから取り寄せる等の構造にするとよいでしょう。
requirements.txt
QRコードを扱うのにPillowとqrcodeを使います。SpaceではTensorFlowやKeras等もイメージに使えます。
streamlit
pillow
qrcode
app.py
アプリ本体ではUIを使った処理をStreamlitで、それ以外の自前で実装したい処理は自作関数にします。それだけです。
from PIL import Image
import qrcode
import streamlit as st
def MakeQR(url):
_img = qrcode.make(url)
_img.save("qrcode.png")
img = Image.open("qrcode.png")
return img
# NOTE メイン部分
st.title("QR maker")
# NOTE インプットから文字列を取得
url = st.text_input("Input URL to make QR code here:")
# NOTE ボタンを押すと条件文が実行される
if st.button("Generate QR code:"):
img_caption = "QR image for " + url
qr = MakeQR(url)
st.image(qr, caption=img_caption)
MakeQRを使えば 怪しげなアクセス権限を要求してくるGoogle Playのアプリを入れなくても(笑) 簡単にみんなで共有したいサイトのQRコードを作れるようになるという利点があります。ぜひご活用ください。