-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
46 lines (38 loc) · 1.81 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 以下を「app.py」に書き込み
import streamlit as st
import matplotlib.pyplot as plt
from PIL import Image
from model import predict
st.set_option("deprecation.showfileUploaderEncoding", False)
st.sidebar.title("画像認識アプリ")
st.sidebar.write("オリジナルの画像認識モデルを使って何の画像かを判定します。")
st.sidebar.write("")
img_source = st.sidebar.radio("画像のソースを選択してください。",
("画像をアップロード", "カメラで撮影"))
if img_source == "画像をアップロード":
img_file = st.sidebar.file_uploader("画像を選択してください。", type=["png", "jpg"])
elif img_source == "カメラで撮影":
img_file = st.camera_input("カメラで撮影")
if img_file is not None:
with st.spinner("推定中..."):
img = Image.open(img_file)
st.image(img, caption="対象の画像", width=480)
st.write("")
# 予測
results = predict(img)
# 結果の表示
st.subheader("判定結果")
n_top = 3 # 確率が高い順に3位まで返す
for result in results[:n_top]:
st.write(str(round(result[2]*100, 2)) + "%の確率で" + result[0] + "です。")
# 円グラフの表示
pie_labels = [result[1] for result in results[:n_top]]
pie_labels.append("others")
pie_probs = [result[2] for result in results[:n_top]]
pie_probs.append(sum([result[2] for result in results[n_top:]]))
fig, ax = plt.subplots()
wedgeprops={"width":0.3, "edgecolor":"white"}
textprops = {"fontsize":6}
ax.pie(pie_probs, labels=pie_labels, counterclock=False, startangle=90,
textprops=textprops, autopct="%.2f", wedgeprops=wedgeprops) # 円グラフ
st.pyplot(fig)