-
Notifications
You must be signed in to change notification settings - Fork 0
/
Woodlands.py
115 lines (92 loc) · 3.57 KB
/
Woodlands.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import streamlit as st
import numpy as np
from PIL import Image
from app import process_file
from dictionary import Woodlands, code_to_label
from keras.api._v2.keras.models import load_model
import base64
import tensorflow_hub as hub
@st.cache_resource(ttl=3600)
def load_classifier():
return load_model("./assets/resnet_animal_v1.h5")
@st.cache_resource(ttl=3600)
def load_detector():
return hub.load("./assets/detector_ssd_mobilenet")
def autoplay_audio(file_path: str):
with open(file_path, "rb") as f:
data = f.read()
b64 = base64.b64encode(data).decode()
md = f"""
<audio controls autoplay="true">
<source src="data:audio/mp3;base64,{b64}" type="audio/mp3">
</audio>
"""
st.markdown(
md,
unsafe_allow_html=True,
)
def process_image(model, image):
"""
returns a string that needs to be written using the streamlit write function
"""
image = image.resize((256, 256))
image = np.array(image)
confidences = model.predict(image[np.newaxis, ...])
class_pred = np.argmax(confidences)
label = code_to_label[class_pred]
if label in Woodlands:
prediction_write_up = ""
# prediction_write_up += f"**_{label}_** predicted with a confidence of {np.max(confidences) * 100:.2f}% \n"
prediction_write_up += f" \n"
prediction_write_up += Woodlands[label]
autoplay_audio("./assets/airhorn.mp3")
else:
prediction_write_up = ""
# prediction_write_up += f"**_{label}_** predicted with a confidence of {np.max(confidences) * 100:.2f}% \n"
prediction_write_up += f" \n"
prediction_write_up += "Area secured, Keep moving forward!"
return label, prediction_write_up
def main():
st.set_page_config(
page_title="Woodlands", layout="wide", initial_sidebar_state="auto"
)
st.title("Woodlands")
classifier = load_classifier()
detector = load_detector()
option = st.selectbox(
"Select an option:", ("SenView", "Try a Demo (Wolf)", "Try a Demo (Rabbit)")
)
if option == "SenView":
image = st.camera_input("Capture image")
if image is not None:
image = Image.open(image)
label, prediction_write_up = process_image(model, image)
st.write(prediction_write_up)
elif option == "Try a Demo (Wolf)":
st.write(
"Upload a picture of your plant and let SenView identify it for you. Once the plant is identified, SenView will detect if a lion or hyena is present in the image."
)
image = Image.open("./assets/wolf.jpg")
st.write("Demo image: Lion")
st.image(image)
# with st.spinner('loading prediction'):
# time.sleep(0.8)
# st.write("#### Prediction:")
label, prediction_write_up = process_image(model, image)
st.write(prediction_write_up)
elif option == "Try a Demo (Rabbit)":
st.write(
"Upload a picture of your plant and let SenView identify it for you. Once the plant is identified, SenView will detect if a lion or hyena is present in the image."
)
image = Image.open("./assets/rabbit.jpg")
st.write("Demo image: Rabbit")
st.image(image)
# with st.spinner('loading prediction'):
# time.sleep(0.8)
# st.write("#### Prediction:")
label, prediction_write_up = process_image(model, image)
st.write(prediction_write_up)
else:
st.write("Please select an option")
if __name__ == "__main__":
main()