import streamlit as st import cv2 import pandas as pd import numpy as np from tensorflow.keras.models import load_model from PIL import Image import datetime # Load File model_imp = load_model('./src/model.keras') def run(): # Title st.title('Safe and Unsafe Working Condition') # Sub Header st.subheader('Safety Prediction of Working Condition Image ') # Image image = Image.open('./src/image12.jpg') st.image(image) # Create form with st.form(key='safety-prediction'): st.markdown('Data ID') date = st.date_input("Select a date", help='Input the time the photo was taken or obtained') time = st.time_input("Select a time") timestamp = datetime.datetime.combine(date, time) name_id = st.text_input('ID', value='---name/id---', help='Input your name or identity') uploaded_img = st.file_uploader("Upload an image", type=['jpg', 'jpeg', 'png']) submitted = st.form_submit_button('Predict') # Data inference data_inf_input = { 'timestamp': timestamp, 'name_id': name_id, } # Data frame st.markdown('Data Summary:') data_inference = pd.DataFrame([data_inf_input]) st.dataframe(data_inference) # Preprocessing if uploaded_img is not None: img_pil = Image.open(uploaded_img).convert('RGB') img_arr = np.array(img_pil) # Resize as input model (img_height × img_width) img_resized = cv2.resize(img_arr, (200, 200)) # Scaling img_array = np.array(img_resized) / 255. # Change dimension img_dims = np.expand_dims(img_array, axis=0) st.image(uploaded_img) else: st.warning("Please upload an image to continue.") st.markdown('Result:') # Prediction if submitted: prob = model_imp.predict(img_dims) # Convert to class (0 = safe, 1 = unsafe) pred = 1 if prob >= 0.5 else 0 class_names = ['SAFE', 'UNSAFE'] label = class_names[pred] percentage = prob[0][0] * 100 # Result st.write(f"#### Prediction: this image consider {label} working condition.") st.write(f"##### Probability: {percentage:.2f} % ") if __name__ == '__main__': run()