LoginSignup
1
1

Streamlit +HuggingFace SpaceでWEBアプリケーションをデプロイする

Posted at

Hugging FaceでStreamlitのSpaceを作成すると簡単にみんなで使える便利なアプリが作れることが分かったのでこれから活用してみることにしました。
デプロイまでに学習したことを自分用+これからやってみたい人向けに簡潔に残しておくことにしました。

Streamlit

Streamlitは WEBアプリケーションをデプロイ(サーバー等に設置してユーザーが使えるようにする)するためのフレームワーク で、オープンソースで利用できます。特に機械学習やデータ分析などのプロジェクトをデプロイするのに向いているようです。まずは公式ドキュメントを読んでどのような用途があるか学習するのを推奨します。

MakeQR - Streamlit で書いたコードをSpaceでデプロイ

Hugging FaceのSpaceではWEBアプリケーションをデプロイすることできますが、中でもStreamlitをフレームワークとして利用することができます。今回は URLをインプットに入力するとQRコード画像を作成してくれるアプリの配布 を目指そうと思います。
SpaceでWEBアプリケーションを作成するには、まず"Create new space"を押して新しいリポジトリを作成します。

st02.PNG

ファイル構成

SpaceでWEBアプリを実行するには最低限アプリそのものであるapp.pyと依存関係を表したrequirements.txtをアップロードする必要があります。SpaceはGitリポジトリーを用いるDockerとなっていて、ファイルのプル・プッシュにGitを使える(手動でアップもできます)他、requirements.txtで必要なライブラリーのイメージを指定することができます。

st03.PNG

また実行環境として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)

st04.PNG

MakeQRを使えば 怪しげなアクセス権限を要求してくるGoogle Playのアプリを入れなくても(笑) 簡単にみんなで共有したいサイトのQRコードを作れるようになるという利点があります。ぜひご活用ください。

1
1
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
1
1