Streamlit との連携 -- 画像二値化GUIアプリケーション¶
Streamlit を使用してグラフィカルに画像二値化を行うアプリケーションのサンプルです。
画像はファイルアップローダーから選択して読み込むことができます。 二値化しきい値はスライダーにより操作できます。
本サンプルの実行には予め Streamlit をインストールしておく必要があります。 pip コマンドを使用する場合、次のようにインストールしてください。
pip install streamlit==0.82.0
コード¶
import pyfie
import streamlit as st
# PyFIE 関数が返すエラーコードに応じて例外を発生させる機能を有効化
pyfie.ctrl.enable_f_err_exception(True)
# GUIで調整可能なパラメータ
threshold = st.sidebar.slider("二値化しきい値", 0, 255, 128, 1)
uploaded_file = st.sidebar.file_uploader(
'画像ファイル選択', type=["bmp", "png", "jpg", "jpeg", "tif", "tiff"])
use_column_width = st.sidebar.checkbox('画像をウィンドウ幅に合わせて表示')
@st.cache
def load_img_file(file):
"""ファイルから画像を読み込む。
読み込み結果をキャッシュすることで、
二値化パラメータだけを変えたときに画像が再読み込みされることを防いでいる。"""
return pyfie.imdecode(file.read())
if uploaded_file is not None:
with st.spinner('画像を読み込み中...'):
himg = load_img_file(uploaded_file)
if himg.f_type != pyfie.F_IMG_UC8 or himg.ch != 1:
st.text("エラー:画像がUC8型1チャネルではありません。")
else:
# 入力画像を表示
# デフォルトではウィンドウ幅まで画像が縮小されてしまうので、
# 縮小されないように調整する
image = st.image(himg.ndarray, caption="入力画像",
width=himg.width, use_column_width=use_column_width)
# 二値化実行
hbin = himg.empty_like(pyfie.F_IMG_BIN)
pyfie.fnFIE_binarize(himg, hbin, threshold)
# 出力画像を表示
bin_image = st.image(
hbin.clone_to_ndarray() * 255, caption="二値画像", output_format="PNG",
width=himg.width, use_column_width=use_column_width)
else:
st.text("サイドバーから画像を選択してください。")
コードの実行には下記のコマンドを使用します。 このコードのファイル名は sample_streamlit.py とします。
streamlit run sample_streamlit.py