import streamlit as st from PIL import Image from ocr_engine import extract_weight_from_image import urllib.parse st.set_page_config(page_title="⚖️ Auto Weight Logger", layout="centered") st.title("⚖️ Auto Weight Logger") # ------------------------------ # ✅ Setup session state for clearing # ------------------------------ if "reset" not in st.session_state: st.session_state.reset = False # ------------------------------ # 🔁 If reset is active, clear and rerun once # ------------------------------ if st.session_state.reset: st.session_state.reset = False # clear the flag st.rerun() # ------------------------------ # 🔘 Clear Photo Button # ------------------------------ if st.button("🔁 Clear Photo"): st.session_state.reset = True st.rerun() # ------------------------------ # 📷 Capture Image from Webcam # ------------------------------ img_data = st.camera_input("📷 Capture the weight display") if img_data: st.success("✅ Image captured successfully!") # ✅ Optional: check file size if len(img_data.getvalue()) > 5 * 1024 * 1024: st.error("❌ Image too large (>5MB). Please try again.") st.stop() # Open and display image image = Image.open(img_data) st.image(image, caption="📸 Snapshot", use_column_width=True) # -------------------------- # 🧠 Extract weight via OCR # -------------------------- with st.spinner("🔍 Extracting weight..."): weight, confidence = extract_weight_from_image(image) st.write(f"🛠️ DEBUG: weight = {weight}, confidence = {confidence}") # -------------------------- # ❌ Retry if confidence low # -------------------------- if not weight or confidence < 80: st.error(f"⚠️ OCR confidence too low ({int(confidence)}%). Please retake the image.") if st.button("🔁 Retry"): st.session_state.reset = True st.rerun() st.stop() # -------------------------- # ✅ Success — show result # -------------------------- st.success(f"✅ Detected Weight: {weight} g (Confidence: {int(confidence)}%)") # Salesforce parameters device_id = "BAL-001" image_url = "" # Optional: set if you host the image encoded_weight = urllib.parse.quote(str(weight)) encoded_device = urllib.parse.quote(device_id) encoded_image_url = urllib.parse.quote(image_url) # ✅ Salesforce VF Page URL salesforce_url = ( "https://autoweightlogger-dev-ed.my.salesforce-sites.com/" f"weight_logger_page?WeightInput={encoded_weight}&DeviceID={encoded_device}&ImageURL={encoded_image_url}" ) # -------------------------- # 🔗 Display Salesforce link # -------------------------- st.markdown("### 📤 Send to Salesforce") st.markdown(f"[✅ Click here to confirm and log in Salesforce]({salesforce_url})", unsafe_allow_html=True)